<?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>155479</bug_id>
          
          <creation_ts>2016-03-14 17:34:17 -0700</creation_ts>
          <short_desc>Remove the Baker barrier from JSC</short_desc>
          <delta_ts>2016-03-15 18:32:40 -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 Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1174836</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-14 17:34:17 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174837</commentid>
    <comment_count>1</comment_count>
      <attachid>274059</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-14 17:34:58 -0700</bug_when>
    <thetext>Created attachment 274059
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174906</commentid>
    <comment_count>2</comment_count>
      <attachid>274076</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-14 22:40:25 -0700</bug_when>
    <thetext>Created attachment 274076
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174907</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 22:41:35 -0700</bug_when>
    <thetext>Attachment 274076 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSObject.h:872:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 22 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>1174908</commentid>
    <comment_count>4</comment_count>
      <attachid>274077</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-14 22:48:31 -0700</bug_when>
    <thetext>Created attachment 274077
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174909</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 22:50:23 -0700</bug_when>
    <thetext>Attachment 274077 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSObject.h:872:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 22 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>1174927</commentid>
    <comment_count>6</comment_count>
      <attachid>274077</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-15 01:06:14 -0700</bug_when>
    <thetext>Comment on attachment 274077
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174976</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-15 08:26:52 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/198212</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175223</commentid>
    <comment_count>8</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-03-15 17:44:30 -0700</bug_when>
    <thetext>This change may have introduced a new JSC test failure
&lt;https://build.webkit.org/builders/Apple%20El%20Capitan%20Debug%20JSC%20%28Tests%29/builds/2125&gt;

stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: Timed out after 339.000000 seconds!
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 1   0x10afd8a40 WTFCrash
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 2   0x109ede0aa timeoutThreadMain(void*)
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 3   0x10b043c39 WTF::createThread(void (*)(void*), void*, char const*)::$_0::operator()() const
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 4   0x10b043c0d void std::__1::__invoke_void_return_wrapper&lt;void&gt;::__call&lt;WTF::createThread(void (*)(void*), void*, char const*)::$_0&amp;&gt;(WTF::createThread(void (*)(void*), void*, char const*)::$_0&amp;&amp;&amp;)
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 5   0x10b043bac std::__1::__function::__func&lt;WTF::createThread(void (*)(void*), void*, char const*)::$_0, std::__1::allocator&lt;WTF::createThread(void (*)(void*), void*, char const*)::$_0&gt;, void ()&gt;::operator()()
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 6   0x10a8e1eda std::__1::function&lt;void ()&gt;::operator()() const
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 7   0x10b04290e WTF::threadEntryPoint(void*)
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 8   0x10b0441a1 WTF::wtfThreadEntryPoint(void*)
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 9   0x7fff9aefac13 _pthread_body
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 10  0x7fff9aefab90 _pthread_body
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 11  0x7fff9aef8375 thread_start
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: test_script_15145: line 2: 39785 Segmentation fault: 11  ( &quot;$@&quot; ../../.vm/JavaScriptCore.framework/Resources/jsc --useFTLJIT\=false --useFunctionDotArguments\=true --jitMemoryReservationSize\=50000 --useFTLJIT\=true --useConcurrentJIT\=false --thresholdForJITAfterWarmUp\=100 materialize-past-butterfly-allocation.js )
stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: ERROR: Unexpected exit code: 139
FAIL: stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175226</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-15 17:48:47 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; This change may have introduced a new JSC test failure
&gt; &lt;https://build.webkit.org/builders/
&gt; Apple%20El%20Capitan%20Debug%20JSC%20%28Tests%29/builds/2125&gt;
&gt; 
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool:
&gt; Timed out after 339.000000 seconds!
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 1  
&gt; 0x10afd8a40 WTFCrash
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 2  
&gt; 0x109ede0aa timeoutThreadMain(void*)
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 3  
&gt; 0x10b043c39 WTF::createThread(void (*)(void*), void*, char
&gt; const*)::$_0::operator()() const
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 4  
&gt; 0x10b043c0d void
&gt; std::__1::__invoke_void_return_wrapper&lt;void&gt;::__call&lt;WTF::createThread(void
&gt; (*)(void*), void*, char const*)::$_0&amp;&gt;(WTF::createThread(void (*)(void*),
&gt; void*, char const*)::$_0&amp;&amp;&amp;)
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 5  
&gt; 0x10b043bac std::__1::__function::__func&lt;WTF::createThread(void (*)(void*),
&gt; void*, char const*)::$_0, std::__1::allocator&lt;WTF::createThread(void
&gt; (*)(void*), void*, char const*)::$_0&gt;, void ()&gt;::operator()()
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 6  
&gt; 0x10a8e1eda std::__1::function&lt;void ()&gt;::operator()() const
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 7  
&gt; 0x10b04290e WTF::threadEntryPoint(void*)
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 8  
&gt; 0x10b0441a1 WTF::wtfThreadEntryPoint(void*)
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 9  
&gt; 0x7fff9aefac13 _pthread_body
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 10 
&gt; 0x7fff9aefab90 _pthread_body
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool: 11 
&gt; 0x7fff9aef8375 thread_start
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool:
&gt; test_script_15145: line 2: 39785 Segmentation fault: 11  ( &quot;$@&quot;
&gt; ../../.vm/JavaScriptCore.framework/Resources/jsc --useFTLJIT\=false
&gt; --useFunctionDotArguments\=true --jitMemoryReservationSize\=50000
&gt; --useFTLJIT\=true --useConcurrentJIT\=false
&gt; --thresholdForJITAfterWarmUp\=100 materialize-past-butterfly-allocation.js )
&gt; stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool:
&gt; ERROR: Unexpected exit code: 139
&gt; FAIL: stress/materialize-past-butterfly-allocation.js.ftl-no-cjit-small-pool

Extremely unlikely. This pitch just kills dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175232</commentid>
    <comment_count>10</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-03-15 18:23:57 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Extremely unlikely. This pitch just kills dead code.

In that case, apologies for the false alarm. This was the only JSC change in the failing run on Yosemite and El Capitan.

I filed https://bugs.webkit.org/show_bug.cgi?id=155526 to track the failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175237</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-15 18:32:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Extremely unlikely. This pitch just kills dead code.
&gt; 
&gt; In that case, apologies for the false alarm. This was the only JSC change in
&gt; the failing run on Yosemite and El Capitan.
&gt; 
&gt; I filed https://bugs.webkit.org/show_bug.cgi?id=155526 to track the failure.

Looks like it&apos;s actually likely that this change did it, given that it&apos;s been failing consistently (according to https://bugs.webkit.org/show_bug.cgi?id=155526#c1).

I think that since this times out in debug but not release, the most likely reason for the failure is that this is just a super inefficient test.  That means that even if it wasn&apos;t timing out, it would be taking up a disproportionate amount of time.  It&apos;s best to remove the test.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274059</attachid>
            <date>2016-03-14 17:34:58 -0700</date>
            <delta_ts>2016-03-14 22:40:25 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>111308</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5ODE1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjY5LDcgKzI2OSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0NvbXBpbGF0aW9uTW9kZS5jcHAKICAgICBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CiAgICAgZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAKLSAgICBkZmcvREZHQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5jcHAKICAgICBkZmcvREZHRENFUGhhc2UuY3BwCiAgICAgZGZnL0RGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksNiBAQAogCQkw
RjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLzsgfTsKIAkJMEYwNUMzQjQxNjgzQ0Y5
MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDVDM0IyMTY4M0NGOEYwMEJBRjQ1
QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07CiAJCTBGMDc3NkJGMTRG
RjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNzc2QkQxNEZGMDAyODAwMTAyMzMyIC8q
IEpJVENvbXBpbGF0aW9uRWZmb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJy
aWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwOTgxRjUxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVy
T3B0aW1pemF0aW9uUGhhc2UuY3BwICovOyB9OwotCQkwRjA5ODFGODFCQzVFNTY1MDA0ODE0Rjgg
LyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOTgxRjYxQkM1RTU2NTAwNDgxNEY4IC8qIERG
R0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEYwQTc1MjIxQjk0QkZB
OTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRU
eXBlLmNwcCAqLzsgfTsKIAkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQTc1
MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAv
KiBMTEludFRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovOyB9
OwpAQCAtMjI0OCw4ICsyMjQ2LDYgQEAKIAkJMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERG
R0NvbWJpbmVkTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
Q29tYmluZWRMaXZlbmVzcy5oOyBwYXRoID0gZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0FycmF5
aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
Nzc2QkQxNEZGMDAyODAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uRWZmb3J0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDk4MUY1MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5
QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjA5ODFGNjFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRp
bWl6YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb3B5
QmFycmllck9wdGltaXphdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29weUJhcnJpZXJPcHRp
bWl6YXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBBNzUyMDFC
OTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMEI4Mzk3MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTEludFRodW5rcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludFRodW5rcy5jcHA7
IHBhdGggPSBsbGludC9MTEludFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02MTM4LDggKzYxMzQsNiBAQAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovLAogCQkJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0Ux
NSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJCTBGRUQ2N0I4MUIyNjI1
NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLywKLQkJCQkwRjA5ODFG
NTFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAg
Ki8sCi0JCQkJMEYwOTgxRjYxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkMxNkMxREIwMTAwODJDNUU4IC8q
IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFNjE3QTBCOENDMDA3NzNB
RDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8sCkBAIC03MjA2LDcgKzcy
MDAsNiBAQAogCQkJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QkExQjI2MjU2
RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEYwOTgxRjgxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNjE3QTBC
OENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTg3NzAsNyArODc2Myw2IEBACiAJCQkJMEYzOEIwMTkxN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0Ex
QTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0Rjgg
LyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkJFMEY3MjE2QzFEQjAzMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYxODMyOTFDNDVC
RjA3MDA3MjQ1MEIgLyogQWlyQ0NhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDk0LDcgKzIwOTQsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6Ci0gICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKICAgICBjYXNlIEFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAg
ICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVl
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE5Miw3ICsxOTIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0
ZXJmbHk6Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBiYXJlbHkgd29ya3MuIFRoZSBkYW5nZXIgaXMgdGhhdCB0
aGUgR2V0QnV0dGVyZmx5IGlzIHVzZWQgYnkgc29tZXRoaW5nIHRoYXQKICAgICAgICAgICAgICAg
ICAgICAgLy8gZG9lcyBzb21ldGhpbmcgZXNjYXBpbmcgdG8gYSBjYW5kaWRhdGUuIEZvcnR1bmF0
ZWx5LCB0aGUgb25seSBidXR0ZXJmbHktdXNpbmcgb3BzCiAgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQgd2UgZXhlbXB0IGhlcmUgYWxzbyB1c2UgdGhlIGNhbmRpZGF0ZSBkaXJlY3RseS4gSWYg
dGhlcmUgZXZlciB3YXMgYQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MDMsMTMgKzgwMyw2IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVmKEhlYXBMb2Nh
dGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hpbGQxKCkpLCBM
YXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKIAotICAgIGNhc2UgR2V0QnV0dGVyZmx5
UmVhZE9ubHk6Ci0gICAgICAgIC8vIFRoaXMgcnVsZSBpcyBzZXBhcmF0ZSB0byBwcmV2ZW50IENT
RSBvZiBHZXRCdXR0ZXJmbHkgd2l0aCBHZXRCdXR0ZXJmbHlSZWFkT25seS4gQnV0IGluIHJlYWxp
dHksCi0gICAgICAgIC8vIHRoaXMgd29ya3MgYmVjYXVzZSB3ZSBkb24ndCBpbnRyb2R1Y2UgR2V0
QnV0dGVyZmx5UmVhZE9ubHkgdW50aWwgdGhlIGJpdHRlciBlbmQgb2YgY29tcGlsYXRpb24uCi0g
ICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihCdXR0ZXJmbHlSZWFkT25seUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2RlLT5jaGlsZDEo
KSksIExhenlOb2RlKG5vZGUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICBjYXNl
IEFycmF5aWZ5OgogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgcmVhZChK
U0NlbGxfc3RydWN0dXJlSUQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvcHlCYXJyaWVy
T3B0aW1pemF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0NvcHlCYXJyaWVy
T3B0aW1pemF0aW9uUGhhc2UuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAi
REZHQ2xvYmJlcml6ZS5oIgotI2luY2x1ZGUgIkRGR0RvZXNHQy5oIgotI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCi0jaW5jbHVkZSAiREZHUGhhc2UuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotbmFtZXNwYWNlIHsKLQotYm9vbCB2
ZXJib3NlID0gZmFsc2U7Ci0KLWNsYXNzIENvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewotcHVibGljOgotICAgIENvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2Uo
R3JhcGgmIGdyYXBoKQotICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY29weSBiYXJyaWVyIG9wdGlt
aXphdGlvbiIpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBib29sIHJ1bigpCi0gICAgewotICAg
ICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygiU3RhcnRpbmcgY29weSBi
YXJyaWVyIG9wdGltaXphdGlvbjpcbiIpOwotICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBGaXJzdCBjb252ZXJ0IGFsbCBHZXRCdXR0ZXJmbHkgbm9k
ZXMgaW50byBHZXRCdXR0ZXJmbHlSZWFkT25seS4KLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gR2V0QnV0dGVyZmx5KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRCdXR0
ZXJmbHlSZWFkT25seSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBB
bnl0aW1lIHdlIHVzZSBhIEdldEJ1dHRlcmZseVJlYWRPbmx5IGluIGEgc2V0dGluZyB0aGF0IG1h
eSB3cml0ZSB0byB0aGUgaGVhcCwgb3IgaWYgd2UncmUgaW4gYQotICAgICAgICAvLyBuZXcgZXBv
Y2gsIGNvbnZlcnQgaXQgdG8gYSBHZXRCdXR0ZXJmbHkuIFRoZSBlcG9jaCBnZXRzIGluY3JlbWVu
dGVkIGF0IGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMsCi0gICAgICAgIC8vIGFueXRpbWUgd2UgR0Ms
IGFuZCBhbnl0aW1lIGEgYmFycmllciBvbiB0aGUgYnV0dGVyZmx5IG1heSBiZSBleGVjdXRlZC4g
V2UgdHJhdmVyc2UgdGhlIHByb2dyYW0KLSAgICAgICAgLy8gaW4gcHJlLW9yZGVyIHNvIHRoYXQg
d2UgYWx3YXlzIHNlZSB1c2VzIGFmdGVyIGRlZnMuIE5vdGUgdGhhdCB0aGlzIGlzIGEgZml4cG9p
bnQgYmVjYXVzZSBpZiB3ZQotICAgICAgICAvLyB0dXJuIGEgR2V0QnV0dGVyZmx5UmVhZE9ubHkg
aW50byBhIEdldEJ1dHRlcmZseSwgdGhlbiB3ZSd2ZSBpbnRyb2R1Y2VkIGEgYnV0dGVyZmx5IHJl
YWxsb2NhdGlvbi4KLSAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgRXBvY2gg
Y3VycmVudEVwb2NoID0gRXBvY2g6OmZpcnN0KCk7Ci0gICAgICAgIG1fZ3JhcGguY2xlYXJFcG9j
aHMoKTsKLSAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKLSAgICAgICAgICAgIGNoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luUHJlT3JkZXIoKSkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7Ci0g
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJvb2wgd3JpdGVzVG9IZWFwID0gd3JpdGVzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBI
ZWFwKTsKLQotICAgICAgICAgICAgICAgICAgICBib29sIHJlYWxsb2NhdGVzQnV0dGVyZmx5ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb2VzR0MobV9ncmFwaCwgbm9kZSkgfHwg
d3JpdGVzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBKU09iamVjdF9idXR0ZXJmbHkpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhbGxvY2F0ZXNCdXR0ZXJmbHkgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90
IGFuIGV4aGF1c3RpdmUgbGlzdCBvZiB0aGluZ3MgdGhhdCB3aWxsIGV4ZWN1dGUgY29weSBiYXJy
aWVycy4gTW9zdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmdzIHRoYXQgZXhlY3V0
ZSBjb3B5IGJhcnJpZXJzIGFsc28gZG8gR0Mgb3IgaGF2ZSB3cml0ZXMgdGhhdCBvdmVybGFwIHRo
ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0dGVyZmx5IGhlYXAsIGFuZCB3ZSBjYXRj
aCB0aGF0IGFib3ZlLgotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWFsbG9jYXRlc0J1dHRlcmZseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gR2V0QnV0dGVyZmx5UmVhZE9ubHkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXNUb0hlYXAg
fHwgY3VycmVudEVwb2NoICE9IGVkZ2UtPmVwb2NoKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVkZ2UtPnNldE9wKEdldEJ1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHJlYWxsb2NhdGVzQnV0dGVyZmx5KQotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dEVwb2NoLmJ1bXAoKTsKLQotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRFcG9jaChjdXJy
ZW50RXBvY2gpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBwaGFzZSBhbHdheXMgdGhpbmtzIHRoYXQgaXQgY2hh
bmdlcyB0aGUgZ3JhcGguIFRoYXQncyBPSywgYmVjYXVzZSBpdCdzIGEgbGF0ZSBwaGFzZS4KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
Ci0KLWJvb2wgcGVyZm9ybUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKEdyYXBoJiBncmFwaCkKLXsK
LSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvcHkgQmFycmllciBPcHRp
bWl6YXRpb24gUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8Q29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZT4oZ3JhcGgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmgJKHJl
dmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29weUJhcnJp
ZXJPcHRpbWl6YXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2VfaAotI2Rl
ZmluZSBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlX2gKLQotI2lmIEVOQUJMRShERkdf
SklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIEdyYXBoOwot
Ci0vLyBDb252ZXJ0cyBHZXRCdXR0ZXJmbHkgbm9kZXMgaW50byBHZXRCdXR0ZXJmbHlSZWFkT25s
eSBub2RlcyB3aGVuZXZlciB0aGUgYnV0dGVyZmx5IGlzIG9ubHkgdXNlZCBmb3IKLS8vIHJlYWQt
b25seSBvcGVyYXRpb25zLgotYm9vbCBwZXJmb3JtQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oR3Jh
cGgmKTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCi0KLSNlbmRpZiAvLyBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlX2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTk4
MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxl
OgogICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6
CiAgICAgY2FzZSBDaGVja0FycmF5OgogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBTa2lw
U2NvcGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTEsOCArMTE1MSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgQ2hlY2tDZWxsOgog
ICAgICAgICBjYXNlIENyZWF0ZVRoaXM6Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAg
ICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OiB7CisgICAgICAgIGNhc2UgR2V0QnV0dGVy
Zmx5OiB7CiAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDEwICs5Miw2IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MK
ICAgICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlMb2MiKTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKLSAgICBjYXNlIEJ1dHRlcmZseVJlYWRPbmx5TG9jOgotICAgICAgICBvdXQucHJpbnQo
IkJ1dHRlcmZseVJlYWRPbmx5TG9jIik7Ci0gICAgICAgIHJldHVybjsKLQogICAgIGNhc2UgQ2hl
Y2tUeXBlSW5mb0ZsYWdzTG9jOgogICAgICAgICBvdXQucHJpbnQoIkNoZWNrVHlwZUluZm9GbGFn
c0xvYyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDYgQEAgZW51bSBMb2NhdGlvbktpbmQgewogICAgIAogICAgIEFycmF5TGVuZ3RoTG9jLAogICAg
IEJ1dHRlcmZseUxvYywKLSAgICBCdXR0ZXJmbHlSZWFkT25seUxvYywKICAgICBDaGVja1R5cGVJ
bmZvRmxhZ3NMb2MsCiAgICAgT3ZlcnJpZGVzSGFzSW5zdGFuY2VMb2MsCiAgICAgQ2xvc3VyZVZh
cmlhYmxlTG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAg
ICBtYWNybyhHZXRCdXR0ZXJmbHksIE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0gICAgbWFjcm8oR2V0
QnV0dGVyZmx5UmVhZE9ubHksIE5vZGVSZXN1bHRTdG9yYWdlKSAvKiBBIG5vZGUgdXNlZCB0byBy
ZXBsYWNlIEdldEJ1dHRlcmZseSBhdCB0aGUgYml0dGVyIGVuZCBvZiBjb21waWxhdGlvbi4gKi9c
CiAgICAgbWFjcm8oQ2hlY2tBcnJheSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEFy
cmF5aWZ5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQXJyYXlpZnlUb1N0cnVjdHVy
ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjk5LDIyICsx
Mjk5LDYgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cgogICAgIHJl
dHVybiBleGVjLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
Lm9mZnNldEZvclZhbHVlKHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpLCBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptaW4oKSk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnV0dGVyZmx5KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQotewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwotCi0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oanNDYXN0PEpTT2JqZWN0
Kj4oY2VsbCktPmJ1dHRlcmZseSgpKTsKLX0KLQotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRBcnJheUJ1ZmZlclZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKLXsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKLQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGpzQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KGNlbGwpLT52ZWN0b3IoKSk7Ci19Ci0KIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFdhdGNocG9pbnRTZXQq
IHNldCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUs
OCArMTQ1LDYgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDMoRQogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJ
bmRleCwgSlNTdHJpbmcqKTsKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hT
dHJpbmdBbmRHZXRCcmFuY2hPZmZzZXQoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpT
U3RyaW5nKik7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ1dHRlcmZseShFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJyYXlC
dWZmZXJWZWN0b3IoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZh
cmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0
VmFyQXJnT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
cmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkRGR0NsZWFuVXBQ
aGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAi
REZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmgiCi0jaW5jbHVkZSAiREZHQ29weUJhcnJpZXJPcHRp
bWl6YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXpl
ci5oIgpAQCAtMzU3LDggKzM1Niw2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21w
aWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKLSAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKCkpCi0gICAgICAgICAgICBwZXJm
b3JtQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybVBoYW50b21J
bnNlcnRpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAgICAg
IHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CkBAIC00MzksOCArNDM2LDYg
QEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICAgICAg
cGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGtpbGwgZGVh
ZCBjb2RlIHRoYXQgd29uJ3QgYmUgcmVjb2duaXplZCBhcyBkZWFkIGJ5IEIzLgotICAgICAgICBp
ZiAoT3B0aW9uczo6dXNlQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oKSkKLSAgICAgICAgICAgIHBl
cmZvcm1Db3B5QmFycmllck9wdGltaXphdGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtU3RhY2tM
YXlvdXQoZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAg
ICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
Myw3ICs0ODMsNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAg
ICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNiBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZToKICAgICBjYXNlIEdldEV4ZWN1dGFibGU6CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAg
Y2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgY2Fz
ZSBBcnJheWlmeToKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMjYsNyArNDEyNiw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVh
ZE9ubHk6CiAgICAgICAgIGNvbXBpbGVHZXRCdXR0ZXJmbHkobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogCkBAIC00ODEzLDcgKzQ4MTIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIC8vIFdlIHVzZSByZXN1bHRQYXlsb2FkR1BSIGFzIGEgdGVtcG9y
YXJ5IGhlcmUuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGNsb2JiZXIgaXQgYWZ0ZXIgZ2V0dGluZyB0
aGUgCiAgICAgICAgIC8vIHZhbHVlIG91dCBvZiBpbmRleEdQUiBhbmQgZW51bWVyYXRvckdQUiBi
ZWNhdXNlIHJlc3VsdFBheWxvYWRHUFIgY291bGQgcmV1c2UgZWl0aGVyIG9mIHRob3NlIHJlZ2lz
dGVycy4KICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRQYXls
b2FkR1BSKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2Fk
R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0Nyw3ICs0
MTQ3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAgY2FzZSBHZXRC
dXR0ZXJmbHlSZWFkT25seToKICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseShub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAKQEAgLTQ4MTgsNyArNDgxNyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaDJHUFIpKTsKICAgICAgICAgbV9qaXQubW92ZShp
bmRleEdQUiwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0Lm5l
ZzMyKHNjcmF0Y2gxR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIy
NiwxMCArNTIyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIK
ICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZWRBcnJheVR5cGUoKSkpOwogCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGZhaWwg
PSBtX2ppdC5sb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlUmVnLCBzdG9yYWdlUmVnKTsKLQotICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChmYWls
LCB0aGlzLCBvcGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3Rvciwgc3RvcmFnZVJlZywgYmFzZVJl
ZykpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc3RvcmFnZVJlZyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTUyNTIsMTMgKzUyNDksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0zMihXYXN0
ZWZ1bFR5cGVkQXJyYXkpKTsKIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgZGF0YUdQUik7Ci0g
ICAgbV9qaXQucmVtb3ZlU3BhY2VCaXRzKGRhdGFHUFIpOwogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCB2ZWN0b3JHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCB2ZWN0b3JS
ZWFkeTsKLSAgICB2ZWN0b3JSZWFkeS5hcHBlbmQobV9qaXQuYnJhbmNoSWZUb1NwYWNlKHZlY3Rv
ckdQUikpOwotICAgIHZlY3RvclJlYWR5LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEZhc3RUeXBl
ZEFycmF5KGJhc2VHUFIpKTsKLSAgICBtX2ppdC5yZW1vdmVTcGFjZUJpdHModmVjdG9yR1BSKTsK
LSAgICB2ZWN0b3JSZWFkeS5saW5rKCZtX2ppdCk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhkYXRhR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mQXJyYXlCdWZmZXIo
KSksIGRhdGFHUFIpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZGF0YUdQUiwgQXJyYXlCdWZmZXI6Om9mZnNldE9mRGF0YSgpKSwgZGF0YUdQUik7CiAgICAgbV9q
aXQuc3ViUHRyKGRhdGFHUFIsIHZlY3RvckdQUik7CkBAIC02MzIyLDIzICs2MzEzLDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ1dHRlcmZseQogICAgIAogICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKIAotICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZk5vdFRvU3Bh
Y2UocmVzdWx0R1BSKSwKLSAgICAgICAgICAgICAgICB0aGlzLCBvcGVyYXRpb25HZXRCdXR0ZXJm
bHksIHJlc3VsdEdQUiwgYmFzZUdQUikpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgR2V0
QnV0dGVyZmx5UmVhZE9ubHk6Ci0gICAgICAgIG1faml0LnJlbW92ZVNwYWNlQml0cyhyZXN1bHRH
UFIpOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERGR19DUkFTSCht
X2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIG5vZGUgdHlwZSIpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCiAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
Nyw3ICsyNDcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgICAg
IGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZh
bDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWw6CkBAIC0zMjYsNyArMzI1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAg
ICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAg
IGNhc2UgR2V0QnV0dGVyZmx5OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAg
Y2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5QnVm
ZmVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTUsOSArNjE1LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICBjb21waWxlR2V0QnV0
dGVyZmx5KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlS
ZWFkT25seToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpOwotICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKICAg
ICAgICAgICAgIGNvbXBpbGVDb25zdGFudFN0b3JhZ2VQb2ludGVyKCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTIzOTQsMTQgKzIzOTEsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29t
cGlsZUdldEJ1dHRlcmZseSgpCiAgICAgewotICAgICAgICBzZXRTdG9yYWdlKGxvYWRCdXR0ZXJm
bHlXaXRoQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIHNldFN0
b3JhZ2UobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZs
eVJlYWRPbmx5KCkKLSAgICB7Ci0gICAgICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVJlYWRP
bmx5KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBj
b21waWxlQ29uc3RhbnRTdG9yYWdlUG9pbnRlcigpCiAgICAgewogICAgICAgICBzZXRTdG9yYWdl
KG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwpAQCAtMjQzNCw3
ICsyNDI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgc2V0U3RvcmFnZShsb2FkVmVjdG9yV2l0aEJhcnJpZXIoY2VsbCkpOwor
ICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU0FycmF5QnVm
ZmVyVmlld192ZWN0b3IpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tBcnJh
eSgpCkBAIC0yNDcxLDggKzI0NjMsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHdhc3RlZnVsQ2FzZSwgY29udGludWF0aW9uKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9y
UHRyID0gbG9hZFZlY3RvclJlYWRPbmx5KGJhc2VQdHIpOwotICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5UHRyID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2VQdHIpOworICAgICAgICBMVmFsdWUg
dmVjdG9yUHRyID0gbV9vdXQubG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJW
aWV3X3ZlY3Rvcik7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBtX291dC5sb2FkUHRy
KGJhc2VQdHIsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgTFZhbHVlIGFy
cmF5QnVmZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIsIG1faGVhcHMuQnV0dGVy
Zmx5X2FycmF5QnVmZmVyKTsKICAgICAgICAgTFZhbHVlIGRhdGFQdHIgPSBtX291dC5sb2FkUHRy
KGFycmF5QnVmZmVyUHRyLCBtX2hlYXBzLkFycmF5QnVmZmVyX2RhdGEpOwogCkBAIC00MzQyLDcg
KzQzMzQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1
ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KG1ldGhv
ZC5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IGxvYWRCdXR0
ZXJmbHlSZWFkT25seShwcm9wZXJ0eUJhc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eUJhc2UgPSBtX291dC5sb2FkUHRyKHByb3BlcnR5QmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0
ZXJmbHkpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eSgKICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5v
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NDEwLDcgKzQ0MDIsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNl
dCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbG9hZEJ1dHRlcmZseVdpdGhC
YXJyaWVyKGJhc2UpOworICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0
cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgK
ICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNjE4Miw3ICs2MTc0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91
dE9mTGluZUxvYWQsIHNsb3dDYXNlKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb2FkQnV0
dGVyZmx5UmVhZE9ubHkoYmFzZSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9h
ZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIExWYWx1ZSBy
ZWFsSW5kZXggPSBtX291dC5zaWduRXh0MzJUbzY0KAogICAgICAgICAgICAgbV9vdXQubmVnKG1f
b3V0LnN1YihpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSkpKTsKICAgICAgICAgaW50MzJf
dCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1
dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
QEAgLTY5NTUsMTQgKzY5NDcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CiAgICAgICAgIAogICAgICAgICBpZiAocHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgPT0gbmV4dFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0KTsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkp
OwogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdDsKICAgICAgICAgaWYgKCFwcmV2aW91
c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
Ci0gICAgICAgICAgICAgICAgb2JqZWN0LCBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0
KSwKKyAgICAgICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSksCiAgICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUs
IG5leHRTdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzEyNSwxMTAgKzcxMTcs
NiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKICAgICB9CiAKLSAgICBM
VmFsdWUgbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCi0gICAgewotICAg
ICAgICByZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQ
dHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksIG9wZXJhdGlvbkdldEJ1dHRl
cmZseSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZh
bHVlIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291
dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAg
ICAgICByZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBmYXN0UmVzdWx0VmFsdWUsCi0g
ICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsK
LSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goaXNGYXN0VHlwZWRBcnJheShvYmplY3QpLCBy
YXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotCi0gICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGlu
dWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5
U2xvd1BhdGgoCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9u
PiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3RvciwgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0sIG9iamVjdCk7Ci0g
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihz
bG93UmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIExWYWx1
ZSBjb3B5QmFycmllcihMVmFsdWUgb2JqZWN0LCBMVmFsdWUgcG9pbnRlciwgUF9KSVRPcGVyYXRp
b25fRUMgc2xvd1BhdGhGdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb3B5QmFycmll
cigKLSAgICAgICAgICAgIHBvaW50ZXIsCi0gICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhGdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0
R1BSKCkpOwotICAgICAgICAgICAgICAgICAgICB9LCBvYmplY3QpOwotICAgICAgICAgICAgfSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBMVmFsdWUgY29w
eUJhcnJpZXIoTFZhbHVlIHBvaW50ZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewot
ICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihwb2ludGVyKTsKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKHBvaW50ZXIpLCB1c3VhbGx5KGNvbnRpbnVhdGlv
biksIHJhcmVseShzbG93UGF0aCkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihmdW5jdG9yKCkpOwotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRy
LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgaXNJblRvU3Bh
Y2UoTFZhbHVlIHBvaW50ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQudGVzdElzWmVy
b1B0cihwb2ludGVyLCBtX291dC5jb25zdEludFB0cihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0
cykpOwotICAgIH0KLQotICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkoTFZhbHVlIG9i
amVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZW1vdmVTcGFjZUJpdHMobV9vdXQubG9hZFB0
cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGxvYWRWZWN0b3JSZWFkT25seShMVmFsdWUgb2JqZWN0KQotICAgIHsKLSAgICAgICAgTFZh
bHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTQXJy
YXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgcG9zc2libHlGcm9t
U3BhY2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1
bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKLQotICAgICAgICBtX291dC5icmFu
Y2goaXNJblRvU3BhY2UoZmFzdFJlc3VsdFZhbHVlKSwgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkocG9zc2libHlGcm9tU3BhY2UpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKHBvc3NpYmx5RnJvbVNwYWNlLCBjb250aW51YXRpb24pOwotCi0g
ICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBtX291dC5zZWxlY3QoCi0gICAgICAgICAg
ICBpc0Zhc3RUeXBlZEFycmF5KG9iamVjdCksIHJlbW92ZVNwYWNlQml0cyhmYXN0UmVzdWx0VmFs
dWUpLCBmYXN0UmVzdWx0VmFsdWUpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgcmVtb3ZlU3BhY2VC
aXRzKExWYWx1ZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmJpdEFuZCgK
LSAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRw
dHJfdD4oQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKSk7Ci0gICAgfQotCiAgICAgTFZhbHVl
IGlzRmFzdFR5cGVkQXJyYXkoTFZhbHVlIG9iamVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiBt
X291dC5lcXVhbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIu
aAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw4OCArMzAsMjAgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWVudW0gY2xhc3MgQ29weVN0YXRlIHsKLSAgICAvLyBUaGUgYmFja2luZyBzdG9y
ZSBpcyBub3QgcGxhbm5lZCB0byBnZXQgY29waWVkIGluIHRoaXMgZXBvY2guIElmIHlvdSBrZWVw
IGEgcG9pbnRlciB0byB0aGUgYmFja2luZwotICAgIC8vIHN0b3JlIG9uIHRoZSBzdGFjaywgaXQg
d2lsbCBub3QgZ2V0IGNvcGllZC4gSWYgeW91IGRvbid0IGtlZXAgaXQgb24gdGhlIHN0YWNrLCBp
dCBtYXkgZ2V0IGNvcGllZAotICAgIC8vIHN0YXJ0aW5nIGF0IHRoZSBuZXh0IGhhbmRzaGFrZSAo
dGhhdCBpcywgaXQgbWF5IHRyYW5zaXRpb24gZnJvbSBUb1NwYWNlIHRvIENvcHlQbGFubmVkLCBi
dXQKLSAgICAvLyBDb3B5UGxhbm5lZCBtZWFucyBUb1NwYWNlIHByaW9yIHRvIHRoZSBoYW5kc2hh
a2UgdGhhdCBzdGFydHMgdGhlIGNvcHkgcGhhc2UpLgotICAgIFRvU3BhY2UsCi0KLSAgICAvLyBU
aGUgbWFya2luZyBwaGFzZSBoYXMgc2VsZWN0ZWQgdGhpcyBiYWNraW5nIHN0b3JlIHRvIGJlIGNv
cGllZC4gSWYgd2UgYXJlIG5vdCB5ZXQgaW4gdGhlIGNvcHlpbmcKLSAgICAvLyBwaGFzZSwgdGhp
cyBiYWNraW5nIHN0b3JlIGlzIHN0aWxsIGluIHRvLXNwYWNlLiBBbGwgdGhhdCBpcyBuZWVkZWQg
aW4gc3VjaCBhIGNhc2UgaXMgdG8gbWFzayBvZmYgdGhlCi0gICAgLy8gbG93IGJpdHMuIElmIHdl
IGFyZSBpbiB0aGUgY29weWluZyBwaGFzZSwgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3QgcG9p
bnRzIHRvIGZyb20tc3BhY2UuIFRoZQotICAgIC8vIGJhcnJpZXIgc2hvdWxkIGZpcnN0IGNvcHkg
dGhlIG9iamVjdCAtIG9yIHdhaXQgZm9yIGNvcHlpbmcgdG8gZmluaXNoIC0gYmVmb3JlIHVzaW5n
IHRoZSBvYmplY3QuCi0gICAgQ29weVBsYW5uZWQsCi0KLSAgICAvLyBUaGUgb2JqZWN0IGlzIGJl
aW5nIGNvcGllZCByaWdodCBub3cuIEFueW9uZSB3YW50aW5nIHRvIHVzZSB0aGUgb2JqZWN0IG11
c3Qgd2FpdCBmb3IgdGhlIG9iamVjdCB0bwotICAgIC8vIGZpbmlzaCBiZWluZyBjb3BpZWQuIE5v
dGlmaWNhdGlvbnMgYWJvdXQgY29weWluZyB1c2UgdGhlIFBhcmtpbmdMb3QgY29tYmluZWQgd2l0
aCB0aGVzZSBiaXRzLiBJZiB0aGUKLSAgICAvLyBzdGF0ZSBpcyBDb3B5aW5nQW5kV2FpdGluZywg
dGhlbiB3aGVuIHRoZSBjb3B5aW5nIGZpbmlzaGVzLCB3aGF0ZXZlciB0aHJlYWQgd2FzIGRvaW5n
IGl0IHdpbGwKLSAgICAvLyB1bnBhcmtBbGwoKSBvbiB0aGUgYWRkcmVzcyBvZiB0aGUgQ29weUJh
cnJpZXJCYXNlLiBTbywgdG8gd2FpdCBmb3IgY29weWluZyB0byBmaW5pc2gsIENBUyB0aGlzIHRv
Ci0gICAgLy8gQ29weWluZ0FuZFdhaXRpbmcgYW5kIHRoZW4gcGFya0NvbmRpdGlvbmFsbHkgb24g
dGhlIGJhcnJpZXIgYWRkcmVzcy4KLSAgICBDb3B5aW5nLAotCi0gICAgLy8gVGhlIG9iamVjdCBp
cyBiZWluZyBjb3BpZWQgcmlnaHQgbm93LCBhbmQgdGhlcmUgYXJlIG9uZSBvciBtb3JlIHRocmVh
ZHMgcGFya2VkLiBUaG9zZSB0aHJlYWRzIHdhbnQKLSAgICAvLyB0byBiZSB1bnBhcmtlZCB3aGVu
IGNvcHlpbmcgaXMgZG9uZS4gU28sIHdoaWNoZXZlciB0aHJlYWQgZG9lcyB0aGUgY29weWluZyBu
ZWVkcyB0byBjYWxsIHVucGFya0FsbCgpCi0gICAgLy8gb24gdGhlIGJhcnJpZXIgYWRkcmVzcyBh
ZnRlciBjb3B5aW5nIGlzIGRvbmUuCi0gICAgQ29weWluZ0FuZFdhaXRpbmcKLX07Ci0KIGNsYXNz
IENvcHlCYXJyaWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNw
YWNlQml0cyA9IDM7Ci0KICAgICBDb3B5QmFycmllckJhc2UoKQogICAgICAgICA6IG1fdmFsdWUo
bnVsbHB0cikKICAgICB7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIW1fdmFsdWU7IH0KLSAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCi0gICAgdm9pZCogZ2V0V2l0aG91dEJhcnJpZXIo
KSBjb25zdAorICAgIHZvaWQqIGdldCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV92
YWx1ZTsKICAgICB9CiAKLSAgICAvLyBVc2UgdGhpcyB2ZXJzaW9uIG9mIGdldCgpIGlmIHlvdSBv
bmx5IHdhbnQgdG8gZXhlY3V0ZSB0aGUgYmFycmllciBzbG93IHBhdGggaWYgc29tZSBjb25kaXRp
b24KLSAgICAvLyBob2xkcywgYW5kIHlvdSBvbmx5IHdhbnQgdG8gZXZhbHVhdGUgdGhhdCBjb25k
aXRpb24gYWZ0ZXIgZmlyc3QgY2hlY2tpbmcgdGhlIGJhcnJpZXIncwotICAgIC8vIGNvbmRpdGlv
bi4gVXN1YWxseSwgeW91IGp1c3Qgd2FudCB0byB1c2UgZ2V0KCkuCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkKiBnZXRQcmVkaWNhdGVkKGNvbnN0IEpTQ2VsbCogb3du
ZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICB2b2lkKiBy
ZXN1bHQgPSBtX3ZhbHVlOwotICAgICAgICBpZiAoVU5MSUtFTFkoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4ocmVzdWx0KSAmIHNwYWNlQml0cykpIHsKLSAgICAgICAgICAgIGlmIChmdW5jdG9yKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEhlYXA6OmNvcHlCYXJyaWVyKG93bmVyLCBtX3ZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIFdo
ZW4gd2UgYXJlIGluIHRoZSBjb25jdXJyZW50IGNvcHlpbmcgcGhhc2UsIHRoaXMgbWV0aG9kIG1h
eSBsb2NrIHRoZSBiYXJyaWVyIG9iamVjdCAoaS5lLiB0aGUgZmllbGQKLSAgICAvLyBwb2ludGlu
ZyB0byBjb3BpZWQgc3BhY2UpIGFuZCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIG93bmluZyBvYmpl
Y3QncyBjb3B5QmFja2luZ1N0b3JlKCkgbWV0aG9kLgotICAgIHZvaWQqIGdldChjb25zdCBKU0Nl
bGwqIG93bmVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFByZWRpY2F0ZWQob3du
ZXIsIFtdICgpIC0+IGJvb2wgeyByZXR1cm4gdHJ1ZTsgfSk7Ci0gICAgfQotCi0gICAgQ29weVN0
YXRlIGNvcHlTdGF0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q29weVN0YXRlPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3ZhbHVlKSAmIHNwYWNlQml0cyk7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBvbmx5IHdvcmtzIHdoZW4geW91IGtub3cgdGhhdCB0aGVy
ZSBpcyBub2JvZHkgZWxzZSBjb25jdXJyZW50bHkgbWVzc2luZyB3aXRoIHRoaXMgQ29weUJhcnJp
ZXIuCi0gICAgLy8gVGhhdCdzIGhhcmQgdG8gZ3VhcmFudGVlLCB0aG91Z2ggdGhlcmUgYXJlIGEg
ZmV3IHVudXN1YWwgcGxhY2VzIHdoZXJlIHRoaXMgZW5kcyB1cCBiZWluZyBzYWZlLgotICAgIC8v
IFVzdWFsbHkgeW91IHdhbnQgdG8gdXNlIENvcHlCYXJyaWVyOjp3ZWFrQ0FTKCkuCi0gICAgdm9p
ZCBzZXRDb3B5U3RhdGUoQ29weVN0YXRlIGNvcHlTdGF0ZSkKLSAgICB7Ci0gICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG1fdmFsdWUpOwotICAgICAgICB2YWx1ZSAmPSB+c3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihzcGFjZUJpdHMpOwotICAgICAgICB2YWx1ZSB8PSBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KGNvcHlTdGF0ZSk7Ci0gICAgICAgIG1fdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZh
bHVlKTsKLSAgICB9Ci0KICAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQog
CiBwcm90ZWN0ZWQ6CkBAIC0xMzEsMTUgKzYzLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICB0aGlz
LT5tX3ZhbHVlID0gdmFsdWU7CiAgICAgfQogCi0gICAgYm9vbCB3ZWFrQ0FTV2l0aG91dEJhcnJp
ZXIoCi0gICAgICAgIHZvaWQqIG9sZFBvaW50ZXIsIENvcHlTdGF0ZSBvbGRDb3B5U3RhdGUsIHZv
aWQqIG5ld1BvaW50ZXIsIENvcHlTdGF0ZSBuZXdDb3B5U3RhdGUpCi0gICAgewotICAgICAgICB1
aW50cHRyX3Qgb2xkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvbGRQb2ludGVyKSB8
IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4ob2xkQ29weVN0YXRlKTsKLSAgICAgICAgdWludHB0cl90
IG5ld1ZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3UG9pbnRlcikgfCBzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KG5ld0NvcHlTdGF0ZSk7Ci0gICAgICAgIHJldHVybiBXVEY6OndlYWtD
b21wYXJlQW5kU3dhcCgKLSAgICAgICAgICAgICZtX3ZhbHVlLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KG9sZFZhbHVlKSwgYml0d2lzZV9jYXN0PHZvaWQqPihuZXdWYWx1ZSkpOwotICAgIH0KLQogcHJp
dmF0ZToKICAgICBtdXRhYmxlIHZvaWQqIG1fdmFsdWU7CiB9OwpAQCAtMTYxLDIyICs4NCwxMSBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFQqIGdldFdpdGhvdXRCYXJyaWVyKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KENvcHlCYXJyaWVyQmFz
ZTo6Z2V0V2l0aG91dEJhcnJpZXIoKSk7Ci0gICAgfQotICAgIAotICAgIFQqIGdldChjb25zdCBK
U0NlbGwqIG93bmVyKSBjb25zdAorICAgIFQqIGdldCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6OmdldChvd25lcikpOworICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6OmdldCgpKTsKICAg
ICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIFQqIGdldFByZWRpY2F0
ZWQoY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KENvcHlCYXJyaWVyQmFzZTo6Z2V0
UHJlZGljYXRlZChvd25lciwgZnVuY3RvcikpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHNldChW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKICAgICAgICAgQ29w
eUJhcnJpZXJCYXNlOjpzZXQodm0sIG93bmVyLCB2YWx1ZSk7CkBAIC0xODYsMTEgKzk4LDYgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgQ29weUJhcnJpZXJCYXNlOjpzZXRXaXRob3V0QmFycmll
cih2YWx1ZSk7CiAgICAgfQotCi0gICAgYm9vbCB3ZWFrQ0FTV2l0aG91dEJhcnJpZXIoVCogb2xk
UG9pbnRlciwgQ29weVN0YXRlIG9sZENvcHlTdGF0ZSwgVCogbmV3UG9pbnRlciwgQ29weVN0YXRl
IG5ld0NvcHlTdGF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb3B5QmFycmllckJhc2U6Ondl
YWtDQVNXaXRob3V0QmFycmllcihvbGRQb2ludGVyLCBvbGRDb3B5U3RhdGUsIG5ld1BvaW50ZXIs
IG5ld0NvcHlTdGF0ZSk7Ci0gICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDExLCAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5
LCAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0xMDgzLDE2ICsxMDgzLDYgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kVG9NYXJrU3RhY2soY29uc3RfY2Fz
dDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKLXZvaWQqIEhlYXA6OmNvcHlCYXJyaWVyKGNvbnN0IEpT
Q2VsbCosIHZvaWQqJiBwb2ludGVyKQotewotICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdywgZXhj
ZXB0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQgb2ZmLiBUaGlzIGhl
bHBzIHRvCi0gICAgLy8gc2ltdWxhdGUgZW5vdWdoIG9mIHRoaXMgYmFycmllciB0aGF0IGF0IGxl
YXN0IHdlIGNhbiB0ZXN0IHRoZSBsb3cgYml0cyBhc3N1bXB0aW9ucy4KLSAgICBwb2ludGVyID0g
Yml0d2lzZV9jYXN0PHZvaWQqPigKLSAgICAgICAgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9p
bnRlcikgJiB+c3RhdGljX2Nhc3Q8dWludHB0cl90PihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0
cykpOwotICAgIAotICAgIHJldHVybiBwb2ludGVyOwotfQotCiB2b2lkIEhlYXA6OmNvbGxlY3RB
bmRTd2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQogewogICAgIGlmICghbV9pc1Nh
ZmVUb0NvbGxlY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAx
OTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDksIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0xMTIsOCArMTEyLDYgQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVC
YXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNv
bnN0IEpTQ2VsbCosIEpTQ2VsbCopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQqIGNvcHlCYXJyaWVyKGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqJiBjb3BpZWRTcGFjZVBv
aW50ZXIpOwotCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7
IHJldHVybiBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIoSlNDZWxsKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDE3
ICsxNDgsNiBAQCBBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjpiCiAgICAg
ICAgIFRydXN0ZWRJbW0zMihGYXN0VHlwZWRBcnJheSkpOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6
Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjpsb2FkVHlwZWRBcnJheVZlY3RvcihHUFJSZWcgYmFzZUdQ
UiwgR1BSUmVnIHJlc3VsdEdQUikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChiYXNlR1BSICE9IHJl
c3VsdEdQUik7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgcmVzdWx0R1BSKTsKLSAgICBKdW1wIG9rID0gYnJh
bmNoSWZUb1NwYWNlKHJlc3VsdEdQUik7Ci0gICAgSnVtcCByZXN1bHQgPSBicmFuY2hJZkZhc3RU
eXBlZEFycmF5KGJhc2VHUFIpOwotICAgIG9rLmxpbmsodGhpcyk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTihGUFJSZWcgZnByKQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IGJyYW5jaERvdWJsZShEb3VibGVFcXVh
bCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MjIsMjggKzgyMiw5IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoSWZUb1NwYWNlKEdQUlJlZyBz
dG9yYWdlR1BSKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihaZXJvLCBzdG9y
YWdlR1BSLCBUcnVzdGVkSW1tMzIoQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKTsKLSAgICB9
Ci0KLSAgICBKdW1wIGJyYW5jaElmTm90VG9TcGFjZShHUFJSZWcgc3RvcmFnZUdQUikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoTm9uWmVybywgc3RvcmFnZUdQUiwgVHJ1c3Rl
ZEltbTMyKENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZW1vdmVTcGFjZUJpdHMoR1BSUmVnIHN0b3JhZ2VHUFIpCi0gICAgewotICAgICAgICBhbmRQdHIo
VHJ1c3RlZEltbVB0cih+c3RhdGljX2Nhc3Q8dWludHB0cl90PihDb3B5QmFycmllckJhc2U6OnNw
YWNlQml0cykpLCBzdG9yYWdlR1BSKTsKLSAgICB9Ci0KICAgICBKdW1wIGJyYW5jaElmRmFzdFR5
cGVkQXJyYXkoR1BSUmVnIGJhc2VHUFIpOwogICAgIEp1bXAgYnJhbmNoSWZOb3RGYXN0VHlwZWRB
cnJheShHUFJSZWcgYmFzZUdQUik7CiAKLSAgICAvLyBSZXR1cm5zIGEganVtcCB0byBzbG93IHBh
dGggZm9yIHdoZW4gd2UgbmVlZCB0byBleGVjdXRlIHRoZSBiYXJyaWVyLiBOb3RlIHRoYXQgYmFz
ZUdQUiBhbmQKLSAgICAvLyByZXN1bHRHUFIgbXVzdCBiZSBkaWZmZXJlbnQuCi0gICAgSnVtcCBs
b2FkVHlwZWRBcnJheVZlY3RvcihHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUik7Ci0g
ICAgCiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvckJ5dGVPZmZzZXQocHRyZGlmZl90IGJ5
dGVPZmZzZXQpCiAgICAgewogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgYnl0ZU9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OTYsNyArMTE5Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHIK
ICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKHRoaXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VG9TcGFjZShy
ZWdUMCkpOwogICAgIHN1YjMyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBuZWczMihyZWdU
Mik7CiAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQz
Ml90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKQEAgLTEyMTMsNyArMTIxMiw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZGlyZWN0X3BuYW1lKEkKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTk4MTUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwMyw3ICsxMjAzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9w
bmFtZShJbnN0cgogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZM
aW5lQWNjZXNzLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUb1NwYWNlKHJlZ1QwKSk7CiAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwogICAg
IG5lZzMyKHJlZ1QxKTsKICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwpAQCAt
MTIyMCw3ICsxMjE5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUo
SQogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3Bu
YW1lKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjUsNyArMTY1LDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVM
b2FkKEluc3RydQogICAgIAogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVh
bCwgcmVnVDIsIFRydXN0ZWRJbW0zMihEb3VibGVTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hEb3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdU
MCkpOwpAQCAtMTc5LDcgKzE3OCw2IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91
c0xvYWQoSW4KICAgICAKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hUZXN0NjQoWmVybywgcmVnVDApKTsKQEAgLTE5NSw3ICsxOTMsNiBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQoCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aDMyKEFib3ZlLCByZWdUMywgVHJ1c3RlZEltbTMyKFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAt
IEFycmF5U3RvcmFnZVNoYXBlKSk7CiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90VG9TcGFjZShyZWdUMikpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOwpAQCAtMjU0
LDcgKzI1MSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAg
ICBub3RTdHJpbmcubGluayh0aGlzKTsKICAgICBub25DZWxsLmxpbmsodGhpcyk7CiAgICAgCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyByZWFkIGJhcnJpZXIKICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGVtcHR5IHZhbHVlCiAgICAgCkBAIC0zMjcsNyArMzIzLDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRHZW5lcmljQ29udGlndW91cwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihO
b3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7CiAgICAgCiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIpKTsKICAg
ICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICBMYWJl
bCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7CkBAIC0zODMsNyArMzc4LDYgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeQogICAgIAogICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFw
ZSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJl
Z1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwog
CiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpKTsKQEAgLTQ1NCw3ICs0NDgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVj
awogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKICAgICAK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcwogICAgIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwpAQCAtNzg2LDcgKzc3OSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWMKICAgICAgICAgICAgICAgICBpc091dE9mTGlu
ZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKICAgICAgICAgICAg
IG5lZzMyKG9mZnNldCk7CiAgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9m
ZnNldCk7CiAgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgcmVzdWx0KTsKQEAgLTg2NiwxMCArODU4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKElucwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFkIHN0cnVjdHVyZQot
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgotICAgIH0KIAogICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykgLy8gVmFyIGluamVjdGlvbnMgY2hlY2suCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
QEAgLTg3OCw3ICs4NjgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
SW5zCiAgICAgICAgIC8vIEdsb2JhbFByb3BlcnR5L0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcwogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2sKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyByZWFkIGJhcnJp
ZXIKICAgICAgICAgLy8gR2xvYmFsTGV4aWNhbFZhcgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIFREWiBjaGVjay4KICAgICAgICAgLy8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MuCkBAIC05MzIsNyArOTIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMCkpOwogICAgICAgICAgICAgbG9hZFB0
cihvcGVyYW5kU2xvdCwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKICAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
QEAgLTEwMjYsMTcgKzEwMTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShJbnN0cgogICAgICAgICAgfHwgcmVzb2x2ZVR5cGUgPT0gTG9jYWxDbG9zdXJlVmFyKQogICAg
ICAgICAmJiBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9
IElzSW52YWxpZGF0ZWQpCiAgICAgICAgIGxpbmtDb3VudCsrOwotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVy
dHkgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQogICAgICAgICBsaW5rQ291bnQrKzsgLy8gYmFkIHN0cnVjdHVyZQotICAgICAgICBsaW5rQ291
bnQrKzsgLy8gcmVhZCBiYXJyaWVyCi0gICAgfQogICAgIGlmIChnZXRQdXRJbmZvLmluaXRpYWxp
emF0aW9uTW9kZSgpICE9IEluaXRpYWxpemF0aW9uICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSkgLy8gVERaIGNoZWNrLgogICAgICAgICBsaW5rQ291bnQrKzsKICAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgLy8gR2xvYmFs
UHJvcGVydHkvR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uc0NoZWNrCiAgICAgICAgIGxp
bmtDb3VudCsrOyAvLyBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjawogICAgICAgICBsaW5rQ291
bnQrKzsgLy8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sKLSAgICAgICAgbGlua0NvdW50Kys7
IC8vIHJlYWQgYmFycmllcgogCiAgICAgICAgIC8vIEdsb2JhbExleGljYWxWYXIKICAgICAgICAg
Ym9vbCBuZWVkc1REWkNoZWNrID0gZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSAhPSBJ
bml0aWFsaXphdGlvbjsKQEAgLTE0NTQsNyArMTQzOSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheUdldEIKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3Ro
KCkpKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBz
Y3JhdGNoKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7CiAgICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgewogICAgIGNhc2UgMToKQEAgLTE1MjUsNyArMTUxMCw3IEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlw
ZWRBcnJheVR5cGUodHlwZSkpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTGVuZ3RoKCkpKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3Rv
cihiYXNlLCBzY3JhdGNoKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7CiAgICAgCiAgICAgc3dpdGNoIChl
bGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKQEAgLTE1OTIsNyArMTU3Nyw3IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBXZSB3
b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0
aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJl
cmVkLgotICAgIHNsb3dDYXNlcy5hcHBlbmQobG9hZFR5cGVkQXJyYXlWZWN0b3IoYmFzZSwgbGF0
ZVNjcmF0Y2gpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCiAgICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgewogICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CkBAIC0x
Njc3LDcgKzE2NjIsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1
CiAgICAgCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBn
ZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUg
YmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBzbG93Q2FzZXMuYXBwZW5kKGxvYWRUeXBlZEFy
cmF5VmVjdG9yKGJhc2UsIGxhdGVTY3JhdGNoKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAg
IAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTExNzYsMTAgKzEx
NzYsOSBAQCBfbGxpbnRfb3BfaXNfb2JqZWN0OgogICAgIGRpc3BhdGNoKDMpCiAKIAotbWFjcm8g
bG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RB
bmRTdG9yYWdlLCB2YWx1ZSwgc2xvdykKK21hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZz
ZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmls
dCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCiAg
ICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlCi0gICAgY29weUJhcnJpZXIob2JqZWN0QW5kU3RvcmFnZSwgc2xvdykKICAgICBu
ZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFzSW50LCBw
cm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpAQCAtMTE5MCwxMCArMTE4OSw5IEBA
IG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGUKIGVuZAogCiAKLW1hY3Jv
IHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVj
dEFuZFN0b3JhZ2UsIHZhbHVlLCBzbG93KQorbWFjcm8gc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVP
ZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAg
YmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5l
CiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmpl
Y3RBbmRTdG9yYWdlCi0gICAgY29weUJhcnJpZXIob2JqZWN0QW5kU3RvcmFnZSwgc2xvdykKICAg
ICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFzSW50
LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpAQCAtMTIxMiw3ICsxMjEwLDcg
QEAgX2xsaW50X29wX2dldF9ieV9pZDoKICAgICBiaW5lcSB0MiwgdDEsIC5vcEdldEJ5SWRTbG93
CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDUsIHQxKQogICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigxLCB0MikKLSAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDAs
IC5vcEdldEJ5SWRTbG93KQorICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQz
LCB0MCkKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQogICAgIHZhbHVlUHJvZmlsZSh0MCwg
OCwgdDEpCiAgICAgZGlzcGF0Y2goOSkKQEAgLTEyMzMsNyArMTIzMSw2IEBAIF9sbGludF9vcF9n
ZXRfYXJyYXlfbGVuZ3RoOgogICAgIGJ0aXogdDIsIEluZGV4aW5nU2hhcGVNYXNrLCAub3BHZXRB
cnJheUxlbmd0aFNsb3cKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCiAgICAgbG9h
ZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKLSAgICBjb3B5QmFycmllcih0MCwgLm9w
R2V0QXJyYXlMZW5ndGhTbG93KQogICAgIGxvYWRpIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJ
bmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIHQwCiAgICAgYmlsdCB0
MCwgMCwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCkBA
IC0xMzc3LDcgKzEzNzQsNyBAQCBfbGxpbnRfb3BfcHV0X2J5X2lkOgogICAgIGxvYWRpc0Zyb21J
bnN0cnVjdGlvbigzLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCi0gICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFi
bGVPZmZzZXQodDEsIHQwLCB0MiwgLm9wUHV0QnlJZFNsb3cpCisgICAgc3RvcmVQcm9wZXJ0eUF0
VmFyaWFibGVPZmZzZXQodDEsIHQwLCB0MikKICAgICBkaXNwYXRjaCg5KQogCiAub3BQdXRCeUlk
U2xvdzoKQEAgLTEzOTYsNyArMTM5Myw2IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBz
eGkycSB0MSwgdDEKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MwotICAg
IGNvcHlCYXJyaWVyKHQzLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgYW5kaSBJbmRleGluZ1NoYXBl
TWFzaywgdDIKICAgICBiaWVxIHQyLCBJbnQzMlNoYXBlLCAub3BHZXRCeVZhbElzQ29udGlndW91
cwogICAgIGJpbmVxIHQyLCBDb250aWd1b3VzU2hhcGUsIC5vcEdldEJ5VmFsTm90Q29udGlndW91
cwpAQCAtMTQ2Nyw3ICsxNDYzLDYgQEAgbWFjcm8gcHV0QnlWYWwoc2xvd1BhdGgpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQogICAgIHN4
aTJxIHQzLCB0MwogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAg
Y29weUJhcnJpZXIodDAsIC5vcFB1dEJ5VmFsU2xvdykKICAgICBhbmRpIEluZGV4aW5nU2hhcGVN
YXNrLCB0MgogICAgIGJpbmVxIHQyLCBJbnQzMlNoYXBlLCAub3BQdXRCeVZhbE5vdEludDMyCiAg
ICAgY29udGlndW91c1B1dEJ5VmFsKApAQCAtMTk4OCw5ICsxOTgzLDkgQEAgbWFjcm8gbG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5kLCBzbAogICAgIGJwbmVxIHQyLCB0MSwgc2xvd1BhdGgK
IGVuZAogCi1tYWNybyBnZXRQcm9wZXJ0eShzbG93KQorbWFjcm8gZ2V0UHJvcGVydHkoKQogICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxl
T2Zmc2V0KHQxLCB0MCwgdDIsIHNsb3cpCisgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dCh0MSwgdDAsIHQyKQogICAgIHZhbHVlUHJvZmlsZSh0MiwgNywgdDApCiAgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDEsIHQwKQogICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCkBAIC0yMDIx
LDcgKzIwMTYsNyBAQCBfbGxpbnRfb3BfZ2V0X2Zyb21fc2NvcGU6CiAjZ0dsb2JhbFByb3BlcnR5
OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLmdHbG9iYWxWYXIKICAgICBsb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKDIsIC5nRHluYW1pYykKLSAgICBnZXRQcm9wZXJ0eSguZ0R5bmFtaWMp
CisgICAgZ2V0UHJvcGVydHkoKQogICAgIGRpc3BhdGNoKDgpCiAKIC5nR2xvYmFsVmFyOgpAQCAt
MjA0Niw3ICsyMDQxLDcgQEAgX2xsaW50X29wX2dldF9mcm9tX3Njb3BlOgogLmdHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcywgLmdHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
CiAgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaygyLCAuZ0R5bmFtaWMpCi0gICAgZ2V0UHJvcGVy
dHkoLmdEeW5hbWljKQorICAgIGdldFByb3BlcnR5KCkKICAgICBkaXNwYXRjaCg4KQogCiAuZ0ds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CkBAIC0yMDc2LDExICsyMDcxLDExIEBAIF9s
bGludF9vcF9nZXRfZnJvbV9zY29wZToKICAgICBkaXNwYXRjaCg4KQogCiAKLW1hY3JvIHB1dFBy
b3BlcnR5KHNsb3cpCittYWNybyBwdXRQcm9wZXJ0eSgpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQogICAgIGxvYWRp
c0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dCh0MSwgdDAsIHQyLCBzbG93KQorICAgIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQx
LCB0MCwgdDIpCiBlbmQKIAogbWFjcm8gcHV0R2xvYmFsVmFyaWFibGUoKQpAQCAtMjEzOCw3ICsy
MTMzLDcgQEAgX2xsaW50X29wX3B1dF90b19zY29wZToKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJv
cGVydHksIC5wR2xvYmFsVmFyCiAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcygxLCAzKQogICAg
IGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMSwgLnBEeW5hbWljKQotICAgIHB1dFByb3BlcnR5KC5w
RHluYW1pYykKKyAgICBwdXRQcm9wZXJ0eSgpCiAgICAgZGlzcGF0Y2goNykKIAogLnBHbG9iYWxW
YXI6CkBAIC0yMTY1LDcgKzIxNjAsNyBAQCBfbGxpbnRfb3BfcHV0X3RvX3Njb3BlOgogICAgIGJp
bmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5wR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoMSwgMykK
ICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKDEsIC5wRHluYW1pYykKLSAgICBwdXRQcm9wZXJ0
eSgucER5bmFtaWMpCisgICAgcHV0UHJvcGVydHkoKQogICAgIGRpc3BhdGNoKDcpCiAKIC5wR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5ODE1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMjIxLDggKzIyMSw2IEBAIGNvbnN0IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlT2JqZWN0ID0gMHgzOAogY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90
aGVyID0gMHg0MAogY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQ4CiAKLWNvbnN0
IENvcHlCYXJyaWVyU3BhY2VCaXRzID0gMwotCiBjb25zdCBDYWxsT3BDb2RlU2l6ZSA9IDkKIAog
aWYgWDg2XzY0IG9yIEFSTTY0IG9yIENfTE9PUApAQCAtNjYxLDEwICs2NTksNiBAQCBtYWNybyBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoZGVzCiAgICAgZW5kCiBlbmQKIAotbWFjcm8g
Y29weUJhcnJpZXIodmFsdWUsIHNsb3cpCi0gICAgYnRwbnogdmFsdWUsIENvcHlCYXJyaWVyU3Bh
Y2VCaXRzLCBzbG93Ci1lbmQKLQogbWFjcm8gZnVuY3Rpb25Qcm9sb2d1ZSgpCiAgICAgaWYgWDg2
IG9yIFg4Nl9XSU4gb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KICAgICAgICAgcHVzaCBjZnIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBE
aXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIGlmICh0aGlzT2JqZWN0LT5t
X292ZXJyaWRlcykgewogICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcigKICAgICAgICAgICAgIHRo
aXNPYmplY3QsIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbiwKLSAgICAgICAgICAg
IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldFdpdGhvdXRCYXJyaWVyKCksIHRoaXNPYmplY3Qt
Pm92ZXJyaWRlc1NpemUoKSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5n
ZXQoKSwgdGhpc09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKTsKICAgICB9CiB9CiAKQEAgLTExNSw3
ICsxMTUsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weUJhY2tpbmdTdG9yZShKCiAgICAg
CiAgICAgUkVMRUFTRV9BU1NFUlQodG9rZW4gPT0gRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29w
eVRva2VuKTsKICAgICAKLSAgICB2b2lkKiBvbGRPdmVycmlkZXMgPSB0aGlzT2JqZWN0LT5tX292
ZXJyaWRlcy5nZXRXaXRob3V0QmFycmllcigpOworICAgIHZvaWQqIG9sZE92ZXJyaWRlcyA9IHRo
aXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOwogICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91
bGRDb3B5KG9sZE92ZXJyaWRlcykpIHsKICAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0gc3Rh
dGljX2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5vdmVy
cmlkZXNTaXplKCkpKTsKICAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRlcywgb2xkT3ZlcnJpZGVz
LCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBEaXJlY3RB
cmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZQogdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJy
aWRlQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBvdmVycmlkZVRoaW5n
c0lmTmVjZXNzYXJ5KHZtKTsKLSAgICBtX292ZXJyaWRlcy5nZXQodGhpcylbaW5kZXhdID0gdHJ1
ZTsKKyAgICBtX292ZXJyaWRlcy5nZXQoKVtpbmRleF0gPSB0cnVlOwogfQogCiB2b2lkIERpcmVj
dEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3Zl
cnJpZGVzLmdldCh0aGlzKVtpXSk7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFt
X292ZXJyaWRlcyB8fCAhbV9vdmVycmlkZXMuZ2V0KClbaV0pOwogICAgIH0KIAogICAgIGJvb2wg
Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHlJbkRGRyh1aW50MzJfdCBpKSBjb25zdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDE5
ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEy
LCAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtMzkx
LDcgKzM5MSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKIAog
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5n
dGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQoKTsKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJh
eUNsYXNzOgogICAgICAgICBpZiAoIW5ld0xlbmd0aCkKQEAgLTQ1Miw3ICs0NTIsNyBAQCBib29s
IEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAKIEpTVmFsdWUgSlNBcnJheTo6
cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFy
cmF5Q2xhc3M6CkBAIC01NDksNyArNTQ5LDcgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0
YXRlKiBleGVjKQogLy8gIC0gcHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0
b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KIHZvaWQgSlNBcnJh
eTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOiB7CkBAIC03MDEsOSArNzAxLDkgQEAgSlNBcnJh
eSogSlNBcnJheTo6ZmFzdFNsaWNlKEV4ZWNTdGF0ZSYgZQogCiAgICAgICAgIGF1dG8mIHJlc3Vs
dEJ1dHRlcmZseSA9ICpyZXN1bHRBcnJheS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChhcnJh
eVR5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRl
cmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNv
bnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBj
b3VudCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3Vi
bGUoKS5kYXRhKCksIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgp
ICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNp
emVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJm
bHkuY29udGlndW91cygpLmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKS5k
YXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CiAgICAgICAgIHJl
c3VsdEJ1dHRlcmZseS5zZXRQdWJsaWNMZW5ndGgoY291bnQpOwogCiAgICAgICAgIHJldHVybiBy
ZXN1bHRBcnJheTsKQEAgLTcyMCw4ICs3MjAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0FycmF5Ojpm
YXN0Q29uY2F0V2l0aChFCiAgICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIEFTU0VSVChuZXdB
cnJheVR5cGUgPT0gZmFzdENvbmNhdFR5cGUodm0sICp0aGlzLCBvdGhlckFycmF5KSk7CiAKLSAg
ICB1bnNpZ25lZCB0aGlzQXJyYXlTaXplID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNM
ZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBvdGhlckFycmF5U2l6ZSA9IG90aGVyQXJyYXkubV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB0aGlzQXJyYXlT
aXplID0gbV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIG90
aGVyQXJyYXlTaXplID0gb3RoZXJBcnJheS5tX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3Ro
KCk7CiAgICAgQVNTRVJUKHRoaXNBcnJheVNpemUgKyBvdGhlckFycmF5U2l6ZSA8IE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVgpOwogCiAgICAgU3RydWN0dXJlKiByZXN1bHRTdHJ1Y3R1cmUgPSBleGVj
LmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKG5ld0FycmF5VHlwZSk7CkBAIC03MzMsMTEgKzczMywxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAgYXV0byYgb3RoZXJCdXR0ZXJm
bHkgPSAqb3RoZXJBcnJheS5idXR0ZXJmbHkoKTsKICAgICBpZiAobmV3QXJyYXlUeXBlID09IEFy
cmF5V2l0aERvdWJsZSkgewogICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlc3VsdEJ1dHRlcmZseS5j
b250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRl
cmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVl
KSAqIHRoaXNBcnJheVNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5n
ZXQoKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogdGhpc0Fy
cmF5U2l6ZSk7CiAgICAgICAgIG1lbWNweShidWZmZXIgKyB0aGlzQXJyYXlTaXplLCBvdGhlckJ1
dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBvdGhl
ckFycmF5U2l6ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBidWZmZXIgPSByZXN1bHRC
dXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkg
KiB0aGlzQXJyYXlTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHkuZ2V0
KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUp
OwogICAgICAgICBtZW1jcHkoYnVmZmVyICsgdGhpc0FycmF5U2l6ZSwgb3RoZXJCdXR0ZXJmbHku
Y29udGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNpemUpOwog
ICAgIH0KIApAQCAtODEwLDcgKzgxMCw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRoZSBpbmRl
eCBiaWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUgY2hhbmdp
bmcKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5lZWRzIHRv
IHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAgICAgICAg
IC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnNoaWZ0KHN0cnVj
dHVyZSgpLCBjb3VudCk7CiAgICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKGJ1
dHRlcmZseSk7CiAgICAgICAgIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwog
ICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKQEAgLTg1NSw3ICs4NTUsNyBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA+IDApOwogCi0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtOTk0LDcgKzk5NCw3IEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKIAogYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3Rh
cnRJbmRleCwgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheUNsYXNzOgpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbgogICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT52bSgpKSk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwg
b2xkTGVuZ3RoICsgY291bnQpOwotICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogCiAgICAgICAg
IC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhp
bmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJv
dWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJh
eVN0b3JhZ2UgbW9kZS4KQEAgLTEwNDUsNyArMTA0NSw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFueUluZGV4aW4KICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uo
ZXhlYy0+dm0oKSkpOwogICAgICAgICAKICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCks
IG9sZExlbmd0aCArIGNvdW50KTsKLSAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpOworICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAg
CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBt
b3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAg
ICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVl
biBpbiBBcnJheVN0b3JhZ2UgbW9kZS4KQEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgSlNBcnJh
eTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CiAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsK
ICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMTU1LDcgKzExNTUsNyBAQCB2b2lkIEpTQXJyYXk6
OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgLy8gRklYTUU6IFdoYXQgcHJldmVudHMg
dGhpcyBmcm9tIGJlaW5nIGNhbGxlZCB3aXRoIGEgUnVudGltZUFycmF5PyBUaGUgbGVuZ3RoIGZ1
bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4KICAgICBBU1NFUlQobGVu
Z3RoID09IHRoaXMtPmxlbmd0aCgpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXlDbGFzczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2Vs
bCoKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBP
dmVyc2l6ZVR5cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID09IFdhc3RlZnVsVHlwZWRB
cnJheSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkp
Ci0gICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVy
KCkpOworICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjQsMTQgKzE2NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJl
dHVybiBoYXNBcnJheUJ1ZmZlcigpICYmICF2ZWN0b3IoKTsgfQogICAgIHZvaWQgbmV1dGVyKCk7
CiAgICAgCi0gICAgdm9pZCogdmVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3Rv
ci5nZXRQcmVkaWNhdGVkKAotICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgIFt0aGlzXSAo
KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbW9kZSgpID09IEZhc3RUeXBlZEFy
cmF5OwotICAgICAgICAgICAgfSk7Ci0gICAgfQorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJu
IG1fdmVjdG9yLmdldCgpOyB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpOwogICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyMiw3ICs0MjIsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+Ojp2CiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKICAgICBjYXNl
IEZhc3RUeXBlZEFycmF5OiB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX3ZlY3RvcikKLSAg
ICAgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JD
b3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVyKCksIHRoaXNP
YmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09i
amVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0
KCksIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtNDQ5LDcgKzQ0OSw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmMKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIAogICAgIGlmICh0b2tlbiA9
PSBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCi0gICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNo
b3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSkpIHsKKyAg
ICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5n
ZXQoKSkpIHsKICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKICAgICAgICAg
dm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+dmVjdG9yKCk7CiAgICAgICAgIHZvaWQqIG5l
d1ZlY3RvciA9IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LmdldFdpdGhvdXRCYXJyaWVyKCk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKICAgICBpZiAoYnV0dGVy
Zmx5KQogICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJm
bHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIApAQCAtMjMzLDcgKzIz
Myw3IEBAIHZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiAKICAgICBpZiAo
dG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXRXaXRob3V0
QmFycmllcigpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0
ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKGJ1dHRlcmZseSkKICAgICAgICAgdGhpc09iamVjdC0+Y29w
eUJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVTaXplKCkpOwogfQpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSlNPYmplY3Q6Omhl
YXBTbmFwc2hvdChKU0NlbGwqIGNlbGwKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kUHJvcGVy
dHlOYW1lRWRnZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBlbnRyeS5rZXkpOwogICAg
IH0KIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
Z2V0V2l0aG91dEJhcnJpZXIoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChidXR0ZXJmbHkpIHsKICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBkYXRhOwogICAgICAgICB1aW50MzJfdCBjb3VudCA9IDA7CkBA
IC0zODksNyArMzg5LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTU0OCw3ICs1NDgsNyBAQCBib29sIEpTT2JqZWN0
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0
aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
CiAgICAgICAgICAgICBicmVhazsKQEAgLTU3MCw3ICs1NzAsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRo
U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0
ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjUyLDcgKzY1Miw3IEBAIHZvaWQg
SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW8KICAgICAgICAgICAgIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBzdG9y
YWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdl
KCkpOworICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC02ODIsNyArNjgyLDcgQEAg
QnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogICAgIEFTU0VSVCghaW5k
ZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6
Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2bSwg
dGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxz
ZSwgMCwKICAgICAgICAgZWxlbWVudFNpemUgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0
b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKQEAgLTczNCw3ICs3MzQsNyBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBp
bmRleGluZ1R5cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJv
cGVydGllcyhvbGRUeXBlKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlz
KSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBm
YWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUs
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdC
dXR0ZXJmbHkpOwogCkBAIC03NTgsMzIgKzc1OCwzMiBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRVbmRlCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5
cGUoKSkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlSW50MzIpKTsKLSAgICByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzSW50MzIoKTsKKyAgICByZXR1cm4gbV9idXR0
ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCiBDb250aWd1b3VzRG91YmxlcyBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQo
aGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7IGktLTspCiAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
ID0gUE5hTjsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJl
dHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkK
IHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGln
dW91cygpOwogfQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRB
cnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKFZNJiB2bSwgdW5zaWduZWQgbmVlZGVk
TGVuZ3RoKQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZt
KTsKLSAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1
YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT5wdWJsaWNMZW5ndGgoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpOwogICAgIApAQCAtNzkyLDcgKzc5Miw3IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICAKICAgICBtZW1jcHko
CiAgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUs
Ci0gICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eVNpemUsCisgICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5U2l6ZSwKICAgICAgICAgcHJvcGVydHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSk7CiAgICAgCiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTgxMCw3ICs4MTAsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
OwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3Rv
cmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgLy8gTm8g
bmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAgIApAQCAtODI4LDcgKzgyOCw3IEBAIENvbnRpZ3Vv
dXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzIKIHsKICAgICBBU1NFUlQoaGFzSW50MzIo
aW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0t
OykgewogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5
LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUg
PSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CkBAIC04NDIsNyArODQyLDcgQEAgQ29u
dGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgIH0KICAgICAKICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCkt
PmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpj
b252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoVk0mIHZtKQpAQCAtODUwLDcgKzg1MCw3IEBAIENvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydEludDMKICAgICBBU1NFUlQoaGFzSW50MzIo
aW5kZXhpbmdUeXBlKCkpKTsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUNvbnRpZ3Vv
dXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7Cisg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC04NTgsOSArODU4LDkgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxl
bmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRl
ZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0g
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIEpT
VmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAo
dikgewpAQCAtODg0LDcgKzg4NCw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29u
dmVydERvdWIKIHsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKICAgICAgICAgZG91YmxlKiBj
dXJyZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRBc1ZhbHVlID0gYml0d2lzZV9jYXN0PFdyaXRlQmFy
cmllcjxVbmtub3duPio+KGN1cnJlbnQpOwpAQCAtODk4LDcgKzg5OCw3IEBAIENvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWIKICAgICB9CiAgICAgCiAgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgQWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91
cygpOwogfQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0
b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTkwNiw5
ICs5MDYsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhpbmdU
eXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0
ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFn
ZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMo
dm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KTsgaSsrKSB7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKQEAgLTkzMyw5ICs5MzMs
OSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlw
ZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhp
cyktPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVy
Zmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2Ug
PSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZt
LCB2ZWN0b3JMZW5ndGgpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
IGkrKykgewogICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKICAgICAgICAgaWYgKHYpIHsKQEAgLTEwMDIsOCArMTAwMiw4IEBAIHZvaWQgSlNPYmpl
Y3Q6OmNvbnZlcnRJbnQzMkZvclZhbHVlKFZNJiAKIAogdm9pZCBKU09iamVjdDo6c2V0SW5kZXhR
dWlja2x5VG9VbmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0
aCgpKTsKLSAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVu
Z3RoKCkpOworICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5n
dGgoKSk7CiAgICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgc2V0
SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogfQpAQCAtMTE3MSw3ICsxMTcxLDcgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogICAgICAgICByZXR1cm4g
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMo
dm0sIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgCiAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZt
LCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgcmV0dXJu
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KHZtLCBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKICAgICBk
ZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwpAQCAtMTcxNyw3
ICsxNzE3LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0
LT5tX2J1dHRlcmZseS5nZXQob2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0
b3JhZ2UoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7CkBAIC0xODkwLDcgKzE4OTAsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKU09iamVj
dDo6ZmlsbEdldHRlclByCiBib29sIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIGNvbnN0IFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9y
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBtYXAgPSBtX2J1dHRlcmZs
eS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBhdXRv
IG1hcCA9IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0
KCk7CiAKICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKQEAgLTE5NTAsNyArMTk1MCw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCiAgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJ
bmRleGVkQWNjZXNzb3JzKGV4ZWMtPnZtKCkpOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAu
Z2V0KCk7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHkuZ2V0KCkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVCht
YXApOwogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBu
YW1lIFAuCkBAIC0xOTgyLDcgKzE5ODIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRl
eGVkUHJvcGVydHkoCiAgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CiAKICAgICAg
ICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVm
YXVsdHMpOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICAgICAgaWYgKGluZGV4ID49IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgp
KQogICAgICAgICAgICAgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4
ICsgMSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjExMSw3ICsyMTExLDcgQEAgYm9vbCBK
U09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIEFTU0VSVCgoaW5kZXhpbmdU
eXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgPT0gaW5kZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJU
KCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKTsKICAgICAKICAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUsIHRoZSBpbmRl
eCBpcyBlaXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBncmVhdGVyIHRo
YW4KICAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KQEAgLTIxMzIsNyArMjEz
Miw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICB9CiAK
ICAgICBlbnN1cmVMZW5ndGgodm0sIGkgKyAxKTsKLSAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQodGhpcyk7CisgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAKICAgICBS
RUxFQVNFX0FTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7CkBAIC0yNDE1LDcgKzI0MTUsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBp
ZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAg
ICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhl
YywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgIH0KQEAgLTI0MjksNyArMjQyOSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBp
ZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAg
ICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhl
YywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFn
ZSh2bSkpOwogICAgICAgICB9CkBAIC0yNDQ4LDcgKzI0NDgsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAg
ICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAg
ICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0yNDU4LDcgKzI0NTgsNyBAQCBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAKICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQorICAg
ICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdl
KCkpOwpAQCAtMjU0NCw4ICsyNTQ0LDggQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVj
dDo6Z2V0TmV3VgogICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICAKICAgICBpZiAoaGFzSW5kZXhl
ZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHZlY3Rvckxlbmd0
aCA9IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0g
bV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IHZlY3Rvckxlbmd0aCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7CkBAIC0yNjUxLDcgKzI2NTEs
NyBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKIHZvaWQgSlNP
YmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICBBU1NFUlQobGVu
Z3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGlu
Z1R5cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGlu
Z1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CkBAIC0yNjgxLDExICsy
NjgxLDExIEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKICAgICBB
U1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhp
bmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgIEFTU0VSVCht
X2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpID4gbGVuZ3RoKTsKLSAgICBBU1NF
UlQoIW1fYnV0dGVyZmx5LmdldCh0aGlzKS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHko
c3RydWN0dXJlKCkpKTsKKyAgICBBU1NFUlQobV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0
aCgpID4gbGVuZ3RoKTsKKyAgICBBU1NFUlQoIW1fYnV0dGVyZmx5LmdldCgpLT5pbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOwogCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihsZW5ndGgpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMs
IG5ld0J1dHRlcmZseSk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3Ro
KTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwpAQCAtMjY5OCw3
ICsyNjk4LDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZwogICAg
IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1
cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBo
YXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgogCi0gICAgcmV0dXJu
IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKG1fYnV0dGVyZmx5LmdldCh0
aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOworICAgIHJl
dHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1dHRlcmZseS5n
ZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBz
dGF0aWMgSlNCb3VuZFNsb3RCYXNlRnVuY3Rpb24qIGdldEJvdW5kU2xvdEJhc2VGdW5jdGlvbkZv
ckdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90JiBzbG90LCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
ciwgSlNCb3VuZFNsb3RCYXNlRnVuY3Rpb246OlR5cGUgdHlwZSkKQEAgLTMwNTEsNyArMzA1MSw3
IEBAIHVpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEUKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQob2JqZWN0
KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVj
dC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoc3RvcmFn
ZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE5
ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2MiwxNCArMTYyLDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlm
ICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0
aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOwog
ICAgIH0KICAgICAgICAgCiAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKICAgICB7CiAg
ICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZl
Y3Rvckxlbmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxl
bmd0aCgpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBwdXRJbmxpbmUoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAg
LTIxNCw3ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNr
bHkodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lE
RURfSU5ERVhJTkdfVFlQRVM6CkBAIC0yNDAsNyArMjQwLDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
Z2V0KCkuYXNJbnQzMigpKTsKQEAgLTI1OCw3ICsyNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgIEpTVmFsdWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewot
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAg
c3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgpAQCAt
MzEyLDcgKzMxMiw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgYm9vbCBjYW5TZXRJbmRleFF1
aWNrbHkodW5zaWduZWQgaSkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6CkBAIC0zNDMsNyArMzQzLDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5Lmdl
dCgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
NTIsNyArMzUyLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICB2b2lkIHNldEluZGV4UXVpY2ts
eShWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5n
VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwpAQCAtNDA5LDcg
KzQwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKLSAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3
aXRjaCAoaW5kZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElO
R19UWVBFUzogewogICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQodm0sIGks
IHYpOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVy
biAhIW1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwor
ICAgICAgICAgICAgcmV0dXJuICEhbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODQsNyArNDg0
LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTkzLDExICs1OTMsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgIH0KICAgICAgICAgCi0g
ICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eS5nZXQodGhpcyk7IH0KLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsgfQorICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29u
c3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9CiAgICAgICAgIAotICAgIENvbnN0UHJv
cGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eS5nZXQodGhpcyktPnByb3BlcnR5U3RvcmFnZSgpOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIG91
dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQor
ICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICBjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNv
bnN0CiAgICAgewpAQCAtNzEzLDcgKzcxMyw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNW
YWx1ZXMgZW5zdXJlSW50MzIoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJ
bnQzMihpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+Y29udGlndW91c0ludDMyKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVy
biBlbnN1cmVJbnQzMlNsb3codm0pOwogICAgIH0KQEAgLTcyNSw3ICs3MjUsNyBAQCBwdWJsaWM6
CiAgICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJlRG91YmxlKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIGlmIChMSUtFTFkoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKTsKICAgICAg
ICAgICAgIAogICAgICAgICByZXR1cm4gZW5zdXJlRG91YmxlU2xvdyh2bSk7CiAgICAgfQpAQCAt
NzM1LDcgKzczNSw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29u
dGlndW91cyhWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMo
aW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhp
cyktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+
Y29udGlndW91cygpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1
b3VzU2xvdyh2bSk7CiAgICAgfQpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHB1YmxpYzoKICAgICBBcnJh
eVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOwogCiAgICAgICAgIHJl
dHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CkBAIC03OTUsNyArNzk1LDcg
QEAgcHJvdGVjdGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgfQogICAgICAg
ICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9u
cyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKQEAgLTgwNCw3ICs4MDQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTg2OSwxMSArODY5LDExIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAg
ICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRl
eGluZ1R5cGUoKSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQo
aW5kZXhpbmdUeXBlKCkpKTsKIAotICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52
ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LmdldCgpLT52
ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKICAgICAgICAgICAgIGVuc3VyZUxlbmd0aFNsb3codm0s
IGxlbmd0aCk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCi0gICAgICAgICAgICBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICBpZiAobV9idXR0ZXJmbHku
Z2V0KCktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgbV9idXR0ZXJmbHku
Z2V0KCktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8g
Q2FsbCB0aGlzIGlmIHlvdSB3YW50IHRvIHNocmluayB0aGUgYnV0dGVyZmx5IGJhY2tpbmcgc3Rv
cmUsIGFuZCB5b3UncmUKQEAgLTE0ODksNyArMTQ4OSw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0
OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
QVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29y
KSk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKLSAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJm
bHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1cmUo
KS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAkocmV2aXNpb24gMTk4MTUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE4NSw3ICsxODUsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8
RW50cnksIEpTCiB7CiAgICAgaWYgKCFlbnN1cmVTbG90KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KG1fbWFwRGF0
YS0+bV9vd25lcilbbV9pbmRleF07CisgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9l
bnRyaWVzLmdldCgpW21faW5kZXhdOwogICAgIHBhaXIgPSBXVEY6OktleVZhbHVlUGFpcjxKU1Zh
bHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVudHJ5LT52YWx1ZSgpLmdldCgpKTsK
ICAgICBtX2luZGV4ICs9IDE7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDcsNyArMjA3LDcgQEAg
QUxXQVlTX0lOTElORSBpbnQzMl90IE1hcERhdGFJbXBsPEVudHJ5LAogICAgIGlmIChpc0Zpbmlz
aGVkKCkpCiAgICAgICAgIHJldHVybiBtX2luZGV4OwogCi0gICAgRW50cnkqIGVudHJpZXMgPSBt
X21hcERhdGEtPm1fZW50cmllcy5nZXQobV9tYXBEYXRhLT5tX293bmVyKTsKKyAgICBFbnRyeSog
ZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzLmdldCgpOwogICAgIHNpemVfdCBlbmQgPSBt
X21hcERhdGEtPm1fc2l6ZTsKICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4
KSA8IGVuZCAmJiAhZW50cmllc1ttX2luZGV4XS5rZXkoKSkKICAgICAgICAgbV9pbmRleCsrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5o
CShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBE
YXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC02MCwyNSArNjAsMjUgQEAgaW5saW5lIEVudHJ5KiBNYXBEYXRh
SW1wbDxFbnRyeSwgSlNJdGVyYQogICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFi
bGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOwogICAgICAg
ICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVl
XTsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KClbaXRlci0+dmFsdWVdOwogICAgIH0K
ICAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKICAgICAgICAgYXV0byBpdGVyID0gbV9z
eW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51
aWQoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25l
cilbaXRlci0+dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQoKVtpdGVyLT52
YWx1ZV07CiAgICAgfQogICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgYXV0
byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7CiAgICAg
ICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVl
XTsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KClbaXRlci0+dmFsdWVdOwogICAgIH0K
IAogICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2Rl
KGtleS52YWx1ZSkpOwogICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRl
ci0+dmFsdWVdOworICAgIHJldHVybiAmbV9lbnRyaWVzLmdldCgpW2l0ZXItPnZhbHVlXTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBAIC05Mywx
NCArOTMsMTQgQEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQogewog
ICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwogICAg
IGlmIChsb2NhdGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdl
dChtX293bmVyKVtsb2NhdGlvbi0+dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5n
ZXQoKVtsb2NhdGlvbi0+dmFsdWVdOwogCiAgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChl
eGVjLCBvd25lcikpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXV0byByZXN1bHQgPSBtYXAu
YWRkKGtleSwgbV9zaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7
Ci0gICAgRW50cnkqIGVudHJ5ID0gJm1fZW50cmllcy5nZXQobV9vd25lcilbbV9zaXplKytdOwor
ICAgIEVudHJ5KiBlbnRyeSA9ICZtX2VudHJpZXMuZ2V0KClbbV9zaXplKytdOwogICAgIG5ldyAo
ZW50cnkpIEVudHJ5KCk7CiAgICAgZW50cnktPnNldEtleShleGVjLT52bSgpLCBvd25lciwga2V5
VmFsdWUudmFsdWUpOwogICAgIHJldHVybiBlbnRyeTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBpbmxp
bmUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgICAgIGxvY2F0aW9uID0g
aXRlci0+dmFsdWU7CiAgICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKICAg
ICB9Ci0gICAgbV9lbnRyaWVzLmdldChtX293bmVyKVtsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBt
X2VudHJpZXMuZ2V0KClbbG9jYXRpb25dLmNsZWFyKCk7CiAgICAgbV9kZWxldGVkQ291bnQrKzsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgdm9pZCBNYXBE
YXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgaW50MzJfdCBuZXdFbmQgPSAwOwogICAgIFJF
TEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBp
IDwgbV9zaXplOyBpKyspIHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmdldFdp
dGhvdXRCYXJyaWVyKClbaV07CisgICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllcy5nZXQo
KVtpXTsKICAgICAgICAgaWYgKCFlbnRyeS5rZXkoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRv
cnMuZm9yRWFjaChbbmV3RW5kXShKU0l0ZXJhdG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsK
ICAgICAgICAgICAgICAgICBpdGVyYXRvci0+aXRlcmF0b3JEYXRhKCktPmRpZFJlbW92ZUVudHJ5
KG5ld0VuZCk7CkBAIC0xOTUsMTMgKzE5NSwxMyBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxF
bnRyeSwgSlNJdGVyYXRvCiAKICAgICAvLyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCiAgICAgZm9y
IChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5
ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0
V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAg
ICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0KClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCku
YXNJbnQzMigpOwogICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7
IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1
ZSA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgp
LmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXQoKVtwdHItPnZh
bHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAgICAgZm9yIChhdXRvIHB0ciA9IG1fc3RyaW5n
S2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpOyArK3B0
cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpW3B0
ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1f
ZW50cmllcy5nZXQoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAgICAgZm9y
IChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xL
ZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5n
ZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAg
ICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXQoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQo
KS5hc0ludDMyKCk7CiAKICAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVk
Q291bnQpOwogICAgIG1fZGVsZXRlZENvdW50ID0gMDsKQEAgLTIxNyw3ICsyMTcsNyBAQCBpbmxp
bmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgQVNTRVJUKCFzaG91bGRQ
YWNrKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7CiAgICAgQVNTRVJU
KG5ld0NhcGFjaXR5ID49IG1fY2FwYWNpdHkpOwotICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9l
bnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCksIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOworICAg
IG1lbWNweShkZXN0aW5hdGlvbiwgbV9lbnRyaWVzLmdldCgpLCBzaXplb2YoRW50cnkpICogbV9z
aXplKTsKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9lbnRyaWVzLnNldFdp
dGhvdXRCYXJyaWVyKGRlc3RpbmF0aW9uKTsKIH0KQEAgLTIzNiw4ICsyMzYsNiBAQCBpbmxpbmUg
Q2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnksCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0
b3JhZ2UpOwotICAgIC8vIERvIGEgcmVhZCBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IG1fZW50cmll
cyBwb2ludHMgdG8gdG8tc3BhY2UgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhpcyBHQyBlcG9jaC4K
LSAgICBtX2VudHJpZXMuZ2V0KG1fb3duZXIpOyAKICAgICBpZiAoc2hvdWxkUGFjaygpKQogICAg
ICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUp
OwogICAgIGVsc2UKQEAgLTI0OSw3ICsyNDcsNyBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFw
RGF0YUltcGw8RW50cnksCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVy
YXRvcj4KIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBFbnRy
eSogZW50cmllcyA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpOworICAgIEVudHJ5KiBl
bnRyaWVzID0gbV9lbnRyaWVzLmdldCgpOwogICAgIGlmICghZW50cmllcykKICAgICAgICAgcmV0
dXJuOwogICAgIGlmIChtX2RlbGV0ZWRDb3VudCkgewpAQCAtMjYzLDE0ICsyNjEsMTQgQEAgaW5s
aW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRy
aWVzWzBdKSwgbV9zaXplICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOwogICAgIH0KIAotICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNr
aW5nU3RvcmVDb3B5VG9rZW4sIG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpLCBjYXBhY2l0
eUluQnl0ZXMoKSk7CisgICAgdmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9y
ZUNvcHlUb2tlbiwgbV9lbnRyaWVzLmdldCgpLCBjYXBhY2l0eUluQnl0ZXMoKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgogaW5saW5lIHZvaWQg
TWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNp
dG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgaWYgKHRva2VuID09IE1hcEJh
Y2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmll
cy5nZXRXaXRob3V0QmFycmllcigpKSkgewotICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1f
ZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpOworICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5n
U3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMuZ2V0
KCkpKSB7CisgICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzLmdldCgpOwogICAg
ICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxv
Y2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CiAgICAgICAgIGlmIChzaG91bGRQYWNr
KCkpCiAgICAgICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCBt
X2NhcGFjaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIwMCw2IEBAIHR5cGVkZWYgY29uc3QgY2hh
ciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdXNlTW92SGludFJlbW92YWwsIHRydWUsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZVB1dFN0YWNrU2lua2luZywgdHJ1ZSwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgdXNlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUsIG51bGxwdHIp
IFwKLSAgICB2KGJvb2wsIHVzZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uLCB0cnVlLCBudWxscHRy
KSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEpJVCwgdHJ1ZSwgImFsbG93cyB0
aGUgREZHIC8gRlRMIGNvbXBpbGF0aW9uIGluIHRocmVhZHMgb3RoZXIgdGhhbiB0aGUgZXhlY3V0
aW5nIEpTIHRocmVhZCIpIFwKICAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkRGR0NvbXBpbGVyVGhy
ZWFkcywgY29tcHV0ZU51bWJlck9mV29ya2VyVGhyZWFkcygyLCAyKSAtIDEsIG51bGxwdHIpIFwK
QEAgLTM3MSw3ICszNzAsNiBAQCBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICB2KGVuYWJs
ZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB1c2VQb2x5bW9ycGhpY0NhbGxJbmxpbmluZywgU2Ft
ZU9wdGlvbikgXAogICAgIHYoZW5hYmxlTW92SGludFJlbW92YWwsIHVzZU1vdkhpbnRSZW1vdmFs
LCBTYW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdXNl
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIFNhbWVPcHRpb24pIFwKLSAgICB2KGVuYWJsZUNvcHlC
YXJyaWVyT3B0aW1pemF0aW9uLCB1c2VDb3B5QmFycmllck9wdGltaXphdGlvbiwgU2FtZU9wdGlv
bikgXAogICAgIHYoZW5hYmxlQ29uY3VycmVudEpJVCwgdXNlQ29uY3VycmVudEpJVCwgU2FtZU9w
dGlvbikgXAogICAgIHYoZW5hYmxlUHJvZmlsZXIsIHVzZVByb2ZpbGVyLCBTYW1lT3B0aW9uKSBc
CiAgICAgdihlbmFibGVBcmNoaXRlY3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMsIHVzZUFyY2hp
dGVjdHVyZVNwZWNpZmljT3B0aW1pemF0aW9ucywgU2FtZU9wdGlvbikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274076</attachid>
            <date>2016-03-14 22:40:25 -0700</date>
            <delta_ts>2016-03-14 22:48:31 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>127259</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NSBA
QAorMjAxNi0wMy0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSB0aGUgQmFrZXIgYmFycmllciBmcm9tIEpTQworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSBhZGRl
ZCBhIEJha2VyIGJhcnJpZXIsIGJ1dCBJIG5ldmVyIGZvbGxvd2VkIGl0IHVwIHdpdGggYW4gYWN0
dWFsCisgICAgICAgIGNvbmN1cnJlbnQgR0MuIFdoaWxlIHRoaW5raW5nIGFib3V0IHRoZSBHQywg
SSBiZWNhbWUgY29udmluY2VkIHRoYXQgdGhlIHJpZ2h0IHBhdGggZm9yd2FyZAorICAgICAgICBp
cyB0byBkbyBhIG5vbi1jb3B5aW5nIGNvbmN1cnJlbnQgR0MuIFRoYXQgaXMsIHJlbW92ZSB0aGUg
Y29waWVkIHNwYWNlIGFuZCBqdXN0IHVzZSB0aGUKKyAgICAgICAgbWFya2VkIHNwYWNlLiBUaGUg
ZG93bnNpZGUgb2YgdXNpbmcgbWFya2VkIHNwYWNlIGNhbm5vdCBiZSBtb3JlIHRoYW4gdGhlIG92
ZXJoZWFkIG9mIHRoZQorICAgICAgICBCYWtlciBiYXJyaWVyLCBzbyBjb25jdXJyZW50IG5vbi1j
b3B5aW5nIEdDIGlzIGRlZmluaXRlbHkgYmV0dGVyIHRoYW4gY29weWluZworICAgICAgICBub24t
Y29uY3VycmVudCBHQy4gSSBhbHNvIHN1c3BlY3QgdGhhdCBqdXN0IHBsYWluIG5vbi1jb3B5aW5n
IG5vbi1jb25jdXJyZW50IEdDIGlzIGdvaW5nIHRvCisgICAgICAgIGJlIGZpbmUgYWxzbywgc28g
dGhlIHBhdGggZm9yd2FyZCB3aWxsIHByb2JhYmx5IGJlIHRvIGZpcnN0IGp1c3QgcmVtb3ZlIENv
cGllZFNwYWNlLgorCisgICAgICAgIEFueXdheSwgZm9yIG5vdyB0aGlzIHBhdGNoIGp1c3QgcmVt
b3ZlcyB0aGUgQmFrZXIgYmFycmllci4gSXQgd2FzIGEgY3V0ZSBpbXBsZW1lbnRhdGlvbiBidXQK
KyAgICAgICAgaXQganVzdCBjb3N0IHBlcmZvcm1hbmNlIGFuZCBJIGRvbid0IHRoaW5rIHdlJ2xs
IGV2ZXIgdXNlIGl0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVy
YXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlv
blBoYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICog
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgor
ICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ1dHRlcmZseSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudFN0cnVjdHVy
ZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUdldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVDb25zdGFudFN0b3JhZ2VQb2ludGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2hlY2tBcnJheSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0
ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlR2V0RGlyZWN0UG5hbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpzdG9yYWdlRm9yVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjppc0Zhc3RUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUdldEJ1dHRlcmZseVJlYWRPbmx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG9hZFZl
Y3RvcldpdGhCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29weUJhcnJpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjppc0luVG9TcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmxvYWRCdXR0ZXJmbHlSZWFkT25seSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmxvYWRWZWN0b3JSZWFkT25seSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnJlbW92ZVNwYWNl
Qml0cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9Db3B5QmFycmllci5oOgorICAgICAgICAo
SlNDOjpDb3B5QmFycmllckJhc2U6OkNvcHlCYXJyaWVyQmFzZSk6CisgICAgICAgIChKU0M6OkNv
cHlCYXJyaWVyQmFzZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVy
QmFzZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJCYXNlOjpjbGVhcik6CisgICAg
ICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6c2V0V2l0aG91dEJhcnJpZXIpOgorICAgICAgICAo
SlNDOjpDb3B5QmFycmllcjo6Q29weUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmll
cjo6Z2V0KToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXI6OnNldCk6CisgICAgICAgIChKU0M6
OkNvcHlCYXJyaWVyOjpzZXRXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OkNvcHlCYXJy
aWVyQmFzZTo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJC
YXNlOjpnZXRXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlCYXJy
aWVyQmFzZTo6Z2V0UHJlZGljYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlCYXJy
aWVyQmFzZTo6Y29weVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJC
YXNlOjpzZXRDb3B5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb3B5QmFycmllckJh
c2U6OndlYWtDQVNXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlC
YXJyaWVyOjpnZXRXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlC
YXJyaWVyOjpnZXRQcmVkaWNhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weUJhcnJp
ZXI6OndlYWtDQVNXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y29sbGVjdEFuZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJh
cnJpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpI
ZWFwOjp3cml0ZUJhcnJpZXJCdWZmZXIpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90RmFzdFR5cGVk
QXJyYXkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTik6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bG9hZFR5cGVkQXJyYXlWZWN0b3IpOiBEZWxldGVk
LgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpicmFuY2hTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZlRvU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmTm90VG9TcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6cmVtb3ZlU3BhY2VCaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFt
ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0RG91YmxlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNM
b2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpT
Qzo6RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RGly
ZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y2FuQWNjZXNzSW5k
ZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjYW5BY2Nlc3NBcmd1
bWVudEluZGV4UXVpY2tseUluREZHKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5
Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6ZmFzdFNsaWNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmFzdENvbmNhdFdpdGgp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3Ojppc05ldXRlcmVkKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6
OnZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpsZW5ndGgpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNr
aW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRl
ZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3Vv
dXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9y
YWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29u
dmVydEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMy
VG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lk
ZWQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9y
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91
dEF0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6Omdl
dEJvdW5kU2xvdEJhc2VGdW5jdGlvbkZvckdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVp
Y2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlHZXRJbmRleFF1aWNrbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5p
dGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1NwYXJzZU1hcCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1
dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvdXRPZkxpbmVTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmxvY2F0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmVuc3VyZUludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZURv
dWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9y
YWdlT3JOdWxsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAg
ICogcnVudGltZS9NYXBEYXRhLmg6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+OjpJdGVyYXRv
ckRhdGE6Om5leHQpOgorICAgICAgICAoSlNDOjpKU0l0ZXJhdG9yPjo6SXRlcmF0b3JEYXRhOjpy
ZWZyZXNoQ3Vyc29yKToKKyAgICAgICAgKiBydW50aW1lL01hcERhdGFJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkpTSXRlcmF0b3I+OjpmaW5kKToKKyAgICAgICAgKEpTQzo6SlNJdGVyYXRvcj46
OmFkZCk6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+OjpyZW1vdmUpOgorICAgICAgICAoSlND
OjpKU0l0ZXJhdG9yPjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlND
OjpKU0l0ZXJhdG9yPjo6cmVwbGFjZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6OkpTSXRl
cmF0b3I+OjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNJdGVyYXRvcj46OmNvcHlCYWNraW5n
U3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE2LTAzLTE0ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIERvbid0
IHJlZmVyZW5jZSB0aGUgcHJvcGVydGllcyBvZiBAUmVmbGVjdCBkaXJlY3RseQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyAr
MjY5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHQ29tcGlsYXRp
b25Nb2RlLmNwcAogICAgIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKICAgICBkZmcv
REZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcAotICAgIGRmZy9ERkdDb3B5QmFycmllck9wdGlt
aXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNw
cAogICAgIGRmZy9ERkdEQ0VQaGFzZS5jcHAKICAgICBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJz
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5ODE1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OSw4ICs4OSw2IEBACiAJCTBGMDQzOTZFMUIw
M0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyog
REZHQ29tYmluZWRMaXZlbmVzcy5oICovOyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIg
LyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKIAkJMEYwNzc2QkYxNEZGMDAyQjAwMTAy
MzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGls
YXRpb25FZmZvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjA5ODFGNTFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRp
b25QaGFzZS5jcHAgKi87IH07Ci0JCTBGMDk4MUY4MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5
QmFycmllck9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjA5ODFGNjFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJp
ZXJPcHRpbWl6YXRpb25QaGFzZS5oICovOyB9OwogCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICov
OyB9OwogCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBBNzUyMTFCOTRCRkE5
MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1
bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MEI4Mzk3MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgKi87IH07CkBAIC0yMjQ4
LDggKzIyNDYsNiBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRM
aXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExp
dmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
cnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYw
MDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEYwOTgxRjUxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0
aW1pemF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMDk4MUY2MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvcHlCYXJyaWVyT3B0
aW1pemF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBo
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEE3NTIwMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5mZXJyZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
QTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwQjgzOTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50VGh1bmtzLmNwcDsgcGF0aCA9IGxs
aW50L0xMSW50VGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxMzgs
OCArNjEzNCw2IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oICovLAotCQkJCTBGMDk4MUY1MUJDNUU1NjUw
MDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCAqLywKLQkJCQkw
RjA5ODFGNjFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFz
ZS5oICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCUE3RDg5Q0U2MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLywKQEAgLTcyMDYsNyArNzIwMCw2IEBACiAJ
CQkJMEYzOEIwMUExN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCQTFCMjYyNTZEMDA2NkNFMTUg
LyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjA5ODFG
ODFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzMxNkMxREIwNTAwODJDNUU4IC8qIERGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y2MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZGQzk1QTE0RUY5MEE5MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtODc3MCw3ICs4NzYzLDYgQEAKIAkJCQkwRjM4QjAxOTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZH
Q29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTFBMTUzRTY4RjIw
MDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVENjdCOTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTBGMDk4MUY3MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5
QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjcy
MTZDMURCMDMwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjE4MzI5MUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Niw3ICs1NzYsNiBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAogICAgICAgICAg
ICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgaml0LnJlbW92ZVNw
YWNlQml0cyhsb2FkZWRWYWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxv
YWRlZFZhbHVlR1BSOwogICAgICAgICAgICAgfQogCkBAIC04NTYsNyArODU1LDYgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUb1Nw
YWNlKHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAg
ICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
CkBAIC05MjUsNyArOTIzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5l
cmF0aQogICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0
Y2hHUFIzKSk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+
bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCkBAIC05Njks
MTAgKzk2Niw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAg
ICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKICAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFzY3JhdGNo
R1BSSGFzU3RvcmFnZSkgeworICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkK
ICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VG9TcGFjZShz
Y3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgK
ICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwpAQCAtMTA2Nyw3ICsxMDYyLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGppdC5yZW1vdmVTcGFjZUJpdHMo
c2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE5ODE1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5NCw3ICsyMDk0LDYgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR2V0QnV0dGVyZmx5OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAg
Y2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBp
cyBub3QgYSBKUyB2YWx1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTk4
MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTIsNyArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5
UmVhZE9ubHk6CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYmFyZWx5IHdvcmtzLiBUaGUg
ZGFuZ2VyIGlzIHRoYXQgdGhlIEdldEJ1dHRlcmZseSBpcyB1c2VkIGJ5IHNvbWV0aGluZyB0aGF0
CiAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgc29tZXRoaW5nIGVzY2FwaW5nIHRvIGEgY2Fu
ZGlkYXRlLiBGb3J0dW5hdGVseSwgdGhlIG9ubHkgYnV0dGVyZmx5LXVzaW5nIG9wcwogICAgICAg
ICAgICAgICAgICAgICAvLyB0aGF0IHdlIGV4ZW1wdCBoZXJlIGFsc28gdXNlIHRoZSBjYW5kaWRh
dGUgZGlyZWN0bHkuIElmIHRoZXJlIGV2ZXIgd2FzIGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtODAzLDEz
ICs4MDMsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5v
ZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKLSAgICBj
YXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgotICAgICAgICAvLyBUaGlzIHJ1bGUgaXMgc2VwYXJh
dGUgdG8gcHJldmVudCBDU0Ugb2YgR2V0QnV0dGVyZmx5IHdpdGggR2V0QnV0dGVyZmx5UmVhZE9u
bHkuIEJ1dCBpbiByZWFsaXR5LAotICAgICAgICAvLyB0aGlzIHdvcmtzIGJlY2F1c2Ugd2UgZG9u
J3QgaW50cm9kdWNlIEdldEJ1dHRlcmZseVJlYWRPbmx5IHVudGlsIHRoZSBiaXR0ZXIgZW5kIG9m
IGNvbXBpbGF0aW9uLgotICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAg
IGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5UmVhZE9ubHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZs
eSwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCiAgICAgY2FzZSBBcnJheWlmeToKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6
CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLQotI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKLSNpbmNsdWRlICJERkdEb2VzR0MuaCIK
LSNpbmNsdWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkRGR1BoYXNlLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLW5hbWVz
cGFjZSB7Ci0KLWJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1jbGFzcyBDb3B5QmFycmllck9wdGlt
aXphdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKLXB1YmxpYzoKLSAgICBDb3B5QmFycmllck9w
dGltaXphdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgImNv
cHkgYmFycmllciBvcHRpbWl6YXRpb24iKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBy
dW4oKQotICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2co
IlN0YXJ0aW5nIGNvcHkgYmFycmllciBvcHRpbWl6YXRpb246XG4iKTsKLSAgICAgICAgICAgIG1f
Z3JhcGguZHVtcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlyc3QgY29udmVydCBhbGwg
R2V0QnV0dGVyZmx5IG5vZGVzIGludG8gR2V0QnV0dGVyZmx5UmVhZE9ubHkuCi0gICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
LSAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEdldEJ1dHRlcmZseSkKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3AoR2V0QnV0dGVyZmx5UmVhZE9ubHkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQW55dGltZSB3ZSB1c2UgYSBHZXRCdXR0ZXJmbHlSZWFkT25seSBpbiBh
IHNldHRpbmcgdGhhdCBtYXkgd3JpdGUgdG8gdGhlIGhlYXAsIG9yIGlmIHdlJ3JlIGluIGEKLSAg
ICAgICAgLy8gbmV3IGVwb2NoLCBjb252ZXJ0IGl0IHRvIGEgR2V0QnV0dGVyZmx5LiBUaGUgZXBv
Y2ggZ2V0cyBpbmNyZW1lbnRlZCBhdCBiYXNpYyBibG9jayBib3VuZGFyaWVzLAotICAgICAgICAv
LyBhbnl0aW1lIHdlIEdDLCBhbmQgYW55dGltZSBhIGJhcnJpZXIgb24gdGhlIGJ1dHRlcmZseSBt
YXkgYmUgZXhlY3V0ZWQuIFdlIHRyYXZlcnNlIHRoZSBwcm9ncmFtCi0gICAgICAgIC8vIGluIHBy
ZS1vcmRlciBzbyB0aGF0IHdlIGFsd2F5cyBzZWUgdXNlcyBhZnRlciBkZWZzLiBOb3RlIHRoYXQg
dGhpcyBpcyBhIGZpeHBvaW50IGJlY2F1c2UgaWYgd2UKLSAgICAgICAgLy8gdHVybiBhIEdldEJ1
dHRlcmZseVJlYWRPbmx5IGludG8gYSBHZXRCdXR0ZXJmbHksIHRoZW4gd2UndmUgaW50cm9kdWNl
ZCBhIGJ1dHRlcmZseSByZWFsbG9jYXRpb24uCi0gICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7
Ci0gICAgICAgIEVwb2NoIGN1cnJlbnRFcG9jaCA9IEVwb2NoOjpmaXJzdCgpOwotICAgICAgICBt
X2dyYXBoLmNsZWFyRXBvY2hzKCk7Ci0gICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50
RXBvY2guYnVtcCgpOwotICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykg
ewotICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRlc1RvSGVhcCA9IHdyaXRlc092ZXJsYXAo
bV9ncmFwaCwgbm9kZSwgSGVhcCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCByZWFsbG9j
YXRlc0J1dHRlcmZseSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoZG9lc0dDKG1f
Z3JhcGgsIG5vZGUpIHx8IHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgSlNPYmplY3RfYnV0
dGVyZmx5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVzQnV0dGVyZmx5ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2lsbCBl
eGVjdXRlIGNvcHkgYmFycmllcnMuIE1vc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRo
aW5ncyB0aGF0IGV4ZWN1dGUgY29weSBiYXJyaWVycyBhbHNvIGRvIEdDIG9yIGhhdmUgd3JpdGVz
IHRoYXQgb3ZlcmxhcCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dHRlcmZseSBo
ZWFwLCBhbmQgd2UgY2F0Y2ggdGhhdCBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0
ZXJmbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbGxvY2F0ZXNCdXR0ZXJmbHkgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRn
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5vcCgpICE9IEdldEJ1
dHRlcmZseVJlYWRPbmx5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAod3JpdGVzVG9IZWFwIHx8IGN1cnJlbnRFcG9jaCAhPSBlZGdlLT5lcG9jaCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlZGdlLT5zZXRPcChHZXRCdXR0ZXJmbHkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRlc0J1dHRlcmZseSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgcGhhc2UgYWx3YXlzIHRo
aW5rcyB0aGF0IGl0IGNoYW5nZXMgdGhlIGdyYXBoLiBUaGF0J3MgT0ssIGJlY2F1c2UgaXQncyBh
IGxhdGUgcGhhc2UuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLX0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQotCi1ib29sIHBlcmZvcm1Db3B5QmFycmllck9wdGltaXphdGlvbihH
cmFwaCYgZ3JhcGgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBD
b3B5IEJhcnJpZXIgT3B0aW1pemF0aW9uIFBoYXNlIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNlPENv
cHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2U+KGdyYXBoKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZS5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBERkdDb3B5QmFycmllck9wdGltaXph
dGlvblBoYXNlX2gKLSNkZWZpbmUgREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZV9oCi0K
LSNpZiBFTkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci1jbGFzcyBHcmFwaDsKLQotLy8gQ29udmVydHMgR2V0QnV0dGVyZmx5IG5vZGVzIGludG8gR2V0
QnV0dGVyZmx5UmVhZE9ubHkgbm9kZXMgd2hlbmV2ZXIgdGhlIGJ1dHRlcmZseSBpcyBvbmx5IHVz
ZWQgZm9yCi0vLyByZWFkLW9ubHkgb3BlcmF0aW9ucy4KLWJvb2wgcGVyZm9ybUNvcHlCYXJyaWVy
T3B0aW1pemF0aW9uKEdyYXBoJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw2IEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNh
c2UgR2V0RXhlY3V0YWJsZToKICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICBjYXNlIEdldEJ1
dHRlcmZseVJlYWRPbmx5OgogICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICBjYXNlIEdldFNjb3Bl
OgogICAgIGNhc2UgU2tpcFNjb3BlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUxLDggKzEx
NTEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICBj
YXNlIENoZWNrQ2VsbDoKICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgotICAgICAgICBjYXNlIEdl
dEJ1dHRlcmZseToKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seTogeworICAgICAg
ICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTk4
MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MiwxMCArOTIsNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgTG9jCiAgICAgICAgIG91dC5wcmludCgiQnV0dGVyZmx5TG9jIik7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBCdXR0ZXJmbHlSZWFkT25seUxvYzoKLSAg
ICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlSZWFkT25seUxvYyIpOwotICAgICAgICByZXR1cm47
Ci0KICAgICBjYXNlIENoZWNrVHlwZUluZm9GbGFnc0xvYzoKICAgICAgICAgb3V0LnByaW50KCJD
aGVja1R5cGVJbmZvRmxhZ3NMb2MiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAxOTgxNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw2IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICAKICAgICBBcnJh
eUxlbmd0aExvYywKICAgICBCdXR0ZXJmbHlMb2MsCi0gICAgQnV0dGVyZmx5UmVhZE9ubHlMb2Ms
CiAgICAgQ2hlY2tUeXBlSW5mb0ZsYWdzTG9jLAogICAgIE92ZXJyaWRlc0hhc0luc3RhbmNlTG9j
LAogICAgIENsb3N1cmVWYXJpYWJsZUxvYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw2IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFj
cm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0QnV0dGVyZmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkg
XAotICAgIG1hY3JvKEdldEJ1dHRlcmZseVJlYWRPbmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgLyog
QSBub2RlIHVzZWQgdG8gcmVwbGFjZSBHZXRCdXR0ZXJmbHkgYXQgdGhlIGJpdHRlciBlbmQgb2Yg
Y29tcGlsYXRpb24uICovXAogICAgIG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhBcnJheWlmeSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEFy
cmF5aWZ5VG9TdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5OSwyMiArMTI5OSw2IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25T
d2l0Y2hTdHIKICAgICByZXR1cm4gZXhlYy0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwo
KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOwogfQogCi1jaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ1dHRlcmZseShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpLT5idXR0ZXJmbHkoKSk7Ci19Ci0KLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGNlbGwpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0KLSAgICByZXR1cm4gYml0d2lzZV9jYXN0
PGNoYXIqPihqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKS0+dmVjdG9yKCkpOwotfQot
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiBleGVj
LCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxOTgx
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDggKzE0NSw2IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25TdHJDYXQzKEUKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRh
cmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5k
ZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRl
Kiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KEV4ZWNTdGF0ZSosIHNpemVf
dCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCdXR0ZXJmbHkoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRT
ZXQqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JW
YXJhcmdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50
cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNs
dWRlICJERkdDbGVhblVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIgotI2luY2x1ZGUgIkRG
R0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdGYWlsZWRGaW5hbGl6ZXIuaCIKQEAgLTM1Nyw4ICszNTYsNiBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRm
Zyk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VDb3B5QmFycmllck9wdGltaXphdGlvbigpKQot
ICAgICAgICAgICAgcGVyZm9ybUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1QaGFudG9tSW5zZXJ0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91
dChkZmcpOwogICAgICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwpA
QCAtNDM5LDggKzQzNiw2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJm
b3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdlIHJlbHkgb24g
dGhpcyB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBi
eSBCMy4KLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKCkp
Ci0gICAgICAgICAgICBwZXJmb3JtQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oZGZnKTsKICAgICAg
ICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhkZmcpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODMsNyArNDgzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseVJlYWRPbmx5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAg
ICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyAr
MjAzLDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOgogICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgY2FzZSBDaGVj
a0FycmF5OgogICAgIGNhc2UgQXJyYXlpZnk6CiAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTI2
LDcgKzQxMjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICBjYXNl
IEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgICAgICBjb21waWxlR2V0QnV0dGVyZmx5KG5vZGUp
OwogICAgICAgICBicmVhazsKIApAQCAtNDgxMyw3ICs0ODEyLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAvLyBXZSB1c2UgcmVzdWx0UGF5bG9h
ZEdQUiBhcyBhIHRlbXBvcmFyeSBoZXJlLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBjbG9iYmVyIGl0
IGFmdGVyIGdldHRpbmcgdGhlIAogICAgICAgICAvLyB2YWx1ZSBvdXQgb2YgaW5kZXhHUFIgYW5k
IGVudW1lcmF0b3JHUFIgYmVjYXVzZSByZXN1bHRQYXlsb2FkR1BSIGNvdWxkIHJldXNlIGVpdGhl
ciBvZiB0aG9zZSByZWdpc3RlcnMuCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFRv
U3BhY2UocmVzdWx0UGF5bG9hZEdQUikpOwogICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwog
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXls
b2FkR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0UGF5bG9hZEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxNDcsNyArNDE0Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgICAgIGNvbXBpbGVHZXRCdXR0
ZXJmbHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC00ODE4LDcgKzQ4MTcsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZtX2ppdCk7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaDJHUFIpOwotICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gyR1BSKSk7CiAgICAg
ICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuc3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwog
ICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoMUdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTk4MTUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyMjYsMTAgKzUyMjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0SW5kZXhlZFByCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBmYWlsID0gbV9qaXQubG9hZFR5cGVkQXJyYXlWZWN0b3IoYmFzZVJlZywgc3Rv
cmFnZVJlZyk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBz
bG93UGF0aENhbGwoZmFpbCwgdGhpcywgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IsIHN0
b3JhZ2VSZWcsIGJhc2VSZWcpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHN0
b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC01MjUyLDEzICs1MjQ5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgICAgICBU
cnVzdGVkSW1tMzIoV2FzdGVmdWxUeXBlZEFycmF5KSk7CiAKICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGRhdGFHUFIpOwotICAgIG1faml0LnJlbW92ZVNwYWNlQml0cyhkYXRhR1BSKTsKICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgdmVjdG9yR1BSKTsKLSAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgdmVjdG9yUmVhZHk7Ci0gICAgdmVjdG9yUmVhZHkuYXBwZW5kKG1faml0LmJyYW5j
aElmVG9TcGFjZSh2ZWN0b3JHUFIpKTsKLSAgICB2ZWN0b3JSZWFkeS5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOb3RGYXN0VHlwZWRBcnJheShiYXNlR1BSKSk7Ci0gICAgbV9qaXQucmVtb3ZlU3BhY2VC
aXRzKHZlY3RvckdQUik7Ci0gICAgdmVjdG9yUmVhZHkubGluaygmbV9qaXQpOwogICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGF0YUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZkFycmF5QnVmZmVyKCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRhdGEoKSksIGRh
dGFHUFIpOwogICAgIG1faml0LnN1YlB0cihkYXRhR1BSLCB2ZWN0b3JHUFIpOwpAQCAtNjMyMiwy
MyArNjMxMyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCdXR0ZXJmbHkKICAg
ICAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAKLSAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoSWZOb3RUb1NwYWNlKHJlc3VsdEdQUiksCi0gICAgICAgICAgICAgICAgdGhpcywgb3Bl
cmF0aW9uR2V0QnV0dGVyZmx5LCByZXN1bHRHUFIsIGJhc2VHUFIpKTsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgotICAgICAgICBtX2ppdC5yZW1vdmVT
cGFjZUJpdHMocmVzdWx0R1BSKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBub2RlIHR5cGUiKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAogICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
YXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToK
LSAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoK
ICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtMzI2LDcgKzMyNSw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5
VmFsRGlyZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTgx
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICBjYXNlIEdldEJ1dHRlcmZs
eVJlYWRPbmx5OgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAg
Y2FzZSBOZXdBcnJheUJ1ZmZlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDkg
KzYxNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAg
ICAgY29tcGlsZUdldEJ1dHRlcmZseSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnV0dGVyZmx5
UmVhZE9ubHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnN0YW50U3Rv
cmFnZVBvaW50ZXI6CiAgICAgICAgICAgICBjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9pbnRlcigp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzk0LDE0ICsyMzkxLDkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQogICAgIHsKLSAgICAgICAgc2V0U3Rv
cmFnZShsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkp
OworICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICB9CiAKLSAgICB2b2lkIGNv
bXBpbGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpCi0gICAgewotICAgICAgICBzZXRTdG9yYWdlKGxv
YWRCdXR0ZXJmbHlSZWFkT25seShsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgfQot
ICAgIAogICAgIHZvaWQgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKQogICAgIHsKICAg
ICAgICAgc2V0U3RvcmFnZShtX291dC5jb25zdEludFB0cihtX25vZGUtPnN0b3JhZ2VQb2ludGVy
KCkpKTsKQEAgLTI0MzQsNyArMjQyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UobG9hZFZlY3RvcldpdGhC
YXJyaWVyKGNlbGwpKTsKKyAgICAgICAgc2V0U3RvcmFnZShtX291dC5sb2FkUHRyKGNlbGwsIG1f
aGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUNoZWNrQXJyYXkoKQpAQCAtMjQ3MSw4ICsyNDYzLDggQEAgcHJpdmF0ZToKIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyh3YXN0ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAg
ICAgTFZhbHVlIHZlY3RvclB0ciA9IGxvYWRWZWN0b3JSZWFkT25seShiYXNlUHRyKTsKLSAgICAg
ICAgTFZhbHVlIGJ1dHRlcmZseVB0ciA9IGxvYWRCdXR0ZXJmbHlSZWFkT25seShiYXNlUHRyKTsK
KyAgICAgICAgTFZhbHVlIHZlY3RvclB0ciA9IG1fb3V0LmxvYWRQdHIoYmFzZVB0ciwgbV9oZWFw
cy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRy
ID0gbV9vdXQubG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAg
ICAgICAgIExWYWx1ZSBhcnJheUJ1ZmZlclB0ciA9IG1fb3V0LmxvYWRQdHIoYnV0dGVyZmx5UHRy
LCBtX2hlYXBzLkJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7CiAgICAgICAgIExWYWx1ZSBkYXRhUHRy
ID0gbV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFwcy5BcnJheUJ1ZmZlcl9kYXRh
KTsKIApAQCAtNDM0Miw3ICs0MzM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKG1ldGhvZC5w
cm90b3R5cGUoKS0+dmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0lu
bGluZU9mZnNldChtZXRob2Qub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eUJhc2UgPSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkocHJvcGVydHlCYXNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVh
cHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJv
cGVydHkoCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQx
MCw3ICs0NDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBiYXNl
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGxv
YWRCdXR0ZXJmbHlXaXRoQmFycmllcihiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0
aW9ucy5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKQEAgLTYxODIsNyArNjE3NCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkLCBzbG93Q2FzZSk7Ci0gICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2UpOworICAgICAgICBMVmFsdWUgc3Rv
cmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICBMVmFsdWUgcmVhbEluZGV4ID0gbV9vdXQuc2lnbkV4dDMyVG82NCgKICAgICAgICAg
ICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBt
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7
CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CkBAIC02OTU1LDE0ICs2OTQ3LDE0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAKICAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5leHRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKG9iamVj
dCk7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAg
ICAgIGlmICghcHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCiAgICAgICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIHByZXZpb3VzU3Ry
dWN0dXJlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSByZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgICAgIG9iamVjdCwgbG9hZEJ1dHRlcmZseVdp
dGhCYXJyaWVyKG9iamVjdCksCisgICAgICAgICAgICAgICAgb2JqZWN0LCBtX291dC5sb2FkUHRy
KG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLAogICAgICAgICAgICAgICAgIHBy
ZXZpb3VzU3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTcxMjUsMTEwICs3MTE3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7
CiAgICAgfQogCi0gICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihMVmFsdWUgb2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAotICAgICAgICAgICAgb2Jq
ZWN0LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLCBv
cGVyYXRpb25HZXRCdXR0ZXJmbHkpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG9hZFZlY3Rv
cldpdGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICBMVmFsdWUgZmFzdFJl
c3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZp
ZXdfdmVjdG9yKTsKLSAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAotICAgICAgICAgICAgZmFz
dFJlc3VsdFZhbHVlLAotICAgICAgICAgICAgWyZdICgpIC0+IExWYWx1ZSB7Ci0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVk
QXJyYXkob2JqZWN0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsK
LQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jl
c3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlC
dWZmZXJWZWN0b3IsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9LCBvYmplY3QpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50
ZXIsIFBfSklUT3BlcmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBwb2ludGVyLAotICAgICAgICAgICAgWyZd
ICgpIC0+IExWYWx1ZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aCgKLSAg
ICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9j
YXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsK
LSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgTFZhbHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBwb2ludGVyLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdC
bG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
cG9pbnRlcik7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc0luVG9TcGFjZShwb2ludGVyKSwgdXN1
YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKLQotICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwot
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoZnVuY3Rv
cigpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQu
cGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgfQotCi0gICAg
TFZhbHVlIGlzSW5Ub1NwYWNlKExWYWx1ZSBwb2ludGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LnRlc3RJc1plcm9QdHIocG9pbnRlciwgbV9vdXQuY29uc3RJbnRQdHIoQ29weUJhcnJp
ZXJCYXNlOjpzcGFjZUJpdHMpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVJl
YWRPbmx5KExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcmVtb3ZlU3BhY2VC
aXRzKG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwot
ICAgIH0KLQotICAgIExWYWx1ZSBsb2FkVmVjdG9yUmVhZE9ubHkoTFZhbHVlIG9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKG9iamVj
dCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotCi0gICAgICAgIExCYXNpY0Js
b2NrIHBvc3NpYmx5RnJvbVNwYWNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7Ci0KLSAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKGZhc3RSZXN1bHRWYWx1ZSksIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHBvc3NpYmx5RnJvbVNwYWNlKSk7Ci0KLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhwb3NzaWJseUZyb21TcGFjZSwgY29u
dGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbV9vdXQuc2Vs
ZWN0KAotICAgICAgICAgICAgaXNGYXN0VHlwZWRBcnJheShvYmplY3QpLCByZW1vdmVTcGFjZUJp
dHMoZmFzdFJlc3VsdFZhbHVlKSwgZmFzdFJlc3VsdFZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIHJlbW92ZVNwYWNlQml0cyhMVmFsdWUgc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX291dC5iaXRBbmQoCi0gICAgICAgICAgICBzdG9yYWdlLCBtX291dC5jb25zdEludFB0cih+
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSkpOwotICAg
IH0KLQogICAgIExWYWx1ZSBpc0Zhc3RUeXBlZEFycmF5KExWYWx1ZSBvYmplY3QpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlCYXJyaWVyLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsODggKzMwLDIw
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1lbnVtIGNsYXNzIENvcHlTdGF0ZSB7Ci0gICAgLy8g
VGhlIGJhY2tpbmcgc3RvcmUgaXMgbm90IHBsYW5uZWQgdG8gZ2V0IGNvcGllZCBpbiB0aGlzIGVw
b2NoLiBJZiB5b3Uga2VlcCBhIHBvaW50ZXIgdG8gdGhlIGJhY2tpbmcKLSAgICAvLyBzdG9yZSBv
biB0aGUgc3RhY2ssIGl0IHdpbGwgbm90IGdldCBjb3BpZWQuIElmIHlvdSBkb24ndCBrZWVwIGl0
IG9uIHRoZSBzdGFjaywgaXQgbWF5IGdldCBjb3BpZWQKLSAgICAvLyBzdGFydGluZyBhdCB0aGUg
bmV4dCBoYW5kc2hha2UgKHRoYXQgaXMsIGl0IG1heSB0cmFuc2l0aW9uIGZyb20gVG9TcGFjZSB0
byBDb3B5UGxhbm5lZCwgYnV0Ci0gICAgLy8gQ29weVBsYW5uZWQgbWVhbnMgVG9TcGFjZSBwcmlv
ciB0byB0aGUgaGFuZHNoYWtlIHRoYXQgc3RhcnRzIHRoZSBjb3B5IHBoYXNlKS4KLSAgICBUb1Nw
YWNlLAotCi0gICAgLy8gVGhlIG1hcmtpbmcgcGhhc2UgaGFzIHNlbGVjdGVkIHRoaXMgYmFja2lu
ZyBzdG9yZSB0byBiZSBjb3BpZWQuIElmIHdlIGFyZSBub3QgeWV0IGluIHRoZSBjb3B5aW5nCi0g
ICAgLy8gcGhhc2UsIHRoaXMgYmFja2luZyBzdG9yZSBpcyBzdGlsbCBpbiB0by1zcGFjZS4gQWxs
IHRoYXQgaXMgbmVlZGVkIGluIHN1Y2ggYSBjYXNlIGlzIHRvIG1hc2sgb2ZmIHRoZQotICAgIC8v
IGxvdyBiaXRzLiBJZiB3ZSBhcmUgaW4gdGhlIGNvcHlpbmcgcGhhc2UsIHRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IHBvaW50cyB0byBmcm9tLXNwYWNlLiBUaGUKLSAgICAvLyBiYXJyaWVyIHNo
b3VsZCBmaXJzdCBjb3B5IHRoZSBvYmplY3QgLSBvciB3YWl0IGZvciBjb3B5aW5nIHRvIGZpbmlz
aCAtIGJlZm9yZSB1c2luZyB0aGUgb2JqZWN0LgotICAgIENvcHlQbGFubmVkLAotCi0gICAgLy8g
VGhlIG9iamVjdCBpcyBiZWluZyBjb3BpZWQgcmlnaHQgbm93LiBBbnlvbmUgd2FudGluZyB0byB1
c2UgdGhlIG9iamVjdCBtdXN0IHdhaXQgZm9yIHRoZSBvYmplY3QgdG8KLSAgICAvLyBmaW5pc2gg
YmVpbmcgY29waWVkLiBOb3RpZmljYXRpb25zIGFib3V0IGNvcHlpbmcgdXNlIHRoZSBQYXJraW5n
TG90IGNvbWJpbmVkIHdpdGggdGhlc2UgYml0cy4gSWYgdGhlCi0gICAgLy8gc3RhdGUgaXMgQ29w
eWluZ0FuZFdhaXRpbmcsIHRoZW4gd2hlbiB0aGUgY29weWluZyBmaW5pc2hlcywgd2hhdGV2ZXIg
dGhyZWFkIHdhcyBkb2luZyBpdCB3aWxsCi0gICAgLy8gdW5wYXJrQWxsKCkgb24gdGhlIGFkZHJl
c3Mgb2YgdGhlIENvcHlCYXJyaWVyQmFzZS4gU28sIHRvIHdhaXQgZm9yIGNvcHlpbmcgdG8gZmlu
aXNoLCBDQVMgdGhpcyB0bwotICAgIC8vIENvcHlpbmdBbmRXYWl0aW5nIGFuZCB0aGVuIHBhcmtD
b25kaXRpb25hbGx5IG9uIHRoZSBiYXJyaWVyIGFkZHJlc3MuCi0gICAgQ29weWluZywKLQotICAg
IC8vIFRoZSBvYmplY3QgaXMgYmVpbmcgY29waWVkIHJpZ2h0IG5vdywgYW5kIHRoZXJlIGFyZSBv
bmUgb3IgbW9yZSB0aHJlYWRzIHBhcmtlZC4gVGhvc2UgdGhyZWFkcyB3YW50Ci0gICAgLy8gdG8g
YmUgdW5wYXJrZWQgd2hlbiBjb3B5aW5nIGlzIGRvbmUuIFNvLCB3aGljaGV2ZXIgdGhyZWFkIGRv
ZXMgdGhlIGNvcHlpbmcgbmVlZHMgdG8gY2FsbCB1bnBhcmtBbGwoKQotICAgIC8vIG9uIHRoZSBi
YXJyaWVyIGFkZHJlc3MgYWZ0ZXIgY29weWluZyBpcyBkb25lLgotICAgIENvcHlpbmdBbmRXYWl0
aW5nCi19OwotCiBjbGFzcyBDb3B5QmFycmllckJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzcGFjZUJpdHMgPSAzOwotCiAgICAgQ29weUJhcnJpZXJCYXNlKCkKICAg
ICAgICAgOiBtX3ZhbHVlKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKLSAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9Ci0gICAgCiAgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIHZvaWQqIGdl
dFdpdGhvdXRCYXJyaWVyKCkgY29uc3QKKyAgICB2b2lkKiBnZXQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQogCi0gICAgLy8gVXNlIHRoaXMgdmVyc2lvbiBv
ZiBnZXQoKSBpZiB5b3Ugb25seSB3YW50IHRvIGV4ZWN1dGUgdGhlIGJhcnJpZXIgc2xvdyBwYXRo
IGlmIHNvbWUgY29uZGl0aW9uCi0gICAgLy8gaG9sZHMsIGFuZCB5b3Ugb25seSB3YW50IHRvIGV2
YWx1YXRlIHRoYXQgY29uZGl0aW9uIGFmdGVyIGZpcnN0IGNoZWNraW5nIHRoZSBiYXJyaWVyJ3MK
LSAgICAvLyBjb25kaXRpb24uIFVzdWFsbHksIHlvdSBqdXN0IHdhbnQgdG8gdXNlIGdldCgpLgot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCogZ2V0UHJlZGljYXRlZChj
b25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAotICAgIHsK
LSAgICAgICAgdm9pZCogcmVzdWx0ID0gbV92YWx1ZTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJlc3VsdCkgJiBzcGFjZUJpdHMpKSB7Ci0gICAgICAgICAg
ICBpZiAoZnVuY3RvcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBIZWFwOjpjb3B5QmFycmll
cihvd25lciwgbV92YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0KLSAgICAvLyBXaGVuIHdlIGFyZSBpbiB0aGUgY29uY3VycmVudCBjb3B5aW5nIHBoYXNl
LCB0aGlzIG1ldGhvZCBtYXkgbG9jayB0aGUgYmFycmllciBvYmplY3QgKGkuZS4gdGhlIGZpZWxk
Ci0gICAgLy8gcG9pbnRpbmcgdG8gY29waWVkIHNwYWNlKSBhbmQgY2FsbCBkaXJlY3RseSBpbnRv
IHRoZSBvd25pbmcgb2JqZWN0J3MgY29weUJhY2tpbmdTdG9yZSgpIG1ldGhvZC4KLSAgICB2b2lk
KiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
ZXRQcmVkaWNhdGVkKG93bmVyLCBbXSAoKSAtPiBib29sIHsgcmV0dXJuIHRydWU7IH0pOwotICAg
IH0KLQotICAgIENvcHlTdGF0ZSBjb3B5U3RhdGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PENvcHlTdGF0ZT4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV92YWx1
ZSkgJiBzcGFjZUJpdHMpOwotICAgIH0KLQotICAgIC8vIFRoaXMgb25seSB3b3JrcyB3aGVuIHlv
dSBrbm93IHRoYXQgdGhlcmUgaXMgbm9ib2R5IGVsc2UgY29uY3VycmVudGx5IG1lc3Npbmcgd2l0
aCB0aGlzIENvcHlCYXJyaWVyLgotICAgIC8vIFRoYXQncyBoYXJkIHRvIGd1YXJhbnRlZSwgdGhv
dWdoIHRoZXJlIGFyZSBhIGZldyB1bnVzdWFsIHBsYWNlcyB3aGVyZSB0aGlzIGVuZHMgdXAgYmVp
bmcgc2FmZS4KLSAgICAvLyBVc3VhbGx5IHlvdSB3YW50IHRvIHVzZSBDb3B5QmFycmllcjo6d2Vh
a0NBUygpLgotICAgIHZvaWQgc2V0Q29weVN0YXRlKENvcHlTdGF0ZSBjb3B5U3RhdGUpCi0gICAg
ewotICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB1aW50cHRyX3QgdmFs
dWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3ZhbHVlKTsKLSAgICAgICAgdmFsdWUgJj0g
fnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oc3BhY2VCaXRzKTsKLSAgICAgICAgdmFsdWUgfD0gc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihjb3B5U3RhdGUpOwotICAgICAgICBtX3ZhbHVlID0gYml0d2lz
ZV9jYXN0PHZvaWQqPih2YWx1ZSk7Ci0gICAgfQotCiAgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1
ZSA9IG51bGxwdHI7IH0KIAogcHJvdGVjdGVkOgpAQCAtMTMxLDE1ICs2Myw2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwogICAgIH0KIAotICAgIGJvb2wgd2Vh
a0NBU1dpdGhvdXRCYXJyaWVyKAotICAgICAgICB2b2lkKiBvbGRQb2ludGVyLCBDb3B5U3RhdGUg
b2xkQ29weVN0YXRlLCB2b2lkKiBuZXdQb2ludGVyLCBDb3B5U3RhdGUgbmV3Q29weVN0YXRlKQot
ICAgIHsKLSAgICAgICAgdWludHB0cl90IG9sZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4ob2xkUG9pbnRlcikgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG9sZENvcHlTdGF0ZSk7Ci0g
ICAgICAgIHVpbnRwdHJfdCBuZXdWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld1Bv
aW50ZXIpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihuZXdDb3B5U3RhdGUpOwotICAgICAgICBy
ZXR1cm4gV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAoCi0gICAgICAgICAgICAmbV92YWx1ZSwgYml0
d2lzZV9jYXN0PHZvaWQqPihvbGRWYWx1ZSksIGJpdHdpc2VfY2FzdDx2b2lkKj4obmV3VmFsdWUp
KTsKLSAgICB9Ci0KIHByaXZhdGU6CiAgICAgbXV0YWJsZSB2b2lkKiBtX3ZhbHVlOwogfTsKQEAg
LTE2MSwyMiArODQsMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBUKiBnZXRXaXRo
b3V0QmFycmllcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQq
PihDb3B5QmFycmllckJhc2U6OmdldFdpdGhvdXRCYXJyaWVyKCkpOwotICAgIH0KLSAgICAKLSAg
ICBUKiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKKyAgICBUKiBnZXQoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJCYXNlOjpn
ZXQob3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJC
YXNlOjpnZXQoKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAg
ICBUKiBnZXRQcmVkaWNhdGVkKGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5
QmFycmllckJhc2U6OmdldFByZWRpY2F0ZWQob3duZXIsIGZ1bmN0b3IpKTsKLSAgICB9Ci0gICAg
CiAgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6c2V0KHZtLCBvd25lciwgdmFsdWUpOwpAQCAt
MTg2LDExICs5OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6
c2V0V2l0aG91dEJhcnJpZXIodmFsdWUpOwogICAgIH0KLQotICAgIGJvb2wgd2Vha0NBU1dpdGhv
dXRCYXJyaWVyKFQqIG9sZFBvaW50ZXIsIENvcHlTdGF0ZSBvbGRDb3B5U3RhdGUsIFQqIG5ld1Bv
aW50ZXIsIENvcHlTdGF0ZSBuZXdDb3B5U3RhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gQ29w
eUJhcnJpZXJCYXNlOjp3ZWFrQ0FTV2l0aG91dEJhcnJpZXIob2xkUG9pbnRlciwgb2xkQ29weVN0
YXRlLCBuZXdQb2ludGVyLCBuZXdDb3B5U3RhdGUpOwotICAgIH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5
ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAx
MSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTA4MywxNiArMTA4Myw2IEBAIHZvaWQgSGVhcDo6YWRk
VG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFy
a1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogfQogCi12b2lkKiBIZWFwOjpjb3B5
QmFycmllcihjb25zdCBKU0NlbGwqLCB2b2lkKiYgcG9pbnRlcikKLXsKLSAgICAvLyBEbyBub3Ro
aW5nIGZvciBub3csIGV4Y2VwdCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBsb3cgYml0cyBhcmUgbWFz
a2VkIG9mZi4gVGhpcyBoZWxwcyB0bwotICAgIC8vIHNpbXVsYXRlIGVub3VnaCBvZiB0aGlzIGJh
cnJpZXIgdGhhdCBhdCBsZWFzdCB3ZSBjYW4gdGVzdCB0aGUgbG93IGJpdHMgYXNzdW1wdGlvbnMu
Ci0gICAgcG9pbnRlciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oCi0gICAgICAgIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ29weUJhcnJp
ZXJCYXNlOjpzcGFjZUJpdHMpKTsKLSAgICAKLSAgICByZXR1cm4gcG9pbnRlcjsKLX0KLQogdm9p
ZCBIZWFwOjpjb2xsZWN0QW5kU3dlZXAoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKIHsK
ICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTEyLDggKzExMiw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICB2b2lk
IHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkKiBjb3B5QmFycmllcihjb25zdCBKU0NlbGwqIG93bmVyLCB2b2lk
KiYgY29waWVkU3BhY2VQb2ludGVyKTsKLQogICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVC
YXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAgICB2b2lk
IGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OCwxNyArMTQ4LDYgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5
SGVscGVyczo6YgogICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVkQXJyYXkpKTsKIH0KIAot
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6bG9hZFR5cGVkQXJyYXlWZWN0
b3IoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlQoYmFzZUdQUiAhPSByZXN1bHRHUFIpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHJlc3VsdEdQUik7Ci0g
ICAgSnVtcCBvayA9IGJyYW5jaElmVG9TcGFjZShyZXN1bHRHUFIpOwotICAgIEp1bXAgcmVzdWx0
ID0gYnJhbmNoSWZGYXN0VHlwZWRBcnJheShiYXNlR1BSKTsKLSAgICBvay5saW5rKHRoaXMpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4o
RlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hE
b3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODIy
LDI4ICs4MjIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaElm
VG9TcGFjZShHUFJSZWcgc3RvcmFnZUdQUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBicmFuY2hU
ZXN0MzIoWmVybywgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKENvcHlCYXJyaWVyQmFzZTo6c3Bh
Y2VCaXRzKSk7Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2hJZk5vdFRvU3BhY2UoR1BSUmVnIHN0
b3JhZ2VHUFIpCi0gICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKE5vblplcm8sIHN0
b3JhZ2VHUFIsIFRydXN0ZWRJbW0zMihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpOwotICAg
IH0KLQotICAgIHZvaWQgcmVtb3ZlU3BhY2VCaXRzKEdQUlJlZyBzdG9yYWdlR1BSKQotICAgIHsK
LSAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIofnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ29w
eUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKSwgc3RvcmFnZUdQUik7Ci0gICAgfQotCiAgICAgSnVt
cCBicmFuY2hJZkZhc3RUeXBlZEFycmF5KEdQUlJlZyBiYXNlR1BSKTsKICAgICBKdW1wIGJyYW5j
aElmTm90RmFzdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2VHUFIpOwogCi0gICAgLy8gUmV0dXJucyBh
IGp1bXAgdG8gc2xvdyBwYXRoIGZvciB3aGVuIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGUgYmFycmll
ci4gTm90ZSB0aGF0IGJhc2VHUFIgYW5kCi0gICAgLy8gcmVzdWx0R1BSIG11c3QgYmUgZGlmZmVy
ZW50LgotICAgIEp1bXAgbG9hZFR5cGVkQXJyYXlWZWN0b3IoR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIpOwotICAgIAogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3JCeXRlT2Zm
c2V0KHB0cmRpZmZfdCBieXRlT2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGJ5dGVPZmZzZXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZy
YW1lKCk7CiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlT2Zm
c2V0OwotICAgICAgICAKKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgICAgIERF
RklORV9TTE9XX09QKGRlbF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XX09QKGluKQpAQCAt
NTA5LDYgKzUwOSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgZGF0YUxvZygiQ29tcGlsaW5nOlxuIik7Cisg
ICAgbV9jb2RlQmxvY2stPmR1bXBCeXRlY29kZSgpOworCiAgICAgbV9jb2RlQmxvY2stPnNldENh
bGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOyAvLyBNaWdodCBiZSBhYmxlIHRvIHJlbW92ZSBhcyB0aGlzIGlzIHByb2JhYmx5
IGFscmVhZHkgc2V0IHRvIHRoaXMgdmFsdWUuCiAKICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3
ZSBoYXZlIHRoZSBtb3N0IHVwIHRvIGRhdGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIHBlcmZvcm1p
bmcgdHlwZWNoZWNrIG9wdGltaXphdGlvbnMgZm9yIG9wX3Byb2ZpbGVfdHlwZS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9u
IDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE5Niw3ICsxMTk2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShJbnN0cgogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5l
CiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QwKSk7CiAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDIpOwogICAgIG5lZzMyKHJlZ1QyKTsKICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTIxMyw3ICsxMjEyLDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUoSQogICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyLCBiYXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU5LDcgKzExNTksNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVyCiAgICAgCiAgICAgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gcmVhZCBiYXJyaWVyCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3Ro
IGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQogICAgIApAQCAt
MTIwMyw3ICsxMjAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0
cgogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUb1NwYWNl
KHJlZ1QwKSk7CiAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwogICAgIG5lZzMyKHJl
Z1QxKTsKICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwpAQCAtMTIyMCw3ICsx
MjE4LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUoSQogICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjUsNyArMTY1LDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVMb2FkKEluc3Ry
dQogICAgIAogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihEb3VibGVTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hE
b3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMCkpOwpAQCAt
MTc5LDcgKzE3OCw2IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0xvYWQoSW4K
ICAgICAKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFRpbWVzRWlnaHQpLCByZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0NjQo
WmVybywgcmVnVDApKTsKQEAgLTE5NSw3ICsxOTMsNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEFycmF5U3RvcmFnZUxvYWQoCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKEFib3Zl
LCByZWdUMywgVHJ1c3RlZEltbTMyKFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3Rv
cmFnZVNoYXBlKSk7CiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
VG9TcGFjZShyZWdUMikpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKIAogICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOwpAQCAtMjU0LDcgKzI1MSw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBub3RTdHJp
bmcubGluayh0aGlzKTsKICAgICBub25DZWxsLmxpbmsodGhpcyk7CiAgICAgCi0gICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyByZWFkIGJhcnJpZXIKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZh
bHVlCiAgICAgCkBAIC0zMjcsNyArMzIzLDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5l
cmljQ29udGlndW91cwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwg
cmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7CiAgICAgCiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIpKTsKICAgICBKdW1wIG91
dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICBMYWJlbCBzdG9yZVJl
c3VsdCA9IGxhYmVsKCk7CkBAIC0zODMsNyArMzc4LDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRBcnJheVN0b3JhZ2VQdXRCeQogICAgIAogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gz
MihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgSnVt
cCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKQEAg
LTQ1NCw3ICs0NDgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVj
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKICAgICAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gb3V0IG9mIGJvdW5kcwogICAgIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJy
YXlNb2RlKHByb2ZpbGUpOwpAQCAtNzg2LDcgKzc3OSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKEluc3RydWMKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKICAgICAgICAgICAgIG5lZzMyKG9m
ZnNldCk7CiAgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CiAg
ICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVz
dWx0KTsKQEAgLTg2NiwxMCArODU4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKElucwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykgeworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0
eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFkIHN0cnVjdHVyZQotICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgotICAgIH0KIAogICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVmFy
IGluamVjdGlvbnMgY2hlY2suCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKQEAgLTg3OCw3
ICs4NjgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zCiAgICAg
ICAgIC8vIEdsb2JhbFByb3BlcnR5L0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cwogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2sKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyByZWFkIGJhcnJpZXIKICAgICAg
ICAgLy8gR2xvYmFsTGV4aWNhbFZhcgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFRE
WiBjaGVjay4KICAgICAgICAgLy8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MuCkBAIC05MzIsNyArOTIxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VG9TcGFjZShyZWdUMCkpOwogICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5k
U2xvdCwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKICAgICAgICAgICAgIHN0
b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKQEAgLTEwMjYs
MTcgKzEwMTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cgog
ICAgICAgICAgfHwgcmVzb2x2ZVR5cGUgPT0gTG9jYWxDbG9zdXJlVmFyKQogICAgICAgICAmJiBj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9IElzSW52YWxp
ZGF0ZWQpCiAgICAgICAgIGxpbmtDb3VudCsrOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpIHsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICBsaW5rQ291bnQrKzsgLy8gYmFkIHN0cnVjdHVyZQotICAgICAgICBsaW5rQ291bnQrKzsgLy8g
cmVhZCBiYXJyaWVyCi0gICAgfQogICAgIGlmIChnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpICE9IEluaXRpYWxpemF0aW9uICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSkgLy8gVERaIGNoZWNrLgogICAgICAgICBsaW5rQ291bnQrKzsKICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgLy8gR2xvYmFsUHJvcGVydHkv
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uc0NoZWNrCiAgICAgICAgIGxpbmtDb3VudCsr
OyAvLyBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjawogICAgICAgICBsaW5rQ291bnQrKzsgLy8g
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sKLSAgICAgICAgbGlua0NvdW50Kys7IC8vIHJlYWQg
YmFycmllcgogCiAgICAgICAgIC8vIEdsb2JhbExleGljYWxWYXIKICAgICAgICAgYm9vbCBuZWVk
c1REWkNoZWNrID0gZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSAhPSBJbml0aWFsaXph
dGlvbjsKQEAgLTE0NTQsNyArMTQzOSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheUdldEIKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90
RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkp
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHks
IEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBzY3JhdGNoKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZl
Y3RvcigpKSwgc2NyYXRjaCk7CiAgICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkg
ewogICAgIGNhc2UgMToKQEAgLTE1MjUsNyArMTUxMCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3Ro
KCkpKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBz
Y3JhdGNoKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7CiAgICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKQEAgLTE1OTIsNyArMTU3Nyw3IEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBXZSB3b3VsZCBiZSBs
b2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBz
bG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAg
IHNsb3dDYXNlcy5hcHBlbmQobG9hZFR5cGVkQXJyYXlWZWN0b3IoYmFzZSwgbGF0ZVNjcmF0Y2gp
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCiAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkg
ewogICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CkBAIC0xNjc3LDcgKzE2
NjIsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgCiAg
ICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFs
LCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBi
ZSB1bmNsb2JiZXJlZC4KLSAgICBzbG93Q2FzZXMuYXBwZW5kKGxvYWRUeXBlZEFycmF5VmVjdG9y
KGJhc2UsIGxhdGVTY3JhdGNoKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAgIAogICAgIHN3
aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTExNzYsMTAgKzExNzYsOSBAQCBf
bGxpbnRfb3BfaXNfb2JqZWN0OgogICAgIGRpc3BhdGNoKDMpCiAKIAotbWFjcm8gbG9hZFByb3Bl
cnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdl
LCB2YWx1ZSwgc2xvdykKK21hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVy
dHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0
eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCiAgICAgbG9hZHAg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdl
Ci0gICAgY29weUJhcnJpZXIob2JqZWN0QW5kU3RvcmFnZSwgc2xvdykKICAgICBuZWdpIHByb3Bl
cnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9m
ZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpAQCAtMTE5MCwxMCArMTE4OSw5IEBAIG1hY3JvIGxv
YWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGUKIGVuZAogCiAKLW1hY3JvIHN0b3JlUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3Jh
Z2UsIHZhbHVlLCBzbG93KQorbWFjcm8gc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJv
cGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9w
ZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCiAgICAgbG9h
ZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9y
YWdlCi0gICAgY29weUJhcnJpZXIob2JqZWN0QW5kU3RvcmFnZSwgc2xvdykKICAgICBuZWdpIHBy
b3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0
eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpAQCAtMTIxMiw3ICsxMjEwLDcgQEAgX2xsaW50
X29wX2dldF9ieV9pZDoKICAgICBiaW5lcSB0MiwgdDEsIC5vcEdldEJ5SWRTbG93CiAgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDUsIHQxKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0
MikKLSAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDAsIC5vcEdldEJ5
SWRTbG93KQorICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQzLCB0MCkKICAg
ICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQogICAgIHZhbHVlUHJvZmlsZSh0MCwgOCwgdDEpCiAg
ICAgZGlzcGF0Y2goOSkKQEAgLTEyMzMsNyArMTIzMSw2IEBAIF9sbGludF9vcF9nZXRfYXJyYXlf
bGVuZ3RoOgogICAgIGJ0aXogdDIsIEluZGV4aW5nU2hhcGVNYXNrLCAub3BHZXRBcnJheUxlbmd0
aFNsb3cKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCiAgICAgbG9hZHAgSlNPYmpl
Y3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKLSAgICBjb3B5QmFycmllcih0MCwgLm9wR2V0QXJyYXlM
ZW5ndGhTbG93KQogICAgIGxvYWRpIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIHQwCiAgICAgYmlsdCB0MCwgMCwgLm9w
R2V0QXJyYXlMZW5ndGhTbG93CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCkBAIC0xMzc3LDcg
KzEzNzQsNyBAQCBfbGxpbnRfb3BfcHV0X2J5X2lkOgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigzLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKICAgICBsb2FkaXNG
cm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCi0gICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQo
dDEsIHQwLCB0MiwgLm9wUHV0QnlJZFNsb3cpCisgICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVP
ZmZzZXQodDEsIHQwLCB0MikKICAgICBkaXNwYXRjaCg5KQogCiAub3BQdXRCeUlkU2xvdzoKQEAg
LTEzOTYsNyArMTM5Myw2IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBzeGkycSB0MSwg
dDEKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MwotICAgIGNvcHlCYXJy
aWVyKHQzLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgYW5kaSBJbmRleGluZ1NoYXBlTWFzaywgdDIK
ICAgICBiaWVxIHQyLCBJbnQzMlNoYXBlLCAub3BHZXRCeVZhbElzQ29udGlndW91cwogICAgIGJp
bmVxIHQyLCBDb250aWd1b3VzU2hhcGUsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cwpAQCAtMTQ2
Nyw3ICsxNDYzLDYgQEAgbWFjcm8gcHV0QnlWYWwoc2xvd1BhdGgpCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZUludDMyKHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQogICAgIHN4aTJxIHQzLCB0
MwogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgY29weUJhcnJp
ZXIodDAsIC5vcFB1dEJ5VmFsU2xvdykKICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0Mgog
ICAgIGJpbmVxIHQyLCBJbnQzMlNoYXBlLCAub3BQdXRCeVZhbE5vdEludDMyCiAgICAgY29udGln
dW91c1B1dEJ5VmFsKApAQCAtMTk4OCw5ICsxOTgzLDkgQEAgbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhvcGVyYW5kLCBzbAogICAgIGJwbmVxIHQyLCB0MSwgc2xvd1BhdGgKIGVuZAogCi1t
YWNybyBnZXRQcm9wZXJ0eShzbG93KQorbWFjcm8gZ2V0UHJvcGVydHkoKQogICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQx
LCB0MCwgdDIsIHNsb3cpCisgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAs
IHQyKQogICAgIHZhbHVlUHJvZmlsZSh0MiwgNywgdDApCiAgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDEsIHQwKQogICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCkBAIC0yMDIxLDcgKzIwMTYs
NyBAQCBfbGxpbnRfb3BfZ2V0X2Zyb21fc2NvcGU6CiAjZ0dsb2JhbFByb3BlcnR5OgogICAgIGJp
bmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLmdHbG9iYWxWYXIKICAgICBsb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKDIsIC5nRHluYW1pYykKLSAgICBnZXRQcm9wZXJ0eSguZ0R5bmFtaWMpCisgICAgZ2V0
UHJvcGVydHkoKQogICAgIGRpc3BhdGNoKDgpCiAKIC5nR2xvYmFsVmFyOgpAQCAtMjA0Niw3ICsy
MDQxLDcgQEAgX2xsaW50X29wX2dldF9mcm9tX3Njb3BlOgogLmdHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcywgLmdHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgbG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjaygyLCAuZ0R5bmFtaWMpCi0gICAgZ2V0UHJvcGVydHkoLmdEeW5h
bWljKQorICAgIGdldFByb3BlcnR5KCkKICAgICBkaXNwYXRjaCg4KQogCiAuZ0dsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CkBAIC0yMDc2LDExICsyMDcxLDExIEBAIF9sbGludF9vcF9n
ZXRfZnJvbV9zY29wZToKICAgICBkaXNwYXRjaCg4KQogCiAKLW1hY3JvIHB1dFByb3BlcnR5KHNs
b3cpCittYWNybyBwdXRQcm9wZXJ0eSgpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQx
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbig2LCB0MSkKLSAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAs
IHQyLCBzbG93KQorICAgIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIp
CiBlbmQKIAogbWFjcm8gcHV0R2xvYmFsVmFyaWFibGUoKQpAQCAtMjEzOCw3ICsyMTMzLDcgQEAg
X2xsaW50X29wX3B1dF90b19zY29wZToKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHksIC5w
R2xvYmFsVmFyCiAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcygxLCAzKQogICAgIGxvYWRXaXRo
U3RydWN0dXJlQ2hlY2soMSwgLnBEeW5hbWljKQotICAgIHB1dFByb3BlcnR5KC5wRHluYW1pYykK
KyAgICBwdXRQcm9wZXJ0eSgpCiAgICAgZGlzcGF0Y2goNykKIAogLnBHbG9iYWxWYXI6CkBAIC0y
MTY1LDcgKzIxNjAsNyBAQCBfbGxpbnRfb3BfcHV0X3RvX3Njb3BlOgogICAgIGJpbmVxIHQwLCBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5wR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcwogICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoMSwgMykKICAgICBsb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKDEsIC5wRHluYW1pYykKLSAgICBwdXRQcm9wZXJ0eSgucER5bmFt
aWMpCisgICAgcHV0UHJvcGVydHkoKQogICAgIGRpc3BhdGNoKDcpCiAKIC5wR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5ODE1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjIxLDggKzIyMSw2IEBAIGNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2Jq
ZWN0ID0gMHgzOAogY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHg0
MAogY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQ4CiAKLWNvbnN0IENvcHlCYXJy
aWVyU3BhY2VCaXRzID0gMwotCiBjb25zdCBDYWxsT3BDb2RlU2l6ZSA9IDkKIAogaWYgWDg2XzY0
IG9yIEFSTTY0IG9yIENfTE9PUApAQCAtNjYxLDEwICs2NTksNiBAQCBtYWNybyBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwoZGVzCiAgICAgZW5kCiBlbmQKIAotbWFjcm8gY29weUJhcnJp
ZXIodmFsdWUsIHNsb3cpCi0gICAgYnRwbnogdmFsdWUsIENvcHlCYXJyaWVyU3BhY2VCaXRzLCBz
bG93Ci1lbmQKLQogbWFjcm8gZnVuY3Rpb25Qcm9sb2d1ZSgpCiAgICAgaWYgWDg2IG9yIFg4Nl9X
SU4gb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KICAgICAgICAgcHVzaCBjZnIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2
aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBEaXJlY3RBcmd1
bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIGlmICh0aGlzT2JqZWN0LT5tX292ZXJyaWRl
cykgewogICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcigKICAgICAgICAgICAgIHRoaXNPYmplY3Qs
IERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbiwKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fb3ZlcnJpZGVzLmdldFdpdGhvdXRCYXJyaWVyKCksIHRoaXNPYmplY3QtPm92ZXJyaWRl
c1NpemUoKSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKSwgdGhp
c09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKTsKICAgICB9CiB9CiAKQEAgLTExNSw3ICsxMTUsNyBA
QCB2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weUJhY2tpbmdTdG9yZShKCiAgICAgCiAgICAgUkVM
RUFTRV9BU1NFUlQodG9rZW4gPT0gRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuKTsK
ICAgICAKLSAgICB2b2lkKiBvbGRPdmVycmlkZXMgPSB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5n
ZXRXaXRob3V0QmFycmllcigpOworICAgIHZvaWQqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3Qt
Pm1fb3ZlcnJpZGVzLmdldCgpOwogICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG9s
ZE92ZXJyaWRlcykpIHsKICAgICAgICAgYm9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8
Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXpl
KCkpKTsKICAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRlcywgb2xkT3ZlcnJpZGVzLCB0aGlzT2Jq
ZWN0LT5tX2xlbmd0aCk7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6
Om92ZXJyaWRlVGhpbmdzSWZOZQogdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlQXJndW1l
bnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBvdmVycmlkZVRoaW5nc0lmTmVjZXNz
YXJ5KHZtKTsKLSAgICBtX292ZXJyaWRlcy5nZXQodGhpcylbaW5kZXhdID0gdHJ1ZTsKKyAgICBt
X292ZXJyaWRlcy5nZXQoKVtpbmRleF0gPSB0cnVlOwogfQogCiB2b2lkIERpcmVjdEFyZ3VtZW50
czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlz
aW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdl
dCh0aGlzKVtpXSk7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX292ZXJyaWRl
cyB8fCAhbV9vdmVycmlkZXMuZ2V0KClbaV0pOwogICAgIH0KIAogICAgIGJvb2wgY2FuQWNjZXNz
QXJndW1lbnRJbmRleFF1aWNrbHlJbkRGRyh1aW50MzJfdCBpKSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAo
QykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAoQykgMjAw
NiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtMzkxLDcgKzM5MSw3
IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKIAogYm9vbCBKU0Fy
cmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wg
dGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
KTsKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgog
ICAgICAgICBpZiAoIW5ld0xlbmd0aCkKQEAgLTQ1Miw3ICs0NTIsNyBAQCBib29sIEpTQXJyYXk6
OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwog
ICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6
CkBAIC01NDksNyArNTQ5LDcgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVj
KQogLy8gIC0gcHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUg
cHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgY2FzZSBBcnJheUNsYXNzOiB7CkBAIC03MDEsOSArNzAxLDkgQEAgSlNBcnJheSogSlNBcnJh
eTo6ZmFzdFNsaWNlKEV4ZWNTdGF0ZSYgZQogCiAgICAgICAgIGF1dG8mIHJlc3VsdEJ1dHRlcmZs
eSA9ICpyZXN1bHRBcnJheS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChhcnJheVR5cGUgPT0g
QXJyYXlXaXRoRG91YmxlKQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250
aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNE
b3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7Cisg
ICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRh
KCksIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJ
bmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1Zh
bHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGln
dW91cygpLmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBz
dGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CiAgICAgICAgIHJlc3VsdEJ1dHRl
cmZseS5zZXRQdWJsaWNMZW5ndGgoY291bnQpOwogCiAgICAgICAgIHJldHVybiByZXN1bHRBcnJh
eTsKQEAgLTcyMCw4ICs3MjAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0
V2l0aChFCiAgICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIEFTU0VSVChuZXdBcnJheVR5cGUg
PT0gZmFzdENvbmNhdFR5cGUodm0sICp0aGlzLCBvdGhlckFycmF5KSk7CiAKLSAgICB1bnNpZ25l
ZCB0aGlzQXJyYXlTaXplID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsK
LSAgICB1bnNpZ25lZCBvdGhlckFycmF5U2l6ZSA9IG90aGVyQXJyYXkubV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB0aGlzQXJyYXlTaXplID0gbV9i
dXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIG90aGVyQXJyYXlT
aXplID0gb3RoZXJBcnJheS5tX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CiAgICAg
QVNTRVJUKHRoaXNBcnJheVNpemUgKyBvdGhlckFycmF5U2l6ZSA8IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVgpOwogCiAgICAgU3RydWN0dXJlKiByZXN1bHRTdHJ1Y3R1cmUgPSBleGVjLmxleGljYWxH
bG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKG5ld0FycmF5VHlwZSk7CkBAIC03MzMsMTEgKzczMywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAgYXV0byYgb3RoZXJCdXR0ZXJmbHkgPSAqb3Ro
ZXJBcnJheS5idXR0ZXJmbHkoKTsKICAgICBpZiAobmV3QXJyYXlUeXBlID09IEFycmF5V2l0aERv
dWJsZSkgewogICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3Vz
RG91YmxlKCkuZGF0YSgpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNB
cnJheVNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5nZXQoKS0+Y29u
dGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogdGhpc0FycmF5U2l6ZSk7
CiAgICAgICAgIG1lbWNweShidWZmZXIgKyB0aGlzQXJyYXlTaXplLCBvdGhlckJ1dHRlcmZseS5j
b250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBvdGhlckFycmF5U2l6
ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBidWZmZXIgPSByZXN1bHRCdXR0ZXJmbHku
Y29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzQXJy
YXlTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRp
Z3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUpOwogICAgICAg
ICBtZW1jcHkoYnVmZmVyICsgdGhpc0FycmF5U2l6ZSwgb3RoZXJCdXR0ZXJmbHkuY29udGlndW91
cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNpemUpOwogICAgIH0KIApA
QCAtODEwLDcgKzgxMCw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRoZSBpbmRleCBiaWFzLiBX
ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUgY2hhbmdpbmcKICAgICAg
ICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5lZWRzIHRvIHBvaW50IGF0
IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAgICAgICAgIC8vIHBvcnRp
b24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyktPnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnNoaWZ0KHN0cnVjdHVyZSgpLCBj
b3VudCk7CiAgICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKGJ1dHRlcmZseSk7
CiAgICAgICAgIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBz
dG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKQEAgLTg1NSw3ICs4NTUsNyBAQCBib29sIEpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA+IDApOwogCi0gICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7
CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtOTk0LDcgKzk5NCw3IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKIAogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRX
aXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQpCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
KTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNs
YXNzOgpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRo
QW55SW5kZXhpbgogICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgp
KSk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwgb2xkTGVuZ3Ro
ICsgY291bnQpOwotICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7Cisg
ICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogCiAgICAgICAgIC8vIFdlIGhh
dmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhpbmdzIGFyb3Vu
ZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0
aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJheVN0b3JhZ2Ug
bW9kZS4KQEAgLTEwNDUsNyArMTA0NSw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0
aEFueUluZGV4aW4KICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0o
KSkpOwogICAgICAgICAKICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0
aCArIGNvdW50KTsKLSAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwor
ICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgCiAgICAgICAg
IC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhp
bmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJv
dWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJh
eVN0b3JhZ2UgbW9kZS4KQEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFy
Z0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CiAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNl
IEFycmF5Q2xhc3M6CkBAIC0xMTU1LDcgKzExNTUsNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0Fy
Z3VtZW50cyhFeGVjU3RhdGUqCiAgICAgLy8gRklYTUU6IFdoYXQgcHJldmVudHMgdGhpcyBmcm9t
IGJlaW5nIGNhbGxlZCB3aXRoIGEgUnVudGltZUFycmF5PyBUaGUgbGVuZ3RoIGZ1bmN0aW9uIHdp
bGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4KICAgICBBU1NFUlQobGVuZ3RoID09IHRo
aXMtPmxlbmd0aCgpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7
CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFz
czoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcg
KzIxMyw3IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCoKICAgICBK
U0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJW
aWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5
cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID09IFdhc3RlZnVsVHlwZWRBcnJheSk7CiAg
ICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCi0gICAgICAg
IGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVyKCkpOworICAg
ICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQs
MTQgKzE2NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiBoYXNB
cnJheUJ1ZmZlcigpICYmICF2ZWN0b3IoKTsgfQogICAgIHZvaWQgbmV1dGVyKCk7CiAgICAgCi0g
ICAgdm9pZCogdmVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZlY3Rvci5nZXRQcmVk
aWNhdGVkKAotICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgIFt0aGlzXSAoKSAtPiBib29s
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbW9kZSgpID09IEZhc3RUeXBlZEFycmF5OwotICAg
ICAgICAgICAgfSk7Ci0gICAgfQorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9y
LmdldCgpOyB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyMiw3ICs0MjIsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
Ojp2CiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKICAgICBjYXNlIEZhc3RUeXBl
ZEFycmF5OiB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX3ZlY3RvcikKLSAgICAgICAgICAg
IHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4s
IHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVyKCksIHRoaXNPYmplY3QtPmJ5
dGVTaXplKCkpOworICAgICAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlw
ZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KCksIHRoaXNP
YmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAt
NDQ5LDcgKzQ0OSw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmMK
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwogICAgIAogICAgIGlmICh0b2tlbiA9PSBUeXBlZEFy
cmF5VmVjdG9yQ29weVRva2VuCi0gICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHko
dGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSkpIHsKKyAgICAgICAgJiYg
dmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSkpIHsK
ICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKICAgICAgICAgdm9pZCogb2xk
VmVjdG9yID0gdGhpc09iamVjdC0+dmVjdG9yKCk7CiAgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9
IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE5
ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5LmdldFdpdGhvdXRCYXJyaWVyKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKICAgICBpZiAoYnV0dGVyZmx5KQogICAg
ICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNP
YmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKIApAQCAtMjMzLDcgKzIzMyw3IEBAIHZv
aWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiAKICAgICBpZiAodG9rZW4gIT0g
QnV0dGVyZmx5Q29weVRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXRXaXRob3V0QmFycmllcigp
OworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgaWYgKGJ1dHRlcmZseSkKICAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZs
eSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVT
aXplKCkpOwogfQpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSlNPYmplY3Q6OmhlYXBTbmFwc2hv
dChKU0NlbGwqIGNlbGwKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kUHJvcGVydHlOYW1lRWRn
ZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBlbnRyeS5rZXkpOwogICAgIH0KIAotICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91
dEJhcnJpZXIoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LmdldCgpOwogICAgIGlmIChidXR0ZXJmbHkpIHsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBkYXRhOwogICAgICAgICB1aW50MzJfdCBjb3VudCA9IDA7CkBAIC0zODksNyAr
Mzg5LDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewot
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5n
ZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKQEAgLTU0OCw3ICs1NDgsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0
KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTU3MCw3ICs1NzAsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0
KHRoaXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOwogICAg
ICAgICAKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjUyLDcgKzY1Miw3IEBAIHZvaWQgSlNPYmplY3Q6
OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW8KICAgICAgICAgICAgIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBzdG9yYWdlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCkpOworICAg
ICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4
aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC02ODIsNyArNjgyLDcgQEAgQnV0dGVyZmx5
KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpKTsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5n
dGgsIEJBU0VfVkVDVE9SX0xFTik7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCh0
aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgZmFsc2UsIDAsCisgICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2bSwgdGhpcywgc3Ry
dWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAg
ICAgICAgZWxlbWVudFNpemUgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgo
dmVjdG9yTGVuZ3RoKTsKQEAgLTczNCw3ICs3MzQsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5
cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhv
bGRUeXBlKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0
ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKSwgdm0sIHRo
aXMsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwK
KyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHkp
OwogCkBAIC03NTgsMzIgKzc1OCwzMiBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNv
bnZlcnRVbmRlCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwog
ICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlSW50MzIpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT5jb250aWd1b3VzSW50MzIoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0
KCktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCiBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNp
ZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
IGktLTspCiAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsK
ICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0
ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKICAgICBB
U1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgc2V0U3RydWN0dXJlKHZt
LCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgQWxs
b2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29u
dGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwog
fQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3Jh
Z2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKFZNJiB2bSwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQog
ewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICB1
bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0
aCgpOworICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgpLT5wdWJs
aWNMZW5ndGgoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lU2l6ZSgpOwogICAgIApAQCAtNzkyLDcgKzc5Miw3IEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICAKICAgICBtZW1jcHkoCiAgICAgICAg
IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCi0gICAgICAg
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUs
CisgICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
U2l6ZSwKICAgICAgICAgcHJvcGVydHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAg
ICAgCiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKQEAgLTgxMCw3ICs4MTAsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVCho
YXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgLy8gTm8gbmVlZCB0byBj
b3B5IGVsZW1lbnRzLgogICAgIApAQCAtODI4LDcgKzgyOCw3IEBAIENvbnRpZ3VvdXNEb3VibGVz
IEpTT2JqZWN0Ojpjb252ZXJ0SW50MzIKIHsKICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdU
eXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgewogICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1
b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNEb3VibGUgPSBiaXR3aXNl
X2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CkBAIC04NDIsNyArODQyLDcgQEAgQ29udGlndW91c0Rv
dWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgIH0KICAgICAKICAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNv
bnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJUb0NvbnRpZ3VvdXMoVk0mIHZtKQpAQCAtODUwLDcgKzg1MCw3IEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y29udmVydEludDMKICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdU
eXBlKCkpKTsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAg
ICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7CisgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24pCkBAIC04NTgsOSArODU4LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydEludDMyVG9BcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwog
ICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3Rv
cmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAodikgewpAQCAt
ODg0LDcgKzg4NCw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWIK
IHsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKICAgICAgICAgZG91YmxlKiBjdXJyZW50ID0g
JmJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRBc1ZhbHVlID0gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KGN1cnJlbnQpOwpAQCAtODk4LDcgKzg5OCw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydERvdWIKICAgICB9CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgQWxsb2Nh
dGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGln
dW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpOwogfQog
CiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0m
IHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTkwNiw5ICs5MDYsOSBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKTsK
IAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVj
dG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0
KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0
cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rv
ckxlbmd0aCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7
CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
OwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKQEAgLTkzMyw5ICs5MzMsOSBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSk7CiAK
LSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rv
ckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCgp
LT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1
Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JM
ZW5ndGgpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
OworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgewog
ICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAg
ICAgICAgaWYgKHYpIHsKQEAgLTEwMDIsOCArMTAwMiw4IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMkZvclZhbHVlKFZNJiAKIAogdm9pZCBKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9V
bmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBB
U1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpKTsKLSAg
ICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCkpOwor
ICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSk7CiAg
ICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgc2V0SW5kZXhRdWlj
a2x5KHZtLCBpbmRleCwgdmFsdWUpOwogfQpAQCAtMTE3MSw3ICsxMTcxLDcgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogICAgICAgICByZXR1cm4gZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRl
cmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1
dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKICAgICBkZWZhdWx0Ogog
ICAgICAgICBDUkFTSCgpOwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoaSA8IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwpAQCAtMTcxNyw3ICsxNzE3LDcg
QEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRl
cmZseS5nZXQob2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7
CkBAIC0xODkwLDcgKzE4OTAsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdl
dHRlclByCiBib29sIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4
ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBhdXRvIG1hcCA9IG1f
YnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAKICAg
ICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKGRlc2Ny
aXB0b3IudmFsdWUoKSkKQEAgLTE5NTAsNyArMTk1MCw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmlu
ZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiAo
UmVhZE9ubHkgfCBBY2Nlc3NvcikpCiAgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNj
ZXNzb3JzKGV4ZWMtPnZtKCkpOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7Cisg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwogCiAg
ICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCkBA
IC0xOTgyLDcgKzE5ODIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoCiAgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CiAKICAgICAgICAgcHV0SW5k
ZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwot
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAg
aWYgKGluZGV4ID49IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQogICAgICAg
ICAgICAgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjExMSw3ICsyMTExLDcgQEAgYm9vbCBKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIEFTU0VSVCgoaW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzaykgPT0gaW5kZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJUKCFpbmRleGlu
Z1Nob3VsZEJlU3BhcnNlKCkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKTsKICAgICAKICAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRo
ZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBncmVhdGVyIHRoYW4KICAgICAv
LyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KQEAgLTIxMzIsNyArMjEzMiw3IEBAIGJv
b2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICB9CiAKICAgICBlbnN1
cmVMZW5ndGgodm0sIGkgKyAxKTsKLSAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyk7CisgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAKICAgICBSRUxFQVNFX0FT
U0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgc3dpdGNoIChpbmRleGlu
Z1NoYXBlKSB7CkBAIC0yNDE1LDcgKzI0MTUsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8
IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKHZtKSk7CiAg
ICAgICAgIH0KQEAgLTI0MjksNyArMjQyOSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8
IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSkpOwog
ICAgICAgICB9CkBAIC0yNDQ4LDcgKzI0NDgsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChp
IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlm
IChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSh2bSkpOwogICAgICAgICB9CkBAIC0yNDU4LDcgKzI0NTgsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYg
KGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhp
c3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAt
MjU0NCw4ICsyNTQ0LDggQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3
VgogICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICAKICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRp
ZXMoaW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJm
bHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZlY3Rvckxl
bmd0aCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7CkBAIC0yNjUxLDcgKzI2NTEsNyBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKIHZvaWQgSlNPYmplY3Q6OmVu
c3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFY
X0FSUkFZX0lOREVYKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkg
fHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkg
fHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CkBAIC0yNjgxLDExICsyNjgxLDExIEBA
IHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKICAgICBBU1NFUlQobGVu
Z3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkp
IHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkp
IHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgIEFTU0VSVChtX2J1dHRlcmZs
eS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpID4gbGVuZ3RoKTsKLSAgICBBU1NFUlQoIW1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJl
KCkpKTsKKyAgICBBU1NFUlQobV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpID4gbGVu
Z3RoKTsKKyAgICBBU1NFUlQoIW1fYnV0dGVyZmx5LmdldCgpLT5pbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOwogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5y
ZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihsZW5ndGgpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihsZW5ndGgpKTsKICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRl
cmZseSk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKICAgICBu
ZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwpAQCAtMjY5OCw3ICsyNjk4LDcg
QEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZwogICAgIC8vIEl0J3Mg
aW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9y
IHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVh
ZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgogCi0gICAgcmV0dXJuIEJ1dHRlcmZs
eTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKG1fYnV0dGVyZmx5LmdldCh0aGlzKSwgdm0s
IHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOworICAgIHJldHVybiBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1dHRlcmZseS5nZXQoKSwgdm0s
IHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBzdGF0aWMgSlNC
b3VuZFNsb3RCYXNlRnVuY3Rpb24qIGdldEJvdW5kU2xvdEJhc2VGdW5jdGlvbkZvckdldHRlclNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90JiBzbG90LCBDdXN0b21HZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgSlNCb3Vu
ZFNsb3RCYXNlRnVuY3Rpb246OlR5cGUgdHlwZSkKQEAgLTMwNTEsNyArMzA1MSw3IEBAIHVpbnQz
Ml90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEUKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQob2JqZWN0KS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0
ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFy
c2VNYXAuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE5ODE1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2MiwxNCArMTYyLDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5k
ZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOworICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0KICAg
ICAgICAgCiAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIGlm
ICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0
aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOwog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBwdXRJbmxpbmUoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTIxNCw3ICsy
MTQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJ
TkdfVFlQRVM6CkBAIC0yNDAsNyArMjQwLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBKU1Zh
bHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCkuYXNJ
bnQzMigpKTsKQEAgLTI1OCw3ICsyNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIEpTVmFs
dWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewotICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgpAQCAtMzEyLDcgKzMx
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5z
aWduZWQgaSkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5E
RVhJTkdfVFlQRVM6CkBAIC0zNDMsNyArMzQzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFM
TF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0
b3JMZW5ndGgoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTIsNyArMzUy
LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0s
IHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICBB
U1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwpAQCAtNDA5LDcgKzQwOSw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKLSAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzog
ewogICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQodm0sIGksIHYpOwpAQCAt
NDY3LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiAhIW1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAgICAgICAg
ICAgcmV0dXJuICEhbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODQsNyArNDg0LDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJy
YXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNTkzLDExICs1OTMsMTEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgIH0KICAgICAgICAgCi0gICAgY29uc3Qg
QnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhp
cyk7IH0KLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKTsgfQorICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9CiAgICAgICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhp
cyktPnByb3BlcnR5U3RvcmFnZSgpOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0
b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnByb3BlcnR5U3RvcmFnZSgp
OyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIFByb3Bl
cnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCkt
PnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAg
ewpAQCAtNzEzLDcgKzcxMyw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5z
dXJlSW50MzIoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihpbmRl
eGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
Y29udGlndW91c0ludDMyKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCkt
PmNvbnRpZ3VvdXNJbnQzMigpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVJ
bnQzMlNsb3codm0pOwogICAgIH0KQEAgLTcyNSw3ICs3MjUsNyBAQCBwdWJsaWM6CiAgICAgQ29u
dGlndW91c0RvdWJsZXMgZW5zdXJlRG91YmxlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChM
SUtFTFkoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKTsKICAgICAgICAgICAgIAog
ICAgICAgICByZXR1cm4gZW5zdXJlRG91YmxlU2xvdyh2bSk7CiAgICAgfQpAQCAtNzM1LDcgKzcz
NSw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91cyhW
TSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdU
eXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRp
Z3VvdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91
cygpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyh2
bSk7CiAgICAgfQpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHB1YmxpYzoKICAgICBBcnJheVN0b3JhZ2Uq
IGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhh
c0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOwogCiAgICAgICAgIHJldHVybiBlbnN1
cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CkBAIC03OTUsNyArNzk1LDcgQEAgcHJvdGVj
dGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgfQogICAgICAgICAKICAgICAv
LyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0
aGVyIG9yIG5vdCB0aGUKQEAgLTgwNCw3ICs4MDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5n
ZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTg2OSwxMSArODY5LDExIEBAIHByb3RlY3RlZDoK
ICAgICAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIEFTU0VS
VChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUo
KSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdU
eXBlKCkpKTsKIAotICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5n
dGgoKSA8IGxlbmd0aCkKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5n
dGgoKSA8IGxlbmd0aCkKICAgICAgICAgICAgIGVuc3VyZUxlbmd0aFNsb3codm0sIGxlbmd0aCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGlj
TGVuZ3RoKCkgPCBsZW5ndGgpCi0gICAgICAgICAgICBtX2J1dHRlcmZseS5nZXQodGhpcyktPnNl
dFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KCktPnB1
YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCktPnNl
dFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gQ2FsbCB0aGlz
IGlmIHlvdSB3YW50IHRvIHNocmluayB0aGUgYnV0dGVyZmx5IGJhY2tpbmcgc3RvcmUsIGFuZCB5
b3UncmUKQEAgLTE0ODksNyArMTQ4OSw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3RXaXRob3V0VHIKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKCF2
YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAg
QVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKLSAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2ls
bEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRP
ZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0
dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE4NSw3ICsxODUsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpT
CiB7CiAgICAgaWYgKCFlbnN1cmVTbG90KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBF
bnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KG1fbWFwRGF0YS0+bV9vd25l
cilbbV9pbmRleF07CisgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRyaWVzLmdl
dCgpW21faW5kZXhdOwogICAgIHBhaXIgPSBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1Zh
bHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVudHJ5LT52YWx1ZSgpLmdldCgpKTsKICAgICBtX2lu
ZGV4ICs9IDE7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDcsNyArMjA3LDcgQEAgQUxXQVlTX0lO
TElORSBpbnQzMl90IE1hcERhdGFJbXBsPEVudHJ5LAogICAgIGlmIChpc0ZpbmlzaGVkKCkpCiAg
ICAgICAgIHJldHVybiBtX2luZGV4OwogCi0gICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEt
Pm1fZW50cmllcy5nZXQobV9tYXBEYXRhLT5tX293bmVyKTsKKyAgICBFbnRyeSogZW50cmllcyA9
IG1fbWFwRGF0YS0+bV9lbnRyaWVzLmdldCgpOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEt
Pm1fc2l6ZTsKICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA8IGVuZCAm
JiAhZW50cmllc1ttX2luZGV4XS5rZXkoKSkKICAgICAgICAgbV9pbmRleCsrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCShyZXZpc2lv
biAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC02MCwyNSArNjAsMjUgQEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRy
eSwgSlNJdGVyYQogICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChh
c1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOwogICAgICAgICBpZiAoaXRl
ciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKKyAgICAg
ICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KClbaXRlci0+dmFsdWVdOwogICAgIH0KICAgICBpZiAo
a2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKICAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXll
ZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CiAg
ICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+
dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQoKVtpdGVyLT52YWx1ZV07CiAg
ICAgfQogICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgYXV0byBpdGVyID0g
bV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmIChp
dGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKKyAgICAg
ICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KClbaXRlci0+dmFsdWVdOwogICAgIH0KIAogICAgIGF1
dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1
ZSkpOwogICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVd
OworICAgIHJldHVybiAmbV9lbnRyaWVzLmdldCgpW2l0ZXItPnZhbHVlXTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBAIC05MywxNCArOTMsMTQg
QEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQogewogICAgIHR5cGVu
YW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwogICAgIGlmIChsb2Nh
dGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVy
KVtsb2NhdGlvbi0+dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQoKVtsb2Nh
dGlvbi0+dmFsdWVdOwogCiAgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBvd25l
cikpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwg
bV9zaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgRW50
cnkqIGVudHJ5ID0gJm1fZW50cmllcy5nZXQobV9vd25lcilbbV9zaXplKytdOworICAgIEVudHJ5
KiBlbnRyeSA9ICZtX2VudHJpZXMuZ2V0KClbbV9zaXplKytdOwogICAgIG5ldyAoZW50cnkpIEVu
dHJ5KCk7CiAgICAgZW50cnktPnNldEtleShleGVjLT52bSgpLCBvd25lciwga2V5VmFsdWUudmFs
dWUpOwogICAgIHJldHVybiBlbnRyeTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBpbmxpbmUgYm9vbCBN
YXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFs
dWU7CiAgICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKICAgICB9Ci0gICAg
bV9lbnRyaWVzLmdldChtX293bmVyKVtsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBtX2VudHJpZXMu
Z2V0KClbbG9jYXRpb25dLmNsZWFyKCk7CiAgICAgbV9kZWxldGVkQ291bnQrKzsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxF
bnRyeSwgSlNJdGVyYXRvCiAgICAgaW50MzJfdCBuZXdFbmQgPSAwOwogICAgIFJFTEVBU0VfQVNT
RVJUKG5ld0NhcGFjaXR5ID4gMCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXpl
OyBpKyspIHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJy
aWVyKClbaV07CisgICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllcy5nZXQoKVtpXTsKICAg
ICAgICAgaWYgKCFlbnRyeS5rZXkoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRvcnMuZm9yRWFj
aChbbmV3RW5kXShKU0l0ZXJhdG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKICAgICAgICAg
ICAgICAgICBpdGVyYXRvci0+aXRlcmF0b3JEYXRhKCktPmRpZFJlbW92ZUVudHJ5KG5ld0VuZCk7
CkBAIC0xOTUsMTMgKzE5NSwxMyBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJ
dGVyYXRvCiAKICAgICAvLyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCiAgICAgZm9yIChhdXRvIHB0
ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5l
bmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJh
cnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+
dmFsdWUgPSBtX2VudHJpZXMuZ2V0KClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigp
OwogICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBt
X2NlbGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50
cmllcy5nZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIo
KTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXQoKVtwdHItPnZhbHVlXS5rZXko
KS5nZXQoKS5hc0ludDMyKCk7CiAgICAgZm9yIChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJs
ZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAg
ICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVd
LmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5n
ZXQoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAgICAgZm9yIChhdXRvIHB0
ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxl
LmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRob3V0
QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRy
LT52YWx1ZSA9IG1fZW50cmllcy5nZXQoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMy
KCk7CiAKICAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVkQ291bnQpOwog
ICAgIG1fZGVsZXRlZENvdW50ID0gMDsKQEAgLTIxNyw3ICsyMTcsNyBAQCBpbmxpbmUgdm9pZCBN
YXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgQVNTRVJUKCFzaG91bGRQYWNrKCkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7CiAgICAgQVNTRVJUKG5ld0NhcGFj
aXR5ID49IG1fY2FwYWNpdHkpOwotICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9lbnRyaWVzLmdl
dFdpdGhvdXRCYXJyaWVyKCksIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOworICAgIG1lbWNweShk
ZXN0aW5hdGlvbiwgbV9lbnRyaWVzLmdldCgpLCBzaXplb2YoRW50cnkpICogbV9zaXplKTsKICAg
ICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9lbnRyaWVzLnNldFdpdGhvdXRCYXJy
aWVyKGRlc3RpbmF0aW9uKTsKIH0KQEAgLTIzNiw4ICsyMzYsNiBAQCBpbmxpbmUgQ2hlY2tlZEJv
b2xlYW4gTWFwRGF0YUltcGw8RW50cnksCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOwot
ICAgIC8vIERvIGEgcmVhZCBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IG1fZW50cmllcyBwb2ludHMg
dG8gdG8tc3BhY2UgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhpcyBHQyBlcG9jaC4KLSAgICBtX2Vu
dHJpZXMuZ2V0KG1fb3duZXIpOyAKICAgICBpZiAoc2hvdWxkUGFjaygpKQogICAgICAgICByZXBs
YWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwogICAgIGVs
c2UKQEAgLTI0OSw3ICsyNDcsNyBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8
RW50cnksCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KIGlu
bGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBFbnRyeSogZW50cmll
cyA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpOworICAgIEVudHJ5KiBlbnRyaWVzID0g
bV9lbnRyaWVzLmdldCgpOwogICAgIGlmICghZW50cmllcykKICAgICAgICAgcmV0dXJuOwogICAg
IGlmIChtX2RlbGV0ZWRDb3VudCkgewpAQCAtMjYzLDE0ICsyNjEsMTQgQEAgaW5saW5lIHZvaWQg
TWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRyaWVzWzBdKSwg
bV9zaXplICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
OwogICAgIH0KIAotICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVD
b3B5VG9rZW4sIG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpLCBjYXBhY2l0eUluQnl0ZXMo
KSk7CisgICAgdmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tl
biwgbV9lbnRyaWVzLmdldCgpLCBjYXBhY2l0eUluQnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgogaW5saW5lIHZvaWQgTWFwRGF0YUlt
cGw8RW50cnksIEpTSXRlcmF0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiB2aXNp
dG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9y
ZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcy5nZXRXaXRo
b3V0QmFycmllcigpKSkgewotICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmllcy5n
ZXRXaXRob3V0QmFycmllcigpOworICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5
VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMuZ2V0KCkpKSB7Cisg
ICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzLmdldCgpOwogICAgICAgICBFbnRy
eSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1Nw
YWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CiAgICAgICAgIGlmIChzaG91bGRQYWNrKCkpCiAgICAg
ICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCBtX2NhcGFjaXR5
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAwLDcgKzIwMCw2IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9u
U3RyaW5nOwogICAgIHYoYm9vbCwgdXNlTW92SGludFJlbW92YWwsIHRydWUsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIHVzZVB1dFN0YWNrU2lua2luZywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYo
Ym9vbCwgdXNlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUsIG51bGxwdHIpIFwKLSAgICB2
KGJvb2wsIHVzZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uLCB0cnVlLCBudWxscHRyKSBcCiAgICAg
XAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEpJVCwgdHJ1ZSwgImFsbG93cyB0aGUgREZHIC8g
RlRMIGNvbXBpbGF0aW9uIGluIHRocmVhZHMgb3RoZXIgdGhhbiB0aGUgZXhlY3V0aW5nIEpTIHRo
cmVhZCIpIFwKICAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcywgY29t
cHV0ZU51bWJlck9mV29ya2VyVGhyZWFkcygyLCAyKSAtIDEsIG51bGxwdHIpIFwKQEAgLTM3MSw3
ICszNzAsNiBAQCBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICB2KGVuYWJsZVBvbHltb3Jw
aGljQ2FsbElubGluaW5nLCB1c2VQb2x5bW9ycGhpY0NhbGxJbmxpbmluZywgU2FtZU9wdGlvbikg
XAogICAgIHYoZW5hYmxlTW92SGludFJlbW92YWwsIHVzZU1vdkhpbnRSZW1vdmFsLCBTYW1lT3B0
aW9uKSBcCiAgICAgdihlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdXNlT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmcsIFNhbWVPcHRpb24pIFwKLSAgICB2KGVuYWJsZUNvcHlCYXJyaWVyT3B0
aW1pemF0aW9uLCB1c2VDb3B5QmFycmllck9wdGltaXphdGlvbiwgU2FtZU9wdGlvbikgXAogICAg
IHYoZW5hYmxlQ29uY3VycmVudEpJVCwgdXNlQ29uY3VycmVudEpJVCwgU2FtZU9wdGlvbikgXAog
ICAgIHYoZW5hYmxlUHJvZmlsZXIsIHVzZVByb2ZpbGVyLCBTYW1lT3B0aW9uKSBcCiAgICAgdihl
bmFibGVBcmNoaXRlY3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMsIHVzZUFyY2hpdGVjdHVyZVNw
ZWNpZmljT3B0aW1pemF0aW9ucywgU2FtZU9wdGlvbikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274077</attachid>
            <date>2016-03-14 22:48:31 -0700</date>
            <delta_ts>2016-03-15 01:06:14 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>126808</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk4MTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NSBA
QAorMjAxNi0wMy0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSB0aGUgQmFrZXIgYmFycmllciBmcm9tIEpTQworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSBhZGRl
ZCBhIEJha2VyIGJhcnJpZXIsIGJ1dCBJIG5ldmVyIGZvbGxvd2VkIGl0IHVwIHdpdGggYW4gYWN0
dWFsCisgICAgICAgIGNvbmN1cnJlbnQgR0MuIFdoaWxlIHRoaW5raW5nIGFib3V0IHRoZSBHQywg
SSBiZWNhbWUgY29udmluY2VkIHRoYXQgdGhlIHJpZ2h0IHBhdGggZm9yd2FyZAorICAgICAgICBp
cyB0byBkbyBhIG5vbi1jb3B5aW5nIGNvbmN1cnJlbnQgR0MuIFRoYXQgaXMsIHJlbW92ZSB0aGUg
Y29waWVkIHNwYWNlIGFuZCBqdXN0IHVzZSB0aGUKKyAgICAgICAgbWFya2VkIHNwYWNlLiBUaGUg
ZG93bnNpZGUgb2YgdXNpbmcgbWFya2VkIHNwYWNlIGNhbm5vdCBiZSBtb3JlIHRoYW4gdGhlIG92
ZXJoZWFkIG9mIHRoZQorICAgICAgICBCYWtlciBiYXJyaWVyLCBzbyBjb25jdXJyZW50IG5vbi1j
b3B5aW5nIEdDIGlzIGRlZmluaXRlbHkgYmV0dGVyIHRoYW4gY29weWluZworICAgICAgICBub24t
Y29uY3VycmVudCBHQy4gSSBhbHNvIHN1c3BlY3QgdGhhdCBqdXN0IHBsYWluIG5vbi1jb3B5aW5n
IG5vbi1jb25jdXJyZW50IEdDIGlzIGdvaW5nIHRvCisgICAgICAgIGJlIGZpbmUgYWxzbywgc28g
dGhlIHBhdGggZm9yd2FyZCB3aWxsIHByb2JhYmx5IGJlIHRvIGZpcnN0IGp1c3QgcmVtb3ZlIENv
cGllZFNwYWNlLgorCisgICAgICAgIEFueXdheSwgZm9yIG5vdyB0aGlzIHBhdGNoIGp1c3QgcmVt
b3ZlcyB0aGUgQmFrZXIgYmFycmllci4gSXQgd2FzIGEgY3V0ZSBpbXBsZW1lbnRhdGlvbiBidXQK
KyAgICAgICAgaXQganVzdCBjb3N0IHBlcmZvcm1hbmNlIGFuZCBJIGRvbid0IHRoaW5rIHdlJ2xs
IGV2ZXIgdXNlIGl0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVy
YXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlv
blBoYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICog
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgor
ICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ1dHRlcmZseSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudFN0cnVjdHVy
ZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZUdldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVDb25zdGFudFN0b3JhZ2VQb2ludGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2hlY2tBcnJheSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0
ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlR2V0RGlyZWN0UG5hbWUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpzdG9yYWdlRm9yVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjppc0Zhc3RUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUdldEJ1dHRlcmZseVJlYWRPbmx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG9hZFZl
Y3RvcldpdGhCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29weUJhcnJpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjppc0luVG9TcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmxvYWRCdXR0ZXJmbHlSZWFkT25seSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmxvYWRWZWN0b3JSZWFkT25seSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnJlbW92ZVNwYWNl
Qml0cyk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9Db3B5QmFycmllci5oOgorICAgICAgICAo
SlNDOjpDb3B5QmFycmllckJhc2U6OkNvcHlCYXJyaWVyQmFzZSk6CisgICAgICAgIChKU0M6OkNv
cHlCYXJyaWVyQmFzZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVy
QmFzZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJCYXNlOjpjbGVhcik6CisgICAg
ICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6c2V0V2l0aG91dEJhcnJpZXIpOgorICAgICAgICAo
SlNDOjpDb3B5QmFycmllcjo6Q29weUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmll
cjo6Z2V0KToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXI6OnNldCk6CisgICAgICAgIChKU0M6
OkNvcHlCYXJyaWVyOjpzZXRXaXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OkNvcHlCYXJy
aWVyQmFzZTo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJC
YXNlOjpnZXRXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlCYXJy
aWVyQmFzZTo6Z2V0UHJlZGljYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlCYXJy
aWVyQmFzZTo6Y29weVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJC
YXNlOjpzZXRDb3B5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb3B5QmFycmllckJh
c2U6OndlYWtDQVNXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlC
YXJyaWVyOjpnZXRXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlC
YXJyaWVyOjpnZXRQcmVkaWNhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weUJhcnJp
ZXI6OndlYWtDQVNXaXRob3V0QmFycmllcik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y29sbGVjdEFuZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJh
cnJpZXIpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpI
ZWFwOjp3cml0ZUJhcnJpZXJCdWZmZXIpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90RmFzdFR5cGVk
QXJyYXkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTik6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bG9hZFR5cGVkQXJyYXlWZWN0b3IpOiBEZWxldGVk
LgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpicmFuY2hTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZlRvU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmTm90VG9TcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6cmVtb3ZlU3BhY2VCaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklULmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFt
ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0RG91YmxlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNM
b2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpT
Qzo6RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZUFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RGly
ZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y2FuQWNjZXNzSW5k
ZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpjYW5BY2Nlc3NBcmd1
bWVudEluZGV4UXVpY2tseUluREZHKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5
Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6ZmFzdFNsaWNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmFzdENvbmNhdFdpdGgp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3Ojppc05ldXRlcmVkKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6
OnZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpsZW5ndGgpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNr
aW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRl
ZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3Vv
dXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9y
YWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29u
dmVydEludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydEludDMy
VG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0NvbnRp
Z3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lk
ZWQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9y
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91
dEF0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6Omdl
dEJvdW5kU2xvdEJhc2VGdW5jdGlvbkZvckdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVp
Y2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlHZXRJbmRleFF1aWNrbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5p
dGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1NwYXJzZU1hcCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1
dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvdXRPZkxpbmVTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmxvY2F0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmVuc3VyZUludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZURv
dWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9y
YWdlT3JOdWxsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAg
ICogcnVudGltZS9NYXBEYXRhLmg6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+OjpJdGVyYXRv
ckRhdGE6Om5leHQpOgorICAgICAgICAoSlNDOjpKU0l0ZXJhdG9yPjo6SXRlcmF0b3JEYXRhOjpy
ZWZyZXNoQ3Vyc29yKToKKyAgICAgICAgKiBydW50aW1lL01hcERhdGFJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkpTSXRlcmF0b3I+OjpmaW5kKToKKyAgICAgICAgKEpTQzo6SlNJdGVyYXRvcj46
OmFkZCk6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+OjpyZW1vdmUpOgorICAgICAgICAoSlND
OjpKU0l0ZXJhdG9yPjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlND
OjpKU0l0ZXJhdG9yPjo6cmVwbGFjZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6OkpTSXRl
cmF0b3I+OjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNJdGVyYXRvcj46OmNvcHlCYWNraW5n
U3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE2LTAzLTE0ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIERvbid0
IHJlZmVyZW5jZSB0aGUgcHJvcGVydGllcyBvZiBAUmVmbGVjdCBkaXJlY3RseQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyAr
MjY5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHQ29tcGlsYXRp
b25Nb2RlLmNwcAogICAgIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKICAgICBkZmcv
REZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcAotICAgIGRmZy9ERkdDb3B5QmFycmllck9wdGlt
aXphdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNw
cAogICAgIGRmZy9ERkdEQ0VQaGFzZS5jcHAKICAgICBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJz
LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5ODE1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OSw4ICs4OSw2IEBACiAJCTBGMDQzOTZFMUIw
M0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyog
REZHQ29tYmluZWRMaXZlbmVzcy5oICovOyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIg
LyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKIAkJMEYwNzc2QkYxNEZGMDAyQjAwMTAy
MzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGls
YXRpb25FZmZvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjA5ODFGNTFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRp
b25QaGFzZS5jcHAgKi87IH07Ci0JCTBGMDk4MUY4MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5
QmFycmllck9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjA5ODFGNjFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJp
ZXJPcHRpbWl6YXRpb25QaGFzZS5oICovOyB9OwogCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICov
OyB9OwogCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBBNzUyMTFCOTRCRkE5
MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1
bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MEI4Mzk3MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgKi87IH07CkBAIC0yMjQ4
LDggKzIyNDYsNiBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRM
aXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExp
dmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlT
bG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdB
cnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYw
MDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEYwOTgxRjUxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0
aW1pemF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMDk4MUY2MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvcHlCYXJyaWVyT3B0
aW1pemF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBo
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEE3NTIwMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5mZXJyZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
QTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwQjgzOTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50VGh1bmtzLmNwcDsgcGF0aCA9IGxs
aW50L0xMSW50VGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxMzgs
OCArNjEzNCw2IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oICovLAotCQkJCTBGMDk4MUY1MUJDNUU1NjUw
MDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCAqLywKLQkJCQkw
RjA5ODFGNjFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFz
ZS5oICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCUE3RDg5Q0U2MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLywKQEAgLTcyMDYsNyArNzIwMCw2IEBACiAJ
CQkJMEYzOEIwMUExN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCQTFCMjYyNTZEMDA2NkNFMTUg
LyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjA5ODFG
ODFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzMxNkMxREIwNTAwODJDNUU4IC8qIERGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y2MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZGQzk1QTE0RUY5MEE5MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtODc3MCw3ICs4NzYzLDYgQEAKIAkJCQkwRjM4QjAxOTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZH
Q29tcGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTFBMTUzRTY4RjIw
MDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkVENjdCOTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTBGMDk4MUY3MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5
QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjcy
MTZDMURCMDMwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjE4MzI5MUM0NUJGMDcwMDcyNDUw
QiAvKiBBaXJDQ2FsbGluZ0NvbnZlbnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Niw3ICs1NzYsNiBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAogICAgICAgICAg
ICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgaml0LnJlbW92ZVNw
YWNlQml0cyhsb2FkZWRWYWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxv
YWRlZFZhbHVlR1BSOwogICAgICAgICAgICAgfQogCkBAIC04NTYsNyArODU1LDYgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUb1Nw
YWNlKHNjcmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAg
ICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
CkBAIC05MjUsNyArOTIzLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5l
cmF0aQogICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0
Y2hHUFIzKSk7CiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+
bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdWJQdHIoCkBAIC05Njks
MTAgKzk2Niw4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAg
ICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKICAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFzY3JhdGNo
R1BSSGFzU3RvcmFnZSkgeworICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkK
ICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VG9TcGFjZShz
Y3JhdGNoR1BSKSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgK
ICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVv
ZihKU1ZhbHVlKSkpOwpAQCAtMTA2Nyw3ICsxMDYyLDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGppdC5yZW1vdmVTcGFjZUJpdHMo
c2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE5ODE1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5NCw3ICsyMDk0LDYgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR2V0QnV0dGVyZmx5OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAg
Y2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBp
cyBub3QgYSBKUyB2YWx1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTk4
MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTIsNyArMTkyLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5
UmVhZE9ubHk6CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYmFyZWx5IHdvcmtzLiBUaGUg
ZGFuZ2VyIGlzIHRoYXQgdGhlIEdldEJ1dHRlcmZseSBpcyB1c2VkIGJ5IHNvbWV0aGluZyB0aGF0
CiAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgc29tZXRoaW5nIGVzY2FwaW5nIHRvIGEgY2Fu
ZGlkYXRlLiBGb3J0dW5hdGVseSwgdGhlIG9ubHkgYnV0dGVyZmx5LXVzaW5nIG9wcwogICAgICAg
ICAgICAgICAgICAgICAvLyB0aGF0IHdlIGV4ZW1wdCBoZXJlIGFsc28gdXNlIHRoZSBjYW5kaWRh
dGUgZGlyZWN0bHkuIElmIHRoZXJlIGV2ZXIgd2FzIGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtODAzLDEz
ICs4MDMsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5TG9jLCBKU09iamVjdF9idXR0ZXJmbHksIG5v
ZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKLSAgICBj
YXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgotICAgICAgICAvLyBUaGlzIHJ1bGUgaXMgc2VwYXJh
dGUgdG8gcHJldmVudCBDU0Ugb2YgR2V0QnV0dGVyZmx5IHdpdGggR2V0QnV0dGVyZmx5UmVhZE9u
bHkuIEJ1dCBpbiByZWFsaXR5LAotICAgICAgICAvLyB0aGlzIHdvcmtzIGJlY2F1c2Ugd2UgZG9u
J3QgaW50cm9kdWNlIEdldEJ1dHRlcmZseVJlYWRPbmx5IHVudGlsIHRoZSBiaXR0ZXIgZW5kIG9m
IGNvbXBpbGF0aW9uLgotICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAg
IGRlZihIZWFwTG9jYXRpb24oQnV0dGVyZmx5UmVhZE9ubHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZs
eSwgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCiAgICAgY2FzZSBBcnJheWlmeToKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6
CiAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLQotI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKLSNpbmNsdWRlICJERkdEb2VzR0MuaCIK
LSNpbmNsdWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkRGR1BoYXNlLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLW5hbWVz
cGFjZSB7Ci0KLWJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1jbGFzcyBDb3B5QmFycmllck9wdGlt
aXphdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKLXB1YmxpYzoKLSAgICBDb3B5QmFycmllck9w
dGltaXphdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgImNv
cHkgYmFycmllciBvcHRpbWl6YXRpb24iKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBy
dW4oKQotICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2co
IlN0YXJ0aW5nIGNvcHkgYmFycmllciBvcHRpbWl6YXRpb246XG4iKTsKLSAgICAgICAgICAgIG1f
Z3JhcGguZHVtcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlyc3QgY29udmVydCBhbGwg
R2V0QnV0dGVyZmx5IG5vZGVzIGludG8gR2V0QnV0dGVyZmx5UmVhZE9ubHkuCi0gICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
LSAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEdldEJ1dHRlcmZseSkKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3AoR2V0QnV0dGVyZmx5UmVhZE9ubHkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQW55dGltZSB3ZSB1c2UgYSBHZXRCdXR0ZXJmbHlSZWFkT25seSBpbiBh
IHNldHRpbmcgdGhhdCBtYXkgd3JpdGUgdG8gdGhlIGhlYXAsIG9yIGlmIHdlJ3JlIGluIGEKLSAg
ICAgICAgLy8gbmV3IGVwb2NoLCBjb252ZXJ0IGl0IHRvIGEgR2V0QnV0dGVyZmx5LiBUaGUgZXBv
Y2ggZ2V0cyBpbmNyZW1lbnRlZCBhdCBiYXNpYyBibG9jayBib3VuZGFyaWVzLAotICAgICAgICAv
LyBhbnl0aW1lIHdlIEdDLCBhbmQgYW55dGltZSBhIGJhcnJpZXIgb24gdGhlIGJ1dHRlcmZseSBt
YXkgYmUgZXhlY3V0ZWQuIFdlIHRyYXZlcnNlIHRoZSBwcm9ncmFtCi0gICAgICAgIC8vIGluIHBy
ZS1vcmRlciBzbyB0aGF0IHdlIGFsd2F5cyBzZWUgdXNlcyBhZnRlciBkZWZzLiBOb3RlIHRoYXQg
dGhpcyBpcyBhIGZpeHBvaW50IGJlY2F1c2UgaWYgd2UKLSAgICAgICAgLy8gdHVybiBhIEdldEJ1
dHRlcmZseVJlYWRPbmx5IGludG8gYSBHZXRCdXR0ZXJmbHksIHRoZW4gd2UndmUgaW50cm9kdWNl
ZCBhIGJ1dHRlcmZseSByZWFsbG9jYXRpb24uCi0gICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7
Ci0gICAgICAgIEVwb2NoIGN1cnJlbnRFcG9jaCA9IEVwb2NoOjpmaXJzdCgpOwotICAgICAgICBt
X2dyYXBoLmNsZWFyRXBvY2hzKCk7Ci0gICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50
RXBvY2guYnVtcCgpOwotICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykg
ewotICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRlc1RvSGVhcCA9IHdyaXRlc092ZXJsYXAo
bV9ncmFwaCwgbm9kZSwgSGVhcCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCByZWFsbG9j
YXRlc0J1dHRlcmZseSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoZG9lc0dDKG1f
Z3JhcGgsIG5vZGUpIHx8IHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgSlNPYmplY3RfYnV0
dGVyZmx5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVzQnV0dGVyZmx5ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2lsbCBl
eGVjdXRlIGNvcHkgYmFycmllcnMuIE1vc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRo
aW5ncyB0aGF0IGV4ZWN1dGUgY29weSBiYXJyaWVycyBhbHNvIGRvIEdDIG9yIGhhdmUgd3JpdGVz
IHRoYXQgb3ZlcmxhcCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dHRlcmZseSBo
ZWFwLCBhbmQgd2UgY2F0Y2ggdGhhdCBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0
ZXJmbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbGxvY2F0ZXNCdXR0ZXJmbHkgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRn
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5vcCgpICE9IEdldEJ1
dHRlcmZseVJlYWRPbmx5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAod3JpdGVzVG9IZWFwIHx8IGN1cnJlbnRFcG9jaCAhPSBlZGdlLT5lcG9jaCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlZGdlLT5zZXRPcChHZXRCdXR0ZXJmbHkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRlc0J1dHRlcmZseSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgcGhhc2UgYWx3YXlzIHRo
aW5rcyB0aGF0IGl0IGNoYW5nZXMgdGhlIGdyYXBoLiBUaGF0J3MgT0ssIGJlY2F1c2UgaXQncyBh
IGxhdGUgcGhhc2UuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07Ci0KLX0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQotCi1ib29sIHBlcmZvcm1Db3B5QmFycmllck9wdGltaXphdGlvbihH
cmFwaCYgZ3JhcGgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBD
b3B5IEJhcnJpZXIgT3B0aW1pemF0aW9uIFBoYXNlIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNlPENv
cHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2U+KGdyYXBoKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZS5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBERkdDb3B5QmFycmllck9wdGltaXph
dGlvblBoYXNlX2gKLSNkZWZpbmUgREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZV9oCi0K
LSNpZiBFTkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci1jbGFzcyBHcmFwaDsKLQotLy8gQ29udmVydHMgR2V0QnV0dGVyZmx5IG5vZGVzIGludG8gR2V0
QnV0dGVyZmx5UmVhZE9ubHkgbm9kZXMgd2hlbmV2ZXIgdGhlIGJ1dHRlcmZseSBpcyBvbmx5IHVz
ZWQgZm9yCi0vLyByZWFkLW9ubHkgb3BlcmF0aW9ucy4KLWJvb2wgcGVyZm9ybUNvcHlCYXJyaWVy
T3B0aW1pemF0aW9uKEdyYXBoJik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHQ29weUJhcnJpZXJPcHRpbWl6
YXRpb25QaGFzZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw2IEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNh
c2UgR2V0RXhlY3V0YWJsZToKICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICBjYXNlIEdldEJ1
dHRlcmZseVJlYWRPbmx5OgogICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICBjYXNlIEdldFNjb3Bl
OgogICAgIGNhc2UgU2tpcFNjb3BlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUxLDggKzEx
NTEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICBj
YXNlIENoZWNrQ2VsbDoKICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgotICAgICAgICBjYXNlIEdl
dEJ1dHRlcmZseToKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seTogeworICAgICAg
ICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTk4
MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MiwxMCArOTIsNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgTG9jCiAgICAgICAgIG91dC5wcmludCgiQnV0dGVyZmx5TG9jIik7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBCdXR0ZXJmbHlSZWFkT25seUxvYzoKLSAg
ICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlSZWFkT25seUxvYyIpOwotICAgICAgICByZXR1cm47
Ci0KICAgICBjYXNlIENoZWNrVHlwZUluZm9GbGFnc0xvYzoKICAgICAgICAgb3V0LnByaW50KCJD
aGVja1R5cGVJbmZvRmxhZ3NMb2MiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAxOTgxNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw2IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICAKICAgICBBcnJh
eUxlbmd0aExvYywKICAgICBCdXR0ZXJmbHlMb2MsCi0gICAgQnV0dGVyZmx5UmVhZE9ubHlMb2Ms
CiAgICAgQ2hlY2tUeXBlSW5mb0ZsYWdzTG9jLAogICAgIE92ZXJyaWRlc0hhc0luc3RhbmNlTG9j
LAogICAgIENsb3N1cmVWYXJpYWJsZUxvYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw2IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFj
cm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0QnV0dGVyZmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkg
XAotICAgIG1hY3JvKEdldEJ1dHRlcmZseVJlYWRPbmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgLyog
QSBub2RlIHVzZWQgdG8gcmVwbGFjZSBHZXRCdXR0ZXJmbHkgYXQgdGhlIGJpdHRlciBlbmQgb2Yg
Y29tcGlsYXRpb24uICovXAogICAgIG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhBcnJheWlmeSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEFy
cmF5aWZ5VG9TdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI5OSwyMiArMTI5OSw2IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25T
d2l0Y2hTdHIKICAgICByZXR1cm4gZXhlYy0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwo
KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOwogfQogCi1jaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ1dHRlcmZseShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
Y2VsbCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpLT5idXR0ZXJmbHkoKSk7Ci19Ci0KLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGNlbGwpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0KLSAgICByZXR1cm4gYml0d2lzZV9jYXN0
PGNoYXIqPihqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKS0+dmVjdG9yKCkpOwotfQot
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiBleGVj
LCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxOTgx
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDggKzE0NSw2IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25TdHJDYXQzKEUKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRh
cmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5k
ZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRl
Kiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KEV4ZWNTdGF0ZSosIHNpemVf
dCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCdXR0ZXJmbHkoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRT
ZXQqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JW
YXJhcmdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50
cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNs
dWRlICJERkdDbGVhblVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIgotI2luY2x1ZGUgIkRG
R0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdGYWlsZWRGaW5hbGl6ZXIuaCIKQEAgLTM1Nyw4ICszNTYsNiBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRm
Zyk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VDb3B5QmFycmllck9wdGltaXphdGlvbigpKQot
ICAgICAgICAgICAgcGVyZm9ybUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1QaGFudG9tSW5zZXJ0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91
dChkZmcpOwogICAgICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwpA
QCAtNDM5LDggKzQzNiw2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJm
b3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdlIHJlbHkgb24g
dGhpcyB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBi
eSBCMy4KLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKCkp
Ci0gICAgICAgICAgICBwZXJmb3JtQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oZGZnKTsKICAgICAg
ICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhkZmcpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODMsNyArNDgzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgotICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseVJlYWRPbmx5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAg
ICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyAr
MjAzLDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOgogICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgY2FzZSBDaGVj
a0FycmF5OgogICAgIGNhc2UgQXJyYXlpZnk6CiAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTI2
LDcgKzQxMjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICBjYXNl
IEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgICAgICBjb21waWxlR2V0QnV0dGVyZmx5KG5vZGUp
OwogICAgICAgICBicmVhazsKIApAQCAtNDgxMyw3ICs0ODEyLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAvLyBXZSB1c2UgcmVzdWx0UGF5bG9h
ZEdQUiBhcyBhIHRlbXBvcmFyeSBoZXJlLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBjbG9iYmVyIGl0
IGFmdGVyIGdldHRpbmcgdGhlIAogICAgICAgICAvLyB2YWx1ZSBvdXQgb2YgaW5kZXhHUFIgYW5k
IGVudW1lcmF0b3JHUFIgYmVjYXVzZSByZXN1bHRQYXlsb2FkR1BSIGNvdWxkIHJldXNlIGVpdGhl
ciBvZiB0aG9zZSByZWdpc3RlcnMuCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFRv
U3BhY2UocmVzdWx0UGF5bG9hZEdQUikpOwogICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwog
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXls
b2FkR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0UGF5bG9hZEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxNDcsNyArNDE0Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgotICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgICAgIGNvbXBpbGVHZXRCdXR0
ZXJmbHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC00ODE4LDcgKzQ4MTcsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZtX2ppdCk7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaDJHUFIpOwotICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gyR1BSKSk7CiAgICAg
ICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuc3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwog
ICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoMUdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTk4MTUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyMjYsMTAgKzUyMjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0SW5kZXhlZFByCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBmYWlsID0gbV9qaXQubG9hZFR5cGVkQXJyYXlWZWN0b3IoYmFzZVJlZywgc3Rv
cmFnZVJlZyk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBz
bG93UGF0aENhbGwoZmFpbCwgdGhpcywgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IsIHN0
b3JhZ2VSZWcsIGJhc2VSZWcpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHN0
b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC01MjUyLDEzICs1MjQ5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgICAgICBU
cnVzdGVkSW1tMzIoV2FzdGVmdWxUeXBlZEFycmF5KSk7CiAKICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGRhdGFHUFIpOwotICAgIG1faml0LnJlbW92ZVNwYWNlQml0cyhkYXRhR1BSKTsKICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgdmVjdG9yR1BSKTsKLSAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgdmVjdG9yUmVhZHk7Ci0gICAgdmVjdG9yUmVhZHkuYXBwZW5kKG1faml0LmJyYW5j
aElmVG9TcGFjZSh2ZWN0b3JHUFIpKTsKLSAgICB2ZWN0b3JSZWFkeS5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOb3RGYXN0VHlwZWRBcnJheShiYXNlR1BSKSk7Ci0gICAgbV9qaXQucmVtb3ZlU3BhY2VC
aXRzKHZlY3RvckdQUik7Ci0gICAgdmVjdG9yUmVhZHkubGluaygmbV9qaXQpOwogICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGF0YUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZkFycmF5QnVmZmVyKCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIsIEFycmF5QnVmZmVyOjpvZmZzZXRPZkRhdGEoKSksIGRh
dGFHUFIpOwogICAgIG1faml0LnN1YlB0cihkYXRhR1BSLCB2ZWN0b3JHUFIpOwpAQCAtNjMyMiwy
MyArNjMxMyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCdXR0ZXJmbHkKICAg
ICAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAKLSAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoSWZOb3RUb1NwYWNlKHJlc3VsdEdQUiksCi0gICAgICAgICAgICAgICAgdGhpcywgb3Bl
cmF0aW9uR2V0QnV0dGVyZmx5LCByZXN1bHRHUFIsIGJhc2VHUFIpKTsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgotICAgICAgICBtX2ppdC5yZW1vdmVT
cGFjZUJpdHMocmVzdWx0R1BSKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBub2RlIHR5cGUiKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAogICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
YXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToK
LSAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoK
ICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtMzI2LDcgKzMyNSw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5
VmFsRGlyZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTgx
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICBjYXNlIEdldEJ1dHRlcmZs
eVJlYWRPbmx5OgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAg
Y2FzZSBOZXdBcnJheUJ1ZmZlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDkg
KzYxNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAg
ICAgY29tcGlsZUdldEJ1dHRlcmZseSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnV0dGVyZmx5
UmVhZE9ubHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnN0YW50U3Rv
cmFnZVBvaW50ZXI6CiAgICAgICAgICAgICBjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9pbnRlcigp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzk0LDE0ICsyMzkxLDkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQogICAgIHsKLSAgICAgICAgc2V0U3Rv
cmFnZShsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkp
OworICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICB9CiAKLSAgICB2b2lkIGNv
bXBpbGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpCi0gICAgewotICAgICAgICBzZXRTdG9yYWdlKGxv
YWRCdXR0ZXJmbHlSZWFkT25seShsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgfQot
ICAgIAogICAgIHZvaWQgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKQogICAgIHsKICAg
ICAgICAgc2V0U3RvcmFnZShtX291dC5jb25zdEludFB0cihtX25vZGUtPnN0b3JhZ2VQb2ludGVy
KCkpKTsKQEAgLTI0MzQsNyArMjQyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UobG9hZFZlY3RvcldpdGhC
YXJyaWVyKGNlbGwpKTsKKyAgICAgICAgc2V0U3RvcmFnZShtX291dC5sb2FkUHRyKGNlbGwsIG1f
aGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUNoZWNrQXJyYXkoKQpAQCAtMjQ3MSw4ICsyNDYzLDggQEAgcHJpdmF0ZToKIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyh3YXN0ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAg
ICAgTFZhbHVlIHZlY3RvclB0ciA9IGxvYWRWZWN0b3JSZWFkT25seShiYXNlUHRyKTsKLSAgICAg
ICAgTFZhbHVlIGJ1dHRlcmZseVB0ciA9IGxvYWRCdXR0ZXJmbHlSZWFkT25seShiYXNlUHRyKTsK
KyAgICAgICAgTFZhbHVlIHZlY3RvclB0ciA9IG1fb3V0LmxvYWRQdHIoYmFzZVB0ciwgbV9oZWFw
cy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRy
ID0gbV9vdXQubG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAg
ICAgICAgIExWYWx1ZSBhcnJheUJ1ZmZlclB0ciA9IG1fb3V0LmxvYWRQdHIoYnV0dGVyZmx5UHRy
LCBtX2hlYXBzLkJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7CiAgICAgICAgIExWYWx1ZSBkYXRhUHRy
ID0gbV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFwcy5BcnJheUJ1ZmZlcl9kYXRh
KTsKIApAQCAtNDM0Miw3ICs0MzM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKG1ldGhvZC5w
cm90b3R5cGUoKS0+dmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0lu
bGluZU9mZnNldChtZXRob2Qub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eUJhc2UgPSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkocHJvcGVydHlCYXNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVh
cHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJv
cGVydHkoCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQx
MCw3ICs0NDAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBiYXNl
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGxv
YWRCdXR0ZXJmbHlXaXRoQmFycmllcihiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0
aW9ucy5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKQEAgLTYxODIsNyArNjE3NCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkLCBzbG93Q2FzZSk7Ci0gICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2UpOworICAgICAgICBMVmFsdWUgc3Rv
cmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICBMVmFsdWUgcmVhbEluZGV4ID0gbV9vdXQuc2lnbkV4dDMyVG82NCgKICAgICAgICAg
ICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBt
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7
CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CkBAIC02OTU1LDE0ICs2OTQ3LDE0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAKICAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5leHRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKG9iamVj
dCk7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAg
ICAgIGlmICghcHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCiAgICAgICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIHByZXZpb3VzU3Ry
dWN0dXJlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSByZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgICAgIG9iamVjdCwgbG9hZEJ1dHRlcmZseVdp
dGhCYXJyaWVyKG9iamVjdCksCisgICAgICAgICAgICAgICAgb2JqZWN0LCBtX291dC5sb2FkUHRy
KG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLAogICAgICAgICAgICAgICAgIHBy
ZXZpb3VzU3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTcxMjUsMTEwICs3MTE3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7
CiAgICAgfQogCi0gICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihMVmFsdWUgb2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAotICAgICAgICAgICAgb2Jq
ZWN0LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLCBv
cGVyYXRpb25HZXRCdXR0ZXJmbHkpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG9hZFZlY3Rv
cldpdGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICBMVmFsdWUgZmFzdFJl
c3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZp
ZXdfdmVjdG9yKTsKLSAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAotICAgICAgICAgICAgZmFz
dFJlc3VsdFZhbHVlLAotICAgICAgICAgICAgWyZdICgpIC0+IExWYWx1ZSB7Ci0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVk
QXJyYXkob2JqZWN0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsK
LQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jl
c3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlC
dWZmZXJWZWN0b3IsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9LCBvYmplY3QpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50
ZXIsIFBfSklUT3BlcmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBwb2ludGVyLAotICAgICAgICAgICAgWyZd
ICgpIC0+IExWYWx1ZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aCgKLSAg
ICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9j
YXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsK
LSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgTFZhbHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBwb2ludGVyLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdC
bG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
cG9pbnRlcik7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc0luVG9TcGFjZShwb2ludGVyKSwgdXN1
YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKLQotICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwot
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoZnVuY3Rv
cigpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQu
cGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgfQotCi0gICAg
TFZhbHVlIGlzSW5Ub1NwYWNlKExWYWx1ZSBwb2ludGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LnRlc3RJc1plcm9QdHIocG9pbnRlciwgbV9vdXQuY29uc3RJbnRQdHIoQ29weUJhcnJp
ZXJCYXNlOjpzcGFjZUJpdHMpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVJl
YWRPbmx5KExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcmVtb3ZlU3BhY2VC
aXRzKG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwot
ICAgIH0KLQotICAgIExWYWx1ZSBsb2FkVmVjdG9yUmVhZE9ubHkoTFZhbHVlIG9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKG9iamVj
dCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotCi0gICAgICAgIExCYXNpY0Js
b2NrIHBvc3NpYmx5RnJvbVNwYWNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQotICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7Ci0KLSAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKGZhc3RSZXN1bHRWYWx1ZSksIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHBvc3NpYmx5RnJvbVNwYWNlKSk7Ci0KLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhwb3NzaWJseUZyb21TcGFjZSwgY29u
dGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbV9vdXQuc2Vs
ZWN0KAotICAgICAgICAgICAgaXNGYXN0VHlwZWRBcnJheShvYmplY3QpLCByZW1vdmVTcGFjZUJp
dHMoZmFzdFJlc3VsdFZhbHVlKSwgZmFzdFJlc3VsdFZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIHJlbW92ZVNwYWNlQml0cyhMVmFsdWUgc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX291dC5iaXRBbmQoCi0gICAgICAgICAgICBzdG9yYWdlLCBtX291dC5jb25zdEludFB0cih+
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSkpOwotICAg
IH0KLQogICAgIExWYWx1ZSBpc0Zhc3RUeXBlZEFycmF5KExWYWx1ZSBvYmplY3QpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlCYXJyaWVyLmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsODggKzMwLDIw
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1lbnVtIGNsYXNzIENvcHlTdGF0ZSB7Ci0gICAgLy8g
VGhlIGJhY2tpbmcgc3RvcmUgaXMgbm90IHBsYW5uZWQgdG8gZ2V0IGNvcGllZCBpbiB0aGlzIGVw
b2NoLiBJZiB5b3Uga2VlcCBhIHBvaW50ZXIgdG8gdGhlIGJhY2tpbmcKLSAgICAvLyBzdG9yZSBv
biB0aGUgc3RhY2ssIGl0IHdpbGwgbm90IGdldCBjb3BpZWQuIElmIHlvdSBkb24ndCBrZWVwIGl0
IG9uIHRoZSBzdGFjaywgaXQgbWF5IGdldCBjb3BpZWQKLSAgICAvLyBzdGFydGluZyBhdCB0aGUg
bmV4dCBoYW5kc2hha2UgKHRoYXQgaXMsIGl0IG1heSB0cmFuc2l0aW9uIGZyb20gVG9TcGFjZSB0
byBDb3B5UGxhbm5lZCwgYnV0Ci0gICAgLy8gQ29weVBsYW5uZWQgbWVhbnMgVG9TcGFjZSBwcmlv
ciB0byB0aGUgaGFuZHNoYWtlIHRoYXQgc3RhcnRzIHRoZSBjb3B5IHBoYXNlKS4KLSAgICBUb1Nw
YWNlLAotCi0gICAgLy8gVGhlIG1hcmtpbmcgcGhhc2UgaGFzIHNlbGVjdGVkIHRoaXMgYmFja2lu
ZyBzdG9yZSB0byBiZSBjb3BpZWQuIElmIHdlIGFyZSBub3QgeWV0IGluIHRoZSBjb3B5aW5nCi0g
ICAgLy8gcGhhc2UsIHRoaXMgYmFja2luZyBzdG9yZSBpcyBzdGlsbCBpbiB0by1zcGFjZS4gQWxs
IHRoYXQgaXMgbmVlZGVkIGluIHN1Y2ggYSBjYXNlIGlzIHRvIG1hc2sgb2ZmIHRoZQotICAgIC8v
IGxvdyBiaXRzLiBJZiB3ZSBhcmUgaW4gdGhlIGNvcHlpbmcgcGhhc2UsIHRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IHBvaW50cyB0byBmcm9tLXNwYWNlLiBUaGUKLSAgICAvLyBiYXJyaWVyIHNo
b3VsZCBmaXJzdCBjb3B5IHRoZSBvYmplY3QgLSBvciB3YWl0IGZvciBjb3B5aW5nIHRvIGZpbmlz
aCAtIGJlZm9yZSB1c2luZyB0aGUgb2JqZWN0LgotICAgIENvcHlQbGFubmVkLAotCi0gICAgLy8g
VGhlIG9iamVjdCBpcyBiZWluZyBjb3BpZWQgcmlnaHQgbm93LiBBbnlvbmUgd2FudGluZyB0byB1
c2UgdGhlIG9iamVjdCBtdXN0IHdhaXQgZm9yIHRoZSBvYmplY3QgdG8KLSAgICAvLyBmaW5pc2gg
YmVpbmcgY29waWVkLiBOb3RpZmljYXRpb25zIGFib3V0IGNvcHlpbmcgdXNlIHRoZSBQYXJraW5n
TG90IGNvbWJpbmVkIHdpdGggdGhlc2UgYml0cy4gSWYgdGhlCi0gICAgLy8gc3RhdGUgaXMgQ29w
eWluZ0FuZFdhaXRpbmcsIHRoZW4gd2hlbiB0aGUgY29weWluZyBmaW5pc2hlcywgd2hhdGV2ZXIg
dGhyZWFkIHdhcyBkb2luZyBpdCB3aWxsCi0gICAgLy8gdW5wYXJrQWxsKCkgb24gdGhlIGFkZHJl
c3Mgb2YgdGhlIENvcHlCYXJyaWVyQmFzZS4gU28sIHRvIHdhaXQgZm9yIGNvcHlpbmcgdG8gZmlu
aXNoLCBDQVMgdGhpcyB0bwotICAgIC8vIENvcHlpbmdBbmRXYWl0aW5nIGFuZCB0aGVuIHBhcmtD
b25kaXRpb25hbGx5IG9uIHRoZSBiYXJyaWVyIGFkZHJlc3MuCi0gICAgQ29weWluZywKLQotICAg
IC8vIFRoZSBvYmplY3QgaXMgYmVpbmcgY29waWVkIHJpZ2h0IG5vdywgYW5kIHRoZXJlIGFyZSBv
bmUgb3IgbW9yZSB0aHJlYWRzIHBhcmtlZC4gVGhvc2UgdGhyZWFkcyB3YW50Ci0gICAgLy8gdG8g
YmUgdW5wYXJrZWQgd2hlbiBjb3B5aW5nIGlzIGRvbmUuIFNvLCB3aGljaGV2ZXIgdGhyZWFkIGRv
ZXMgdGhlIGNvcHlpbmcgbmVlZHMgdG8gY2FsbCB1bnBhcmtBbGwoKQotICAgIC8vIG9uIHRoZSBi
YXJyaWVyIGFkZHJlc3MgYWZ0ZXIgY29weWluZyBpcyBkb25lLgotICAgIENvcHlpbmdBbmRXYWl0
aW5nCi19OwotCiBjbGFzcyBDb3B5QmFycmllckJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzcGFjZUJpdHMgPSAzOwotCiAgICAgQ29weUJhcnJpZXJCYXNlKCkKICAg
ICAgICAgOiBtX3ZhbHVlKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKLSAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9Ci0gICAgCiAgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIHZvaWQqIGdl
dFdpdGhvdXRCYXJyaWVyKCkgY29uc3QKKyAgICB2b2lkKiBnZXQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQogCi0gICAgLy8gVXNlIHRoaXMgdmVyc2lvbiBv
ZiBnZXQoKSBpZiB5b3Ugb25seSB3YW50IHRvIGV4ZWN1dGUgdGhlIGJhcnJpZXIgc2xvdyBwYXRo
IGlmIHNvbWUgY29uZGl0aW9uCi0gICAgLy8gaG9sZHMsIGFuZCB5b3Ugb25seSB3YW50IHRvIGV2
YWx1YXRlIHRoYXQgY29uZGl0aW9uIGFmdGVyIGZpcnN0IGNoZWNraW5nIHRoZSBiYXJyaWVyJ3MK
LSAgICAvLyBjb25kaXRpb24uIFVzdWFsbHksIHlvdSBqdXN0IHdhbnQgdG8gdXNlIGdldCgpLgot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCogZ2V0UHJlZGljYXRlZChj
b25zdCBKU0NlbGwqIG93bmVyLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAotICAgIHsK
LSAgICAgICAgdm9pZCogcmVzdWx0ID0gbV92YWx1ZTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJlc3VsdCkgJiBzcGFjZUJpdHMpKSB7Ci0gICAgICAgICAg
ICBpZiAoZnVuY3RvcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBIZWFwOjpjb3B5QmFycmll
cihvd25lciwgbV92YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0KLSAgICAvLyBXaGVuIHdlIGFyZSBpbiB0aGUgY29uY3VycmVudCBjb3B5aW5nIHBoYXNl
LCB0aGlzIG1ldGhvZCBtYXkgbG9jayB0aGUgYmFycmllciBvYmplY3QgKGkuZS4gdGhlIGZpZWxk
Ci0gICAgLy8gcG9pbnRpbmcgdG8gY29waWVkIHNwYWNlKSBhbmQgY2FsbCBkaXJlY3RseSBpbnRv
IHRoZSBvd25pbmcgb2JqZWN0J3MgY29weUJhY2tpbmdTdG9yZSgpIG1ldGhvZC4KLSAgICB2b2lk
KiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
ZXRQcmVkaWNhdGVkKG93bmVyLCBbXSAoKSAtPiBib29sIHsgcmV0dXJuIHRydWU7IH0pOwotICAg
IH0KLQotICAgIENvcHlTdGF0ZSBjb3B5U3RhdGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PENvcHlTdGF0ZT4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV92YWx1
ZSkgJiBzcGFjZUJpdHMpOwotICAgIH0KLQotICAgIC8vIFRoaXMgb25seSB3b3JrcyB3aGVuIHlv
dSBrbm93IHRoYXQgdGhlcmUgaXMgbm9ib2R5IGVsc2UgY29uY3VycmVudGx5IG1lc3Npbmcgd2l0
aCB0aGlzIENvcHlCYXJyaWVyLgotICAgIC8vIFRoYXQncyBoYXJkIHRvIGd1YXJhbnRlZSwgdGhv
dWdoIHRoZXJlIGFyZSBhIGZldyB1bnVzdWFsIHBsYWNlcyB3aGVyZSB0aGlzIGVuZHMgdXAgYmVp
bmcgc2FmZS4KLSAgICAvLyBVc3VhbGx5IHlvdSB3YW50IHRvIHVzZSBDb3B5QmFycmllcjo6d2Vh
a0NBUygpLgotICAgIHZvaWQgc2V0Q29weVN0YXRlKENvcHlTdGF0ZSBjb3B5U3RhdGUpCi0gICAg
ewotICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICB1aW50cHRyX3QgdmFs
dWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3ZhbHVlKTsKLSAgICAgICAgdmFsdWUgJj0g
fnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oc3BhY2VCaXRzKTsKLSAgICAgICAgdmFsdWUgfD0gc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihjb3B5U3RhdGUpOwotICAgICAgICBtX3ZhbHVlID0gYml0d2lz
ZV9jYXN0PHZvaWQqPih2YWx1ZSk7Ci0gICAgfQotCiAgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1
ZSA9IG51bGxwdHI7IH0KIAogcHJvdGVjdGVkOgpAQCAtMTMxLDE1ICs2Myw2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwogICAgIH0KIAotICAgIGJvb2wgd2Vh
a0NBU1dpdGhvdXRCYXJyaWVyKAotICAgICAgICB2b2lkKiBvbGRQb2ludGVyLCBDb3B5U3RhdGUg
b2xkQ29weVN0YXRlLCB2b2lkKiBuZXdQb2ludGVyLCBDb3B5U3RhdGUgbmV3Q29weVN0YXRlKQot
ICAgIHsKLSAgICAgICAgdWludHB0cl90IG9sZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4ob2xkUG9pbnRlcikgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG9sZENvcHlTdGF0ZSk7Ci0g
ICAgICAgIHVpbnRwdHJfdCBuZXdWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld1Bv
aW50ZXIpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihuZXdDb3B5U3RhdGUpOwotICAgICAgICBy
ZXR1cm4gV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAoCi0gICAgICAgICAgICAmbV92YWx1ZSwgYml0
d2lzZV9jYXN0PHZvaWQqPihvbGRWYWx1ZSksIGJpdHdpc2VfY2FzdDx2b2lkKj4obmV3VmFsdWUp
KTsKLSAgICB9Ci0KIHByaXZhdGU6CiAgICAgbXV0YWJsZSB2b2lkKiBtX3ZhbHVlOwogfTsKQEAg
LTE2MSwyMiArODQsMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBUKiBnZXRXaXRo
b3V0QmFycmllcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQq
PihDb3B5QmFycmllckJhc2U6OmdldFdpdGhvdXRCYXJyaWVyKCkpOwotICAgIH0KLSAgICAKLSAg
ICBUKiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKKyAgICBUKiBnZXQoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJCYXNlOjpn
ZXQob3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJC
YXNlOjpnZXQoKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAg
ICBUKiBnZXRQcmVkaWNhdGVkKGNvbnN0IEpTQ2VsbCogb3duZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5
QmFycmllckJhc2U6OmdldFByZWRpY2F0ZWQob3duZXIsIGZ1bmN0b3IpKTsKLSAgICB9Ci0gICAg
CiAgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6c2V0KHZtLCBvd25lciwgdmFsdWUpOwpAQCAt
MTg2LDExICs5OCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6
c2V0V2l0aG91dEJhcnJpZXIodmFsdWUpOwogICAgIH0KLQotICAgIGJvb2wgd2Vha0NBU1dpdGhv
dXRCYXJyaWVyKFQqIG9sZFBvaW50ZXIsIENvcHlTdGF0ZSBvbGRDb3B5U3RhdGUsIFQqIG5ld1Bv
aW50ZXIsIENvcHlTdGF0ZSBuZXdDb3B5U3RhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gQ29w
eUJhcnJpZXJCYXNlOjp3ZWFrQ0FTV2l0aG91dEJhcnJpZXIob2xkUG9pbnRlciwgb2xkQ29weVN0
YXRlLCBuZXdQb2ludGVyLCBuZXdDb3B5U3RhdGUpOwotICAgIH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5
ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAx
MSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTA4MywxNiArMTA4Myw2IEBAIHZvaWQgSGVhcDo6YWRk
VG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFy
a1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogfQogCi12b2lkKiBIZWFwOjpjb3B5
QmFycmllcihjb25zdCBKU0NlbGwqLCB2b2lkKiYgcG9pbnRlcikKLXsKLSAgICAvLyBEbyBub3Ro
aW5nIGZvciBub3csIGV4Y2VwdCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBsb3cgYml0cyBhcmUgbWFz
a2VkIG9mZi4gVGhpcyBoZWxwcyB0bwotICAgIC8vIHNpbXVsYXRlIGVub3VnaCBvZiB0aGlzIGJh
cnJpZXIgdGhhdCBhdCBsZWFzdCB3ZSBjYW4gdGVzdCB0aGUgbG93IGJpdHMgYXNzdW1wdGlvbnMu
Ci0gICAgcG9pbnRlciA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oCi0gICAgICAgIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ29weUJhcnJp
ZXJCYXNlOjpzcGFjZUJpdHMpKTsKLSAgICAKLSAgICByZXR1cm4gcG9pbnRlcjsKLX0KLQogdm9p
ZCBIZWFwOjpjb2xsZWN0QW5kU3dlZXAoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKIHsK
ICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
My0yMDA5LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTEyLDggKzExMiw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICB2b2lk
IHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkKiBjb3B5QmFycmllcihjb25zdCBKU0NlbGwqIG93bmVyLCB2b2lk
KiYgY29waWVkU3BhY2VQb2ludGVyKTsKLQogICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVC
YXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAgICB2b2lk
IGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxOTgxNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OCwxNyArMTQ4LDYgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5
SGVscGVyczo6YgogICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVkQXJyYXkpKTsKIH0KIAot
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6bG9hZFR5cGVkQXJyYXlWZWN0
b3IoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlQoYmFzZUdQUiAhPSByZXN1bHRHUFIpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHJlc3VsdEdQUik7Ci0g
ICAgSnVtcCBvayA9IGJyYW5jaElmVG9TcGFjZShyZXN1bHRHUFIpOwotICAgIEp1bXAgcmVzdWx0
ID0gYnJhbmNoSWZGYXN0VHlwZWRBcnJheShiYXNlR1BSKTsKLSAgICBvay5saW5rKHRoaXMpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4o
RlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hE
b3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODIy
LDI4ICs4MjIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaElm
VG9TcGFjZShHUFJSZWcgc3RvcmFnZUdQUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBicmFuY2hU
ZXN0MzIoWmVybywgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKENvcHlCYXJyaWVyQmFzZTo6c3Bh
Y2VCaXRzKSk7Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2hJZk5vdFRvU3BhY2UoR1BSUmVnIHN0
b3JhZ2VHUFIpCi0gICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKE5vblplcm8sIHN0
b3JhZ2VHUFIsIFRydXN0ZWRJbW0zMihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpOwotICAg
IH0KLQotICAgIHZvaWQgcmVtb3ZlU3BhY2VCaXRzKEdQUlJlZyBzdG9yYWdlR1BSKQotICAgIHsK
LSAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIofnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ29w
eUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKSwgc3RvcmFnZUdQUik7Ci0gICAgfQotCiAgICAgSnVt
cCBicmFuY2hJZkZhc3RUeXBlZEFycmF5KEdQUlJlZyBiYXNlR1BSKTsKICAgICBKdW1wIGJyYW5j
aElmTm90RmFzdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2VHUFIpOwogCi0gICAgLy8gUmV0dXJucyBh
IGp1bXAgdG8gc2xvdyBwYXRoIGZvciB3aGVuIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGUgYmFycmll
ci4gTm90ZSB0aGF0IGJhc2VHUFIgYW5kCi0gICAgLy8gcmVzdWx0R1BSIG11c3QgYmUgZGlmZmVy
ZW50LgotICAgIEp1bXAgbG9hZFR5cGVkQXJyYXlWZWN0b3IoR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIpOwotICAgIAogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3JCeXRlT2Zm
c2V0KHB0cmRpZmZfdCBieXRlT2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGJ5dGVPZmZzZXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgdXBkYXRlVG9wQ2FsbEZy
YW1lKCk7CiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlT2Zm
c2V0OwotICAgICAgICAKKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgICAgIERF
RklORV9TTE9XX09QKGRlbF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XX09QKGluKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk2LDcgKzExOTYsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZGlyZWN0X3BuYW1lKEluc3RyCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9m
IGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFRvU3BhY2UocmVnVDApKTsKICAgICBzdWIzMihBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCByZWdUMik7CiAgICAgbmVnMzIocmVnVDIpOwogICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xMjEzLDcgKzEy
MTIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFtZShJCiAgICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOwogICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTksNyArMTE1OSw2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXIKICAgICAKICAgICBsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyByZWFkIGJhcnJpZXIKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBs
ZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAg
CkBAIC0xMjAzLDcgKzEyMDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KEluc3RyCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFRv
U3BhY2UocmVnVDApKTsKICAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgbmVn
MzIocmVnVDEpOwogICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CkBAIC0xMjIw
LDcgKzEyMTgsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFtZShJCiAg
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
LSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUp
OwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSw3ICsxNjUsNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUxvYWQo
SW5zdHJ1CiAgICAgCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKERvdWJsZVNoYXBlKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICBsb2FkRG91YmxlKEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QwKSk7
CkBAIC0xNzksNyArMTc4LDYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzTG9h
ZChJbgogICAgIAogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVn
VDIsIFRydXN0ZWRJbW0zMihleHBlY3RlZFNoYXBlKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRl
c3Q2NChaZXJvLCByZWdUMCkpOwpAQCAtMTk1LDcgKzE5Myw2IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlTG9hZCgKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
QWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJy
YXlTdG9yYWdlU2hhcGUpKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOwogCiAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7CkBAIC0yNTQsNyAr
MjUxLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIG5v
dFN0cmluZy5saW5rKHRoaXMpOwogICAgIG5vbkNlbGwubGluayh0aGlzKTsKICAgICAKLSAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1w
dHkgdmFsdWUKICAgICAKQEAgLTMyNyw3ICszMjMsNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEdlbmVyaWNDb250aWd1b3VzCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4aW5nU2hhcGUpKTsKICAgICAKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsK
LSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMikpOwogICAgIEp1
bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgIExhYmVsIHN0
b3JlUmVzdWx0ID0gbGFiZWwoKTsKQEAgLTM4Myw3ICszNzgsNiBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAgICAgCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIp
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAg
ICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkp
OwpAQCAtNDU0LDcgKzQ0OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKElu
c3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawogICAgIAotICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcmVhZCBiYXJyaWVyCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBvdXQgb2YgYm91bmRzCiAgICAgCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9v
c2VBcnJheU1vZGUocHJvZmlsZSk7CkBAIC03ODYsNyArNzc5LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1YwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsodGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaCkpOwogICAgICAgICAgICAgbmVn
MzIob2Zmc2V0KTsKICAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0
KTsKICAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCByZXN1bHQpOwpAQCAtODY2LDEwICs4NTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoSW5zCiAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFBy
b3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYWQgc3RydWN0dXJlCi0gICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcmVhZCBiYXJyaWVyCi0gICAgfQogCiAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAv
LyBWYXIgaW5qZWN0aW9ucyBjaGVjay4KICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwpAQCAt
ODc4LDcgKzg2OCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShJbnMK
ICAgICAgICAgLy8gR2xvYmFsUHJvcGVydHkvR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2sKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjawotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgog
ICAgICAgICAvLyBHbG9iYWxMZXhpY2FsVmFyCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gVERaIGNoZWNrLgogICAgICAgICAvLyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcy4KQEAgLTkzMiw3ICs5MjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QwKSk7CiAgICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwogICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwpAQCAt
MTAyNiwxNyArMTAxNCwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKElu
c3RyCiAgICAgICAgICB8fCByZXNvbHZlVHlwZSA9PSBMb2NhbENsb3N1cmVWYXIpCiAgICAgICAg
ICYmIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQtPnN0YXRlKCkgIT0gSXNJ
bnZhbGlkYXRlZCkKICAgICAgICAgbGlua0NvdW50Kys7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09
IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykgeworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAg
ICAgICAgIGxpbmtDb3VudCsrOyAvLyBiYWQgc3RydWN0dXJlCi0gICAgICAgIGxpbmtDb3VudCsr
OyAvLyByZWFkIGJhcnJpZXIKLSAgICB9CiAgICAgaWYgKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkgIT0gSW5pdGlhbGl6YXRpb24gJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKSAvLyBURFogY2hlY2suCiAgICAgICAgIGxpbmtDb3VudCsrOwogICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHkgfHwgcmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZl
ZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICAvLyBHbG9iYWxQcm9w
ZXJ0eS9HbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zQ2hlY2sKICAgICAgICAgbGlua0Nv
dW50Kys7IC8vIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrCiAgICAgICAgIGxpbmtDb3VudCsr
OyAvLyBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjawotICAgICAgICBsaW5rQ291bnQrKzsgLy8g
cmVhZCBiYXJyaWVyCiAKICAgICAgICAgLy8gR2xvYmFsTGV4aWNhbFZhcgogICAgICAgICBib29s
IG5lZWRzVERaQ2hlY2sgPSBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpICE9IEluaXRp
YWxpemF0aW9uOwpAQCAtMTQ1NCw3ICsxNDM5LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5R2V0QgogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gz
MihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0
eXBlKSkpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGxvYWRUeXBlZEFycmF5VmVjdG9yKGJhc2UsIHNjcmF0
Y2gpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpLCBzY3JhdGNoKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5
cGUpKSB7CiAgICAgY2FzZSAxOgpAQCAtMTUyNSw3ICsxNTEwLDcgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFy
cmF5VHlwZSh0eXBlKSkpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGxvYWRUeXBlZEFycmF5VmVjdG9yKGJh
c2UsIHNjcmF0Y2gpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgpAQCAtMTU5Miw3ICsxNTc3LDcgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAogICAgIC8vIFdlIHdvdWxk
IGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQg
dGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQu
Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBsYXRlU2Ny
YXRjaCkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKICAgICBpZiAoaXNDbGFtcGVkKHR5
cGUpKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKQEAgLTE2Nzcs
NyArMTY2Miw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAg
ICAKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9i
eV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNl
IHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIHNsb3dDYXNlcy5hcHBlbmQobG9hZFR5cGVkQXJyYXlW
ZWN0b3IoYmFzZSwgbGF0ZVNjcmF0Y2gpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCiAg
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTE3NiwxMCArMTE3Niw5
IEBAIF9sbGludF9vcF9pc19vYmplY3Q6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBsb2Fk
UHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0
b3JhZ2UsIHZhbHVlLCBzbG93KQorbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChw
cm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0IHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKICAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UKLSAgICBjb3B5QmFycmllcihvYmplY3RBbmRTdG9yYWdlLCBzbG93KQogICAgIG5lZ2kg
cHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3Bl
cnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CkBAIC0xMTkwLDEwICsxMTg5LDkgQEAgbWFj
cm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZQogZW5kCiAKIAotbWFjcm8gc3Rv
cmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5k
U3RvcmFnZSwgdmFsdWUsIHNsb3cpCittYWNybyBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0
IHByb3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKICAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFu
ZFN0b3JhZ2UKLSAgICBjb3B5QmFycmllcihvYmplY3RBbmRTdG9yYWdlLCBzbG93KQogICAgIG5l
Z2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4aTJxIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHBy
b3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CkBAIC0xMjEyLDcgKzEyMTAsNyBAQCBf
bGxpbnRfb3BfZ2V0X2J5X2lkOgogICAgIGJpbmVxIHQyLCB0MSwgLm9wR2V0QnlJZFNsb3cKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDEsIHQyKQotICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQzLCB0MCwgLm9w
R2V0QnlJZFNsb3cpCisgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQw
KQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCiAgICAgdmFsdWVQcm9maWxlKHQwLCA4LCB0
MSkKICAgICBkaXNwYXRjaCg5KQpAQCAtMTIzMyw3ICsxMjMxLDYgQEAgX2xsaW50X29wX2dldF9h
cnJheV9sZW5ndGg6CiAgICAgYnRpeiB0MiwgSW5kZXhpbmdTaGFwZU1hc2ssIC5vcEdldEFycmF5
TGVuZ3RoU2xvdwogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKICAgICBsb2FkcCBK
U09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MAotICAgIGNvcHlCYXJyaWVyKHQwLCAub3BHZXRB
cnJheUxlbmd0aFNsb3cpCiAgICAgbG9hZGkgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwgdDAKICAgICBiaWx0IHQwLCAw
LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBvcnEgdGFnVHlwZU51bWJlciwgdDAKQEAgLTEz
NzcsNyArMTM3NCw3IEBAIF9sbGludF9vcF9wdXRfYnlfaWQ6CiAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbig1LCB0MSkKLSAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9m
ZnNldCh0MSwgdDAsIHQyLCAub3BQdXRCeUlkU2xvdykKKyAgICBzdG9yZVByb3BlcnR5QXRWYXJp
YWJsZU9mZnNldCh0MSwgdDAsIHQyKQogICAgIGRpc3BhdGNoKDkpCiAKIC5vcFB1dEJ5SWRTbG93
OgpAQCAtMTM5Niw3ICsxMzkzLDYgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4aTJx
IHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCi0gICAgY29w
eUJhcnJpZXIodDMsIC5vcEdldEJ5VmFsU2xvdykKICAgICBhbmRpIEluZGV4aW5nU2hhcGVNYXNr
LCB0MgogICAgIGJpZXEgdDIsIEludDMyU2hhcGUsIC5vcEdldEJ5VmFsSXNDb250aWd1b3VzCiAg
ICAgYmluZXEgdDIsIENvbnRpZ3VvdXNTaGFwZSwgLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCkBA
IC0xNDY3LDcgKzE0NjMsNiBAQCBtYWNybyBwdXRCeVZhbChzbG93UGF0aCkKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgc3hpMnEg
dDMsIHQzCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKLSAgICBjb3B5
QmFycmllcih0MCwgLm9wUHV0QnlWYWxTbG93KQogICAgIGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ss
IHQyCiAgICAgYmluZXEgdDIsIEludDMyU2hhcGUsIC5vcFB1dEJ5VmFsTm90SW50MzIKICAgICBj
b250aWd1b3VzUHV0QnlWYWwoCkBAIC0xOTg4LDkgKzE5ODMsOSBAQCBtYWNybyBsb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsCiAgICAgYnBuZXEgdDIsIHQxLCBzbG93UGF0aAogZW5k
CiAKLW1hY3JvIGdldFByb3BlcnR5KHNsb3cpCittYWNybyBnZXRQcm9wZXJ0eSgpCiAgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQotICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZz
ZXQodDEsIHQwLCB0Miwgc2xvdykKKyAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQx
LCB0MCwgdDIpCiAgICAgdmFsdWVQcm9maWxlKHQyLCA3LCB0MCkKICAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMSwgdDApCiAgICAgc3RvcmVxIHQyLCBbY2ZyLCB0MCwgOF0KQEAgLTIwMjEsNyAr
MjAxNiw3IEBAIF9sbGludF9vcF9nZXRfZnJvbV9zY29wZToKICNnR2xvYmFsUHJvcGVydHk6CiAg
ICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuZ0dsb2JhbFZhcgogICAgIGxvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soMiwgLmdEeW5hbWljKQotICAgIGdldFByb3BlcnR5KC5nRHluYW1pYykKKyAg
ICBnZXRQcm9wZXJ0eSgpCiAgICAgZGlzcGF0Y2goOCkKIAogLmdHbG9iYWxWYXI6CkBAIC0yMDQ2
LDcgKzIwNDEsNyBAQCBfbGxpbnRfb3BfZ2V0X2Zyb21fc2NvcGU6CiAuZ0dsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCAuZ0dsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAg
ICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKDIsIC5nRHluYW1pYykKLSAgICBnZXRQcm9wZXJ0eSgu
Z0R5bmFtaWMpCisgICAgZ2V0UHJvcGVydHkoKQogICAgIGRpc3BhdGNoKDgpCiAKIC5nR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKQEAgLTIwNzYsMTEgKzIwNzEsMTEgQEAgX2xsaW50
X29wX2dldF9mcm9tX3Njb3BlOgogICAgIGRpc3BhdGNoKDgpCiAKIAotbWFjcm8gcHV0UHJvcGVy
dHkoc2xvdykKK21hY3JvIHB1dFByb3BlcnR5KCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
MywgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCiAgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDYsIHQxKQotICAgIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQx
LCB0MCwgdDIsIHNsb3cpCisgICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQw
LCB0MikKIGVuZAogCiBtYWNybyBwdXRHbG9iYWxWYXJpYWJsZSgpCkBAIC0yMTM4LDcgKzIxMzMs
NyBAQCBfbGxpbnRfb3BfcHV0X3RvX3Njb3BlOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0
eSwgLnBHbG9iYWxWYXIKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgbG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjaygxLCAucER5bmFtaWMpCi0gICAgcHV0UHJvcGVydHkoLnBEeW5h
bWljKQorICAgIHB1dFByb3BlcnR5KCkKICAgICBkaXNwYXRjaCg3KQogCiAucEdsb2JhbFZhcjoK
QEAgLTIxNjUsNyArMjE2MCw3IEBAIF9sbGludF9vcF9wdXRfdG9fc2NvcGU6CiAgICAgYmluZXEg
dDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcywgLnBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcygxLCAzKQogICAg
IGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMSwgLnBEeW5hbWljKQotICAgIHB1dFByb3BlcnR5KC5w
RHluYW1pYykKKyAgICBwdXRQcm9wZXJ0eSgpCiAgICAgZGlzcGF0Y2goNykKIAogLnBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTk4MTUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjEsOCArMjIxLDYgQEAgY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3QgPSAweDM4CiBjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIg
PSAweDQwCiBjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDgKIAotY29uc3QgQ29w
eUJhcnJpZXJTcGFjZUJpdHMgPSAzCi0KIGNvbnN0IENhbGxPcENvZGVTaXplID0gOQogCiBpZiBY
ODZfNjQgb3IgQVJNNjQgb3IgQ19MT09QCkBAIC02NjEsMTAgKzY1OSw2IEBAIG1hY3JvIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChkZXMKICAgICBlbmQKIGVuZAogCi1tYWNybyBjb3B5
QmFycmllcih2YWx1ZSwgc2xvdykKLSAgICBidHBueiB2YWx1ZSwgQ29weUJhcnJpZXJTcGFjZUJp
dHMsIHNsb3cKLWVuZAotCiBtYWNybyBmdW5jdGlvblByb2xvZ3VlKCkKICAgICBpZiBYODYgb3Ig
WDg2X1dJTiBvciBYODZfNjQgb3IgWDg2XzY0X1dJTgogICAgICAgICBwdXNoIGNmcgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIERpcmVj
dEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fb3Zl
cnJpZGVzKSB7CiAgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKAogICAgICAgICAgICAgdGhpc09i
amVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuLAotICAgICAgICAgICAgdGhp
c09iamVjdC0+bV9vdmVycmlkZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwgdGhpc09iamVjdC0+b3Zl
cnJpZGVzU2l6ZSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgp
LCB0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpOwogICAgIH0KIH0KIApAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEoKICAgICAKICAg
ICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9r
ZW4pOwogICAgIAotICAgIHZvaWQqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJp
ZGVzLmdldFdpdGhvdXRCYXJyaWVyKCk7CisgICAgdm9pZCogb2xkT3ZlcnJpZGVzID0gdGhpc09i
amVjdC0+bV9vdmVycmlkZXMuZ2V0KCk7CiAgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHkob2xkT3ZlcnJpZGVzKSkgewogICAgICAgICBib29sKiBuZXdPdmVycmlkZXMgPSBzdGF0aWNf
Y2FzdDxib29sKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPm92ZXJyaWRl
c1NpemUoKSkpOwogICAgICAgICBtZW1jcHkobmV3T3ZlcnJpZGVzLCBvbGRPdmVycmlkZXMsIHRo
aXNPYmplY3QtPm1fbGVuZ3RoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIERpcmVjdEFyZ3Vt
ZW50czo6b3ZlcnJpZGVUaGluZ3NJZk5lCiB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVB
cmd1bWVudChWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQogewogICAgIG92ZXJyaWRlVGhpbmdzSWZO
ZWNlc3Nhcnkodm0pOwotICAgIG1fb3ZlcnJpZGVzLmdldCh0aGlzKVtpbmRleF0gPSB0cnVlOwor
ICAgIG1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7CiB9CiAKIHZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAko
cmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX292ZXJyaWRlcyB8fCAhbV9vdmVycmlk
ZXMuZ2V0KHRoaXMpW2ldKTsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3Zl
cnJpZGVzIHx8ICFtX292ZXJyaWRlcy5nZXQoKVtpXSk7CiAgICAgfQogCiAgICAgYm9vbCBjYW5B
Y2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseUluREZHKHVpbnQzMl90IGkpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTk4MTUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC0zOTEsNyAr
MzkxLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAogCiBib29s
IEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpOwogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xh
c3M6CiAgICAgICAgIGlmICghbmV3TGVuZ3RoKQpAQCAtNDUyLDcgKzQ1Miw3IEBAIGJvb2wgSlNB
cnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKIAogSlNWYWx1ZSBKU0FycmF5Ojpwb3Ao
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlD
bGFzczoKQEAgLTU0OSw3ICs1NDksNyBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUq
IGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVz
IHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgogdm9pZCBKU0FycmF5Ojpw
dXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkp
IHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKQEAgLTcwMSw5ICs3MDEsOSBAQCBKU0FycmF5KiBK
U0FycmF5OjpmYXN0U2xpY2UoRXhlY1N0YXRlJiBlCiAKICAgICAgICAgYXV0byYgcmVzdWx0QnV0
dGVyZmx5ID0gKnJlc3VsdEFycmF5LT5idXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGFycmF5VHlw
ZSA9PSBBcnJheVdpdGhEb3VibGUpCi0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5
LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGln
dW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50
KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgp
LmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBz
dGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKSwgbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9m
KEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5j
b250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91cygpLmRhdGEo
KSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKICAgICAgICAgcmVzdWx0
QnV0dGVyZmx5LnNldFB1YmxpY0xlbmd0aChjb3VudCk7CiAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dEFycmF5OwpAQCAtNzIwLDggKzcyMCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQXJyYXk6OmZhc3RD
b25jYXRXaXRoKEUKICAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAgQVNTRVJUKG5ld0FycmF5
VHlwZSA9PSBmYXN0Q29uY2F0VHlwZSh2bSwgKnRoaXMsIG90aGVyQXJyYXkpKTsKIAotICAgIHVu
c2lnbmVkIHRoaXNBcnJheVNpemUgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0
aCgpOwotICAgIHVuc2lnbmVkIG90aGVyQXJyYXlTaXplID0gb3RoZXJBcnJheS5tX2J1dHRlcmZs
eS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHRoaXNBcnJheVNpemUg
PSBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgb3RoZXJB
cnJheVNpemUgPSBvdGhlckFycmF5Lm1fYnV0dGVyZmx5LmdldCgpLT5wdWJsaWNMZW5ndGgoKTsK
ICAgICBBU1NFUlQodGhpc0FycmF5U2l6ZSArIG90aGVyQXJyYXlTaXplIDwgTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCk7CiAKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdFN0cnVjdHVyZSA9IGV4ZWMubGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24obmV3QXJyYXlUeXBlKTsKQEAgLTczMywxMSArNzMzLDExIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQXJyYXk6OmZhc3RDb25jYXRXaXRoKEUKICAgICBhdXRvJiBvdGhlckJ1dHRlcmZseSA9
ICpvdGhlckFycmF5LmJ1dHRlcmZseSgpOwogICAgIGlmIChuZXdBcnJheVR5cGUgPT0gQXJyYXlX
aXRoRG91YmxlKSB7CiAgICAgICAgIGF1dG8gYnVmZmVyID0gcmVzdWx0QnV0dGVyZmx5LmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICog
dGhpc0FycmF5U2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0dGVyZmx5LmdldCgp
LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzQXJyYXlT
aXplKTsKICAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHRoaXNBcnJheVNpemUsIG90aGVyQnV0dGVy
Zmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIG90aGVyQXJy
YXlTaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlc3VsdEJ1dHRl
cmZseS5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRl
cmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRo
aXNBcnJheVNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5nZXQoKS0+
Y29udGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogdGhpc0FycmF5U2l6ZSk7CiAg
ICAgICAgIG1lbWNweShidWZmZXIgKyB0aGlzQXJyYXlTaXplLCBvdGhlckJ1dHRlcmZseS5jb250
aWd1b3VzKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBvdGhlckFycmF5U2l6ZSk7CiAgICAg
fQogCkBAIC04MTAsNyArODEwLDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZQogICAgICAgICAvLyBBZGp1c3QgdGhlIEJ1dHRlcmZseSBhbmQgdGhlIGluZGV4IGJp
YXMuIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGhlcmUgYmVjYXVzZSB3ZSdyZSBjaGFuZ2luZwog
ICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIEJ1dHRlcmZseSwgd2hpY2ggbmVlZHMgdG8gcG9p
bnQgYXQgdGhlIGZpcnN0IGluZGV4ZWQgcHJvcGVydHkgaW4gdGhlIHVzZWQKICAgICAgICAgLy8g
cG9ydGlvbiBvZiB0aGUgdmVjdG9yLgotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+c2hpZnQoc3RydWN0dXJl
KCksIGNvdW50KTsKICAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoYnV0dGVy
Zmx5KTsKICAgICAgICAgc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAg
ICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNvdW50OwpAQCAtODU1LDcgKzg1NSw3IEBAIGJv
b2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50ID4gMCk7CiAKLSAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC05OTQsNyArOTk0LDcgQEAgYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogCiBib29sIEpTQXJyYXk6OnVuc2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCgpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFy
cmF5Q2xhc3M6CkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
PnZtKCkpKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT52bSgpLCBvbGRM
ZW5ndGggKyBjb3VudCk7Ci0gICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KTsKKyAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAKICAgICAgICAgLy8g
V2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3Mg
YXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2gg
c2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3Rv
cmFnZSBtb2RlLgpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRXaXRoQW55SW5kZXhpbgogICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVj
LT52bSgpKSk7CiAgICAgICAgIAogICAgICAgICBlbnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwgb2xk
TGVuZ3RoICsgY291bnQpOwotICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICAKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmlu
ZyB0aGluZ3MgYXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8v
IHRocm91Z2ggc2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGlu
IEFycmF5U3RvcmFnZSBtb2RlLgpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgdm9pZCBKU0FycmF5Ojpm
aWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KCk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAg
IGNhc2UgQXJyYXlDbGFzczoKQEAgLTExNTUsNyArMTE1NSw3IEBAIHZvaWQgSlNBcnJheTo6Y29w
eVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAvLyBGSVhNRTogV2hhdCBwcmV2ZW50cyB0aGlz
IGZyb20gYmVpbmcgY2FsbGVkIHdpdGggYSBSdW50aW1lQXJyYXk/IFRoZSBsZW5ndGggZnVuY3Rp
b24gd2lsbCBhbHdheXMgcmV0dXJuIDAgaW4gdGhhdCBjYXNlLgogICAgIEFTU0VSVChsZW5ndGgg
PT0gdGhpcy0+bGVuZ3RoKCkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQoKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJh
eUNsYXNzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTMsNyArMjEzLDcgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUoSlNDZWxsKgog
ICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1
ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJz
aXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5
KTsKICAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKLSAg
ICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSk7
CisgICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2NCwxNCArMTY0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJu
IGhhc0FycmF5QnVmZmVyKCkgJiYgIXZlY3RvcigpOyB9CiAgICAgdm9pZCBuZXV0ZXIoKTsKICAg
ICAKLSAgICB2b2lkKiB2ZWN0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yLmdl
dFByZWRpY2F0ZWQoCi0gICAgICAgICAgICB0aGlzLAotICAgICAgICAgICAgW3RoaXNdICgpIC0+
IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiBtb2RlKCkgPT0gRmFzdFR5cGVkQXJyYXk7
Ci0gICAgICAgICAgICB9KTsKLSAgICB9CisgICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92
ZWN0b3IuZ2V0KCk7IH0KICAgICAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KCk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIyLDcgKzQyMiw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnYKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewogICAgIGNhc2UgRmFz
dFR5cGVkQXJyYXk6IHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fdmVjdG9yKQotICAgICAg
ICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlU
b2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSwgdGhpc09iamVj
dC0+Ynl0ZVNpemUoKSk7CisgICAgICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0
LCBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSwg
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkBAIC00NDksNyArNDQ5LDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6YwogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKHRva2VuID09IFR5
cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KLSAgICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxk
Q29weSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRXaXRob3V0QmFycmllcigpKSkgeworICAgICAg
ICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCgp
KSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwogICAgICAgICB2b2lk
KiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT52ZWN0b3IoKTsKICAgICAgICAgdm9pZCogbmV3VmVj
dG9yID0gdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNp
b24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVj
dC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91dEJhcnJpZXIoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChidXR0ZXJmbHkp
CiAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwg
dGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwogCkBAIC0yMzMsNyArMjMzLDcg
QEAgdm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIAogICAgIGlmICh0b2tl
biAhPSBCdXR0ZXJmbHlDb3B5VG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldFdpdGhvdXRCYXJy
aWVyKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS5nZXQoKTsKICAgICBpZiAoYnV0dGVyZmx5KQogICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0
dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZVNpemUoKSk7CiB9CkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBKU09iamVjdDo6aGVhcFNu
YXBzaG90KEpTQ2VsbCogY2VsbAogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRQcm9wZXJ0eU5h
bWVFZGdlKHRoaXNPYmplY3QsIHRvVmFsdWUuYXNDZWxsKCksIGVudHJ5LmtleSk7CiAgICAgfQog
Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXRX
aXRob3V0QmFycmllcigpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+
bV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKGJ1dHRlcmZseSkgewogICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGRhdGE7CiAgICAgICAgIHVpbnQzMl90IGNvdW50ID0gMDsKQEAgLTM4
OSw3ICszODksNyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIApAQCAtNTQ4LDcgKzU0OCw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXNP
YmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAK
ICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTcwLDcgKzU3MCw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTog
ewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7
CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBKU09i
amVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNbwogICAgICAgICAgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIHN0b3JhZ2Up
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKSk7
CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTY4Miw3ICs2ODIsNyBAQCBCdXR0
ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlCiAgICAgQVNTRVJUKCFpbmRleGlu
Z1Nob3VsZEJlU3BhcnNlKCkpOwogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4
KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlz
LCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAw
LAogICAgICAgICBlbGVtZW50U2l6ZSAqIHZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxl
bmd0aCh2ZWN0b3JMZW5ndGgpOwpAQCAtNzM0LDcgKzczNCw3IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4
aW5nVHlwZSgpOwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0
aWVzKG9sZFR5cGUpKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2
bSwgdGhpcywgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNl
LCAwLAorICAgICAgICBtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRl
cmZseSk7CiAKQEAgLTc1OCwzMiArNzU4LDMyIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVj
dDo6Y29udmVydFVuZGUKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgp
KSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKHZtKSwgQWxsb2NhdGVJbnQzMikpOwotICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNJbnQzMigpOworICAgIHJldHVybiBtX2J1dHRlcmZs
eS5nZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKIENvbnRpZ3VvdXNEb3VibGVzIEpTT2Jq
ZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNV
bmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQ
TmFOOwogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBt
X2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewog
ICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKICAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LT5jb250aWd1b3VzKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3Vz
KCk7CiB9CiAKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5
U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMoVk0mIHZtLCB1bnNpZ25lZCBuZWVkZWRMZW5n
dGgpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwot
ICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KCkt
PnB1YmxpY0xlbmd0aCgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVTaXplKCk7CiAgICAgCkBAIC03OTIsNyArNzkyLDcgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29uc3RydWN0Q29udmVydAogICAgIAogICAgIG1lbWNweSgKICAg
ICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKLSAg
ICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlTaXplLAogICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKICAgICAKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwpAQCAtODEwLDcgKzgxMCw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnRVbmRlY2lkZWQKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNT
RVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdl
V2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKICAgICAvLyBObyBuZWVk
IHRvIGNvcHkgZWxlbWVudHMuCiAgICAgCkBAIC04MjgsNyArODI4LDcgQEAgQ29udGlndW91c0Rv
dWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogewogICAgIEFTU0VSVChoYXNJbnQzMihpbmRl
eGluZ1R5cGUoKSkpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQodGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7
CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudCA9ICZidXR0ZXJmbHktPmNv
bnRpZ3VvdXNJbnQzMigpW2ldOwogICAgICAgICBkb3VibGUqIGN1cnJlbnRBc0RvdWJsZSA9IGJp
dHdpc2VfY2FzdDxkb3VibGUqPihjdXJyZW50KTsKQEAgLTg0Miw3ICs4NDIsNyBAQCBDb250aWd1
b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiAgICAgfQogICAgIAogICAgIHNldFN0
cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIEFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29u
dGlndW91c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQ29udGlndW91cyhWTSYgdm0pCkBAIC04NTAsNyArODUwLDcgQEAgQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRl
eGluZ1R5cGUoKSkpOwogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91cykp
OwotICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKTsKKyAgICBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTg1OCw5ICs4NTgsOSBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKKyAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJy
YXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKICAgICAgICAgSlNWYWx1
ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGlmICh2KSB7
CkBAIC04ODQsNyArODg0LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0
RG91YgogewogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgewogICAgICAgICBkb3VibGUqIGN1cnJl
bnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogY3VycmVudEFzVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVy
PFVua25vd24+Kj4oY3VycmVudCk7CkBAIC04OTgsNyArODk4LDcgQEAgQ29udGlndW91c0pTVmFs
dWVzIEpTT2JqZWN0Ojpjb252ZXJ0RG91YgogICAgIH0KICAgICAKICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBB
bGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5j
b250aWd1b3VzKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250aWd1b3VzKCk7
CiB9CiAKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFn
ZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQpAQCAtOTA2LDkgKzkw
Niw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5cGUo
KSkpOwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZs
eS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0g
Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwg
dmVjdG9yTGVuZ3RoKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBp
KyspIHsKICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV07CiAgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewpAQCAtOTMzLDkgKzkzMyw5IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkp
KTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHku
Z2V0KCktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNv
bnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZl
Y3Rvckxlbmd0aCk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsr
KSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OwogICAgICAgICBpZiAodikgewpAQCAtMTAwMiw4ICsxMDAyLDggQEAgdm9pZCBKU09iamVjdDo6
Y29udmVydEludDMyRm9yVmFsdWUoVk0mIAogCiB2b2lkIEpTT2JqZWN0OjpzZXRJbmRleFF1aWNr
bHlUb1VuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCkp
OwotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LmdldCgpLT5wdWJsaWNMZW5ndGgo
KSk7CisgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgp
KTsKICAgICBjb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICBzZXRJbmRl
eFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CiB9CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiAgICAgICAgIHJldHVybiBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICByZXR1cm4gZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0s
IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCBib29sIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChp
IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CkBAIC0xNzE3LDcgKzE3
MTcsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1f
YnV0dGVyZmx5LmdldChvYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKQEAgLTE4OTAsNyArMTg5MCw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHIKIGJvb2wgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0
ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIG1hcCA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIGF1dG8gbWFw
ID0gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsK
IAogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAo
ZGVzY3JpcHRvci52YWx1ZSgpKQpAQCAtMTk1MCw3ICsxOTUwLDcgQEAgYm9vbCBKU09iamVjdDo6
ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgIGlmIChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMo
KSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKICAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4
ZWRBY2Nlc3NvcnMoZXhlYy0+dm0oKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQo
KTsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS5nZXQoKS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1hcCk7
CiAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtb
R2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUg
UC4KQEAgLTE5ODIsNyArMTk4Miw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eSgKICAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKIAogICAgICAgICBw
dXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0
cyk7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
OworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAg
ICAgICBpZiAoaW5kZXggPj0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpCiAg
ICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAx
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTExLDcgKzIxMTEsNyBAQCBib29sIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgQVNTRVJUKChpbmRleGluZ1R5cGUo
KSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBpbmRleGluZ1NoYXBlKTsKICAgICBBU1NFUlQoIWlu
ZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCgpOwogICAgIAogICAgIC8vIEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlz
IGVpdGhlciBncmVhdGVyIHRoYW4gdGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgog
ICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3RoLgpAQCAtMjEzMiw3ICsyMTMyLDcg
QEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIH0KIAogICAg
IGVuc3VyZUxlbmd0aCh2bSwgaSArIDEpOwotICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKTsKKyAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKGlu
ZGV4aW5nU2hhcGUpIHsKQEAgLTI0MTUsNyArMjQxNSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChp
IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlm
IChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydEludDMyVG9BcnJheVN0b3JhZ2Uodm0p
KTsKICAgICAgICAgfQpAQCAtMjQyOSw3ICsyNDI5LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICAKICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChp
IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlm
IChpIDwgbV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZt
KSk7CiAgICAgICAgIH0KQEAgLTI0NDgsNyArMjQ0OCw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAg
ICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlT
dG9yYWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTI0NTgsNyArMjQ1OCw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAg
ICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAg
ICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCgpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBhcnJheVN0b3JhZ2UoKSk7
CkBAIC0yNTQ0LDggKzI1NDQsOCBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0Ojpn
ZXROZXdWCiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIAogICAgIGlmIChoYXNJbmRleGVkUHJv
cGVydGllcyhpbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0g
bV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1
dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVj
dG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKQEAgLTI2NTEsNyArMjY1MSw3IEBA
IGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKIAogdm9pZCBKU09iamVj
dDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIAogICAgIEFTU0VSVChsZW5ndGgg
PCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlw
ZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlw
ZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKQEAgLTI2ODEsMTEgKzI2ODEs
MTEgQEAgdm9pZCBKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcgogICAgIEFTU0VS
VChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgIEFTU0VSVChsZW5ndGggPCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5
cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5
cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgQVNTRVJUKG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkgPiBsZW5ndGgpOwotICAgIEFTU0VSVCgh
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUoKSkpOworICAgIEFTU0VSVChtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3RoKCkg
PiBsZW5ndGgpOworICAgIEFTU0VSVCghbV9idXR0ZXJmbHkuZ2V0KCktPmluZGV4aW5nSGVhZGVy
KCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKGxlbmd0aCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGxlbmd0aCkpOwogICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3
QnV0dGVyZmx5KTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwog
ICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CkBAIC0yNjk4LDcgKzI2
OTgsNyBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgp
LCBmb3IgdGhlIHByb3BlcnR5CiAgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUg
YWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCiAKLSAgICByZXR1cm4gQnV0
dGVyZmx5OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgcmV0dXJu
IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKG1fYnV0dGVyZmx5LmdldCgp
LCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIHN0YXRp
YyBKU0JvdW5kU2xvdEJhc2VGdW5jdGlvbiogZ2V0Qm91bmRTbG90QmFzZUZ1bmN0aW9uRm9yR2V0
dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmIHNsb3QsIEN1c3RvbUdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyLCBK
U0JvdW5kU2xvdEJhc2VGdW5jdGlvbjo6VHlwZSB0eXBlKQpAQCAtMzA1MSw3ICszMDUxLDcgQEAg
dWludDMyX3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LmdldChvYmplY3QpLT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5t
X2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTk4MTUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMTYyLDE0ICsxNjIsMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFo
YXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7
CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+cHVibGljTGVuZ3RoKCk7CiAgICAg
fQogICAgICAgICAKICAgICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgoKQogICAgIHsKICAgICAg
ICAgaWYgKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIHB1dElubGluZShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMjE0
LDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1
bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9J
TkRFWElOR19UWVBFUzoKQEAgLTI0MCw3ICsyNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
IEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgewotICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNoIChpbmRl
eGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KS5hc0ludDMyKCkpOwpAQCAtMjU4LDcgKzI1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
SlNWYWx1ZSB0cnlHZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkgY29uc3QKICAgICB7Ci0gICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgICAgICBzd2l0
Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CkBAIC0zMTIs
NyArMzEyLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBib29sIGNhblNldEluZGV4UXVpY2ts
eSh1bnNpZ25lZCBpKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURF
RF9JTkRFWElOR19UWVBFUzoKQEAgLTM0Myw3ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNh
c2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52
ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHkuZ2V0KCkt
PnZlY3Rvckxlbmd0aCgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1Miw3
ICszNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZN
JiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAg
ICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CkBAIC00MDksNyArNDA5
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewotICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1R5cGUpIHsKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZCh2bSwgaSwgdik7
CkBAIC00NjcsNyArNDY3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuICEh
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAg
ICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ4NCw3ICs0ODQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01OTMsMTEgKzU5MywxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgfQogICAgICAgICAKLSAgICBj
b25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKTsgfQotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpOyB9CisgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkg
eyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KICAgICAgICAgCi0gICAgQ29uc3RQcm9wZXJ0
eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZM
aW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9y
YWdlKCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAg
UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS5n
ZXQoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QK
ICAgICB7CkBAIC03MTMsNyArNzEzLDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNKU1ZhbHVl
cyBlbnN1cmVJbnQzMihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0ludDMy
KGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpLT5jb250aWd1b3VzSW50MzIoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5n
ZXQoKS0+Y29udGlndW91c0ludDMyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVu
c3VyZUludDMyU2xvdyh2bSk7CiAgICAgfQpAQCAtNzI1LDcgKzcyNSw3IEBAIHB1YmxpYzoKICAg
ICBDb250aWd1b3VzRG91YmxlcyBlbnN1cmVEb3VibGUoVk0mIHZtKQogICAgIHsKICAgICAgICAg
aWYgKExJS0VMWShoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKS0+Y29udGlndW91c0RvdWJsZSgpOwogICAgICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVEb3VibGVTbG93KHZtKTsKICAgICB9CkBAIC03MzUs
NyArNzM1LDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1
b3VzKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhpbmRl
eGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
Y29udGlndW91cygpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5jb250
aWd1b3VzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNT
bG93KHZtKTsKICAgICB9CkBAIC03NDcsNyArNzQ3LDcgQEAgcHVibGljOgogICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtF
TFkoaGFzQW55QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAgcmV0dXJu
IGVuc3VyZUFycmF5U3RvcmFnZVNsb3codm0pOwogICAgIH0KQEAgLTc5NSw3ICs3OTUsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpOwotICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICB9CiAgICAgICAgIAog
ICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9u
IHdoZXRoZXIgb3Igbm90IHRoZQpAQCAtODA0LDcgKzgwNCw3IEBAIHByb3RlY3RlZDoKICAgICB7
CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtODY5LDExICs4NjksMTEgQEAgcHJvdGVj
dGVkOgogICAgICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICAgICAg
QVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5n
VHlwZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRl
eGluZ1R5cGUoKSkpOwogCi0gICAgICAgIGlmIChtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rv
ckxlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KCktPnZlY3Rv
ckxlbmd0aCgpIDwgbGVuZ3RoKQogICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVu
Z3RoKTsKICAgICAgICAgICAgIAotICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5w
dWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgIGlmIChtX2J1dHRlcmZseS5nZXQo
KS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICBtX2J1dHRlcmZseS5nZXQo
KS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBDYWxs
IHRoaXMgaWYgeW91IHdhbnQgdG8gc2hyaW5rIHRoZSBidXR0ZXJmbHkgYmFja2luZyBzdG9yZSwg
YW5kIHlvdSdyZQpAQCAtMTQ4OSw3ICsxNDg5LDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1
dERpcmVjdFdpdGhvdXRUcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NF
UlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsK
ICAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOwotICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5w
dXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBz
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCShyZXZpc2lvbiAxOTgxNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTg1LDcgKzE4NSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRy
eSwgSlMKIHsKICAgICBpZiAoIWVuc3VyZVNsb3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIEVudHJ5KiBlbnRyeSA9ICZtX21hcERhdGEtPm1fZW50cmllcy5nZXQobV9tYXBEYXRhLT5t
X293bmVyKVttX2luZGV4XTsKKyAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJp
ZXMuZ2V0KClbbV9pbmRleF07CiAgICAgcGFpciA9IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUs
IEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwgZW50cnktPnZhbHVlKCkuZ2V0KCkpOwogICAg
IG1faW5kZXggKz0gMTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBBTFdB
WVNfSU5MSU5FIGludDMyX3QgTWFwRGF0YUltcGw8RW50cnksCiAgICAgaWYgKGlzRmluaXNoZWQo
KSkKICAgICAgICAgcmV0dXJuIG1faW5kZXg7CiAKLSAgICBFbnRyeSogZW50cmllcyA9IG1fbWFw
RGF0YS0+bV9lbnRyaWVzLmdldChtX21hcERhdGEtPm1fb3duZXIpOworICAgIEVudHJ5KiBlbnRy
aWVzID0gbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KCk7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFw
RGF0YS0+bV9zaXplOwogICAgIHdoaWxlIChzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5kZXgpIDwg
ZW5kICYmICFlbnRyaWVzW21faW5kZXhdLmtleSgpKQogICAgICAgICBtX2luZGV4Kys7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmgJKHJl
dmlzaW9uIDE5ODE1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTYwLDI1ICs2MCwyNSBAQCBpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBs
PEVudHJ5LCBKU0l0ZXJhCiAgICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5m
aW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSk7CiAgICAgICAgIGlm
IChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwor
ICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQoKVtpdGVyLT52YWx1ZV07CiAgICAgfQogICAg
IGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgewogICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5bWJv
bEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgp
KTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVtp
dGVyLT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldCgpW2l0ZXItPnZhbHVl
XTsKICAgICB9CiAgICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICBhdXRvIGl0
ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgpKTsKICAgICAgICAg
aWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwor
ICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQoKVtpdGVyLT52YWx1ZV07CiAgICAgfQogCiAg
ICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5
LnZhbHVlKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVtpdGVyLT52
YWx1ZV07CisgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KClbaXRlci0+dmFsdWVdOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KQEAgLTkzLDE0ICs5
MywxNCBAQCBpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhCiB7CiAgICAg
dHlwZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlvbiA9IG1hcC5maW5kKGtleSk7CiAgICAgaWYg
KGxvY2F0aW9uICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1f
b3duZXIpW2xvY2F0aW9uLT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldCgp
W2xvY2F0aW9uLT52YWx1ZV07CiAKICAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGV4ZWMs
IG93bmVyKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQo
a2V5LCBtX3NpemUpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAg
ICBFbnRyeSogZW50cnkgPSAmbV9lbnRyaWVzLmdldChtX293bmVyKVttX3NpemUrK107CisgICAg
RW50cnkqIGVudHJ5ID0gJm1fZW50cmllcy5nZXQoKVttX3NpemUrK107CiAgICAgbmV3IChlbnRy
eSkgRW50cnkoKTsKICAgICBlbnRyeS0+c2V0S2V5KGV4ZWMtPnZtKCksIG93bmVyLCBrZXlWYWx1
ZS52YWx1ZSk7CiAgICAgcmV0dXJuIGVudHJ5OwpAQCAtMTY0LDcgKzE2NCw3IEBAIGlubGluZSBi
b29sIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICAgICAgbG9jYXRpb24gPSBpdGVy
LT52YWx1ZTsKICAgICAgICAgbV92YWx1ZUtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwogICAgIH0K
LSAgICBtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2xvY2F0aW9uXS5jbGVhcigpOworICAgIG1fZW50
cmllcy5nZXQoKVtsb2NhdGlvbl0uY2xlYXIoKTsKICAgICBtX2RlbGV0ZWRDb3VudCsrOwogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMTc2LDcgKzE3Niw3IEBAIGlubGluZSB2b2lkIE1hcERhdGFJ
bXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICBpbnQzMl90IG5ld0VuZCA9IDA7CiAgICAgUkVMRUFT
RV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBt
X3NpemU7IGkrKykgewotICAgICAgICBFbnRyeSYgZW50cnkgPSBtX2VudHJpZXMuZ2V0V2l0aG91
dEJhcnJpZXIoKVtpXTsKKyAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmdldCgpW2ld
OwogICAgICAgICBpZiAoIWVudHJ5LmtleSgpKSB7CiAgICAgICAgICAgICBtX2l0ZXJhdG9ycy5m
b3JFYWNoKFtuZXdFbmRdKEpTSXRlcmF0b3IqIGl0ZXJhdG9yLCBKU0l0ZXJhdG9yKikgewogICAg
ICAgICAgICAgICAgIGl0ZXJhdG9yLT5pdGVyYXRvckRhdGEoKS0+ZGlkUmVtb3ZlRW50cnkobmV3
RW5kKTsKQEAgLTE5NSwxMyArMTk1LDEzIEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5
LCBKU0l0ZXJhdG8KIAogICAgIC8vIEZpeHVwIGZvciB0aGUgaGFzaG1hcHMKICAgICBmb3IgKGF1
dG8gcHRyID0gbV92YWx1ZUtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fdmFsdWVLZXllZFRh
YmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRo
b3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAg
cHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXQoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0lu
dDMyKCk7CiAgICAgZm9yIChhdXRvIHB0ciA9IG1fY2VsbEtleWVkVGFibGUuYmVnaW4oKTsgcHRy
ICE9IG1fY2VsbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0g
bV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJ
bnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldCgpW3B0ci0+dmFsdWVd
LmtleSgpLmdldCgpLmFzSW50MzIoKTsKICAgICBmb3IgKGF1dG8gcHRyID0gbV9zdHJpbmdLZXll
ZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCk7ICsrcHRyKQot
ICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRyLT52
YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRy
aWVzLmdldCgpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKICAgICBmb3IgKGF1
dG8gcHRyID0gbV9zeW1ib2xLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N5bWJvbEtleWVk
VGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdp
dGhvdXRCYXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAgICAg
ICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldCgpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFz
SW50MzIoKTsKIAogICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0ZWRDb3Vu
dCk7CiAgICAgbV9kZWxldGVkQ291bnQgPSAwOwpAQCAtMjE3LDcgKzIxNyw3IEBAIGlubGluZSB2
b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICBBU1NFUlQoIXNob3VsZFBhY2so
KSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKICAgICBBU1NFUlQobmV3
Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJp
ZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7CisgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMuZ2V0KCksIHNpemVvZihFbnRyeSkgKiBtX3NpemUp
OwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX2VudHJpZXMuc2V0V2l0aG91
dEJhcnJpZXIoZGVzdGluYXRpb24pOwogfQpAQCAtMjM2LDggKzIzNiw2IEBAIGlubGluZSBDaGVj
a2VkQm9vbGVhbiBNYXBEYXRhSW1wbDxFbnRyeSwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4obmV3U3RvcmFn
ZSk7Ci0gICAgLy8gRG8gYSByZWFkIGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgbV9lbnRyaWVzIHBv
aW50cyB0byB0by1zcGFjZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGlzIEdDIGVwb2NoLgotICAg
IG1fZW50cmllcy5nZXQobV9vd25lcik7IAogICAgIGlmIChzaG91bGRQYWNrKCkpCiAgICAgICAg
IHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CiAg
ICAgZWxzZQpAQCAtMjQ5LDcgKzI0Nyw3IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBNYXBEYXRh
SW1wbDxFbnRyeSwKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9y
PgogaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEVudHJ5KiBl
bnRyaWVzID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCk7CisgICAgRW50cnkqIGVudHJp
ZXMgPSBtX2VudHJpZXMuZ2V0KCk7CiAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKG1fZGVsZXRlZENvdW50KSB7CkBAIC0yNjMsMTQgKzI2MSwxNCBAQCBpbmxpbmUg
dm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJmVudHJpZXNb
MF0pLCBtX3NpemUgKiAoc2l6ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSk7CiAgICAgfQogCi0gICAgdmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdT
dG9yZUNvcHlUb2tlbiwgbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCksIGNhcGFjaXR5SW5C
eXRlcygpKTsKKyAgICB2aXNpdG9yLmNvcHlMYXRlcihvd25lciwgTWFwQmFja2luZ1N0b3JlQ29w
eVRva2VuLCBtX2VudHJpZXMuZ2V0KCksIGNhcGFjaXR5SW5CeXRlcygpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CiBpbmxpbmUgdm9pZCBNYXBE
YXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46OmNvcHlCYWNraW5nU3RvcmUoQ29weVZpc2l0b3Im
IHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKIHsKLSAgICBpZiAodG9rZW4gPT0gTWFwQmFja2lu
Z1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkobV9lbnRyaWVzLmdl
dFdpdGhvdXRCYXJyaWVyKCkpKSB7Ci0gICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRy
aWVzLmdldFdpdGhvdXRCYXJyaWVyKCk7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9y
ZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcy5nZXQoKSkp
IHsKKyAgICAgICAgRW50cnkqIG9sZEVudHJpZXMgPSBtX2VudHJpZXMuZ2V0KCk7CiAgICAgICAg
IEVudHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPih2aXNpdG9yLmFsbG9jYXRl
TmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKCkpKTsKICAgICAgICAgaWYgKHNob3VsZFBhY2soKSkK
ICAgICAgICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIG1fY2Fw
YWNpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2
aXNpb24gMTk4MTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDYgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1c2VNb3ZIaW50UmVtb3ZhbCwgdHJ1ZSwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgdXNlUHV0U3RhY2tTaW5raW5nLCB0cnVlLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCB1c2VPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSwgbnVsbHB0cikgXAot
ICAgIHYoYm9vbCwgdXNlQ29weUJhcnJpZXJPcHRpbWl6YXRpb24sIHRydWUsIG51bGxwdHIpIFwK
ICAgICBcCiAgICAgdihib29sLCB1c2VDb25jdXJyZW50SklULCB0cnVlLCAiYWxsb3dzIHRoZSBE
RkcgLyBGVEwgY29tcGlsYXRpb24gaW4gdGhyZWFkcyBvdGhlciB0aGFuIHRoZSBleGVjdXRpbmcg
SlMgdGhyZWFkIikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRz
LCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDIsIDIpIC0gMSwgbnVsbHB0cikgXApAQCAt
MzcxLDcgKzM3MCw2IEBAIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIHYoZW5hYmxlUG9s
eW1vcnBoaWNDYWxsSW5saW5pbmcsIHVzZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCBTYW1lT3B0
aW9uKSBcCiAgICAgdihlbmFibGVNb3ZIaW50UmVtb3ZhbCwgdXNlTW92SGludFJlbW92YWwsIFNh
bWVPcHRpb24pIFwKICAgICB2KGVuYWJsZU9iamVjdEFsbG9jYXRpb25TaW5raW5nLCB1c2VPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZywgU2FtZU9wdGlvbikgXAotICAgIHYoZW5hYmxlQ29weUJhcnJp
ZXJPcHRpbWl6YXRpb24sIHVzZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uLCBTYW1lT3B0aW9uKSBc
CiAgICAgdihlbmFibGVDb25jdXJyZW50SklULCB1c2VDb25jdXJyZW50SklULCBTYW1lT3B0aW9u
KSBcCiAgICAgdihlbmFibGVQcm9maWxlciwgdXNlUHJvZmlsZXIsIFNhbWVPcHRpb24pIFwKICAg
ICB2KGVuYWJsZUFyY2hpdGVjdHVyZVNwZWNpZmljT3B0aW1pemF0aW9ucywgdXNlQXJjaGl0ZWN0
dXJlU3BlY2lmaWNPcHRpbWl6YXRpb25zLCBTYW1lT3B0aW9uKSBcCg==
</data>
<flag name="review"
          id="298589"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>