<?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>204474</bug_id>
          
          <creation_ts>2019-11-21 14:49:09 -0800</creation_ts>
          <short_desc>[WebAssembly] Validate and generate bytecode in one pass</short_desc>
          <delta_ts>2019-12-05 09:18:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=204893</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>204092</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>annulen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592545</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-21 14:49:09 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592558</commentid>
    <comment_count>1</comment_count>
      <attachid>384095</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-21 15:19:56 -0800</bug_when>
    <thetext>Created attachment 384095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593171</commentid>
    <comment_count>2</comment_count>
      <attachid>384229</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-22 20:50:15 -0800</bug_when>
    <thetext>Created attachment 384229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593206</commentid>
    <comment_count>3</comment_count>
      <attachid>384236</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-11-23 08:39:12 -0800</bug_when>
    <thetext>Created attachment 384236
Patch

Fix CMake build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595251</commentid>
    <comment_count>4</comment_count>
      <attachid>384236</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-12-03 16:15:47 -0800</bug_when>
    <thetext>Comment on attachment 384236
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        This is a 1.5x speedup when compiling the ZenGarden demo.

what do we do for the .validate API? (You should say here.)

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +

you should talk about the new policy that WebAssembly.module compiles bytecode

&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:237
&gt; +    static_assert(std::is_same_v&lt;ResultList, FunctionParser&lt;AirIRGenerator&gt;::ResultList&gt;);

why not just define one to be the other?

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:89
&gt; +            }

maybe ASSERT here that m_state == Validated

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:146
&gt; +#define WASM_VALIDATOR_FAIL_IF(condition, ...) do { \
&gt; +        if (UNLIKELY(condition))                    \
&gt; +            return validationFail(__VA_ARGS__);               \
&gt; +    } while (0)

style nit: line up the &quot;\&quot; or have them be one space after

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:288
&gt; +    WASM_VALIDATOR_FAIL_IF(pointer.type() != I32, m_currentOpcode, &quot; pointer type mismatch&quot;);

maybe instead of &quot;type mismatch&quot; say &quot; pointer type must be an i32&quot;?
(This is probably not new to your patch though, so feel free to ignore)

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:311
&gt; +    WASM_VALIDATOR_FAIL_IF(pointer.type() != I32, m_currentOpcode, &quot; pointer type mismatch&quot;);

ditto

&gt; Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp:58
&gt; +{

ASSERT m_callees?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595611</commentid>
    <comment_count>5</comment_count>
      <attachid>384236</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-12-04 16:01:23 -0800</bug_when>
    <thetext>Comment on attachment 384236
Patch

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

Thanks for the review!

&gt;&gt; Source/JavaScriptCore/ChangeLog:13
&gt;&gt; +        This is a 1.5x speedup when compiling the ZenGarden demo.
&gt; 
&gt; what do we do for the .validate API? (You should say here.)

done

&gt;&gt; Source/JavaScriptCore/ChangeLog:14
&gt;&gt; +
&gt; 
&gt; you should talk about the new policy that WebAssembly.module compiles bytecode

done

&gt;&gt; Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp:237
&gt;&gt; +    static_assert(std::is_same_v&lt;ResultList, FunctionParser&lt;AirIRGenerator&gt;::ResultList&gt;);
&gt; 
&gt; why not just define one to be the other?

I want it to be defined in FunctionParser, and we can&apos;t define it here as FunctionParser&lt;AirIRGenerator&gt;::ResultList because that will fail to instantiate FunctionParser, since that requires ControlType to be defined and ControlType depends on ResultList.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:89
&gt;&gt; +            }
&gt; 
&gt; maybe ASSERT here that m_state == Validated

added

&gt;&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:146
&gt;&gt; +    } while (0)
&gt; 
&gt; style nit: line up the &quot;\&quot; or have them be one space after

fixed

&gt;&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:288
&gt;&gt; +    WASM_VALIDATOR_FAIL_IF(pointer.type() != I32, m_currentOpcode, &quot; pointer type mismatch&quot;);
&gt; 
&gt; maybe instead of &quot;type mismatch&quot; say &quot; pointer type must be an i32&quot;?
&gt; (This is probably not new to your patch though, so feel free to ignore)

I will fix this in a separate patch since there are a lot of existing code that needs fixing.

&gt;&gt; Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp:58
&gt;&gt; +{
&gt; 
&gt; ASSERT m_callees?

added</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595612</commentid>
    <comment_count>6</comment_count>
      <attachid>384859</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-12-04 16:03:59 -0800</bug_when>
    <thetext>Created attachment 384859
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595630</commentid>
    <comment_count>7</comment_count>
      <attachid>384859</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-04 16:41:53 -0800</bug_when>
    <thetext>Comment on attachment 384859
Patch for landing

Rejecting attachment 384859 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 384859, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
eeded at 1 with fuzz 3.
patching file Source/JavaScriptCore/CMakeLists.txt
Hunk #1 succeeded at 366 (offset -2 lines).
patching file Source/JavaScriptCore/DerivedSources-input.xcfilelist
patching file Source/JavaScriptCore/DerivedSources-output.xcfilelist
Hunk #1 succeeded at 60 with fuzz 1 (offset -1 lines).
patching file Source/JavaScriptCore/DerivedSources.make
Hunk #2 succeeded at 353 (offset 2 lines).
patching file Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp
Hunk #18 succeeded at 1799 (offset 77 lines).
Hunk #19 succeeded at 1830 (offset 77 lines).
Hunk #20 succeeded at 1843 (offset 77 lines).
Hunk #21 succeeded at 1861 (offset 77 lines).
Hunk #22 succeeded at 1877 (offset 77 lines).
Hunk #23 succeeded at 1898 (offset 77 lines).
Hunk #24 succeeded at 1936 (offset 77 lines).
Hunk #25 succeeded at 2051 (offset 77 lines).
Hunk #26 succeeded at 2068 (offset 77 lines).
Hunk #27 succeeded at 2093 (offset 77 lines).
Hunk #28 succeeded at 2183 (offset 77 lines).
Hunk #29 succeeded at 2339 (offset 77 lines).
Hunk #30 succeeded at 2357 (offset 77 lines).
Hunk #31 succeeded at 2382 (offset 77 lines).
Hunk #32 succeeded at 2405 (offset 77 lines).
Hunk #33 succeeded at 2994 (offset 77 lines).
Hunk #34 succeeded at 3069 (offset 77 lines).
patching file Source/JavaScriptCore/wasm/WasmAirIRGenerator.h
patching file Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp
Hunk #14 succeeded at 1291 (offset 68 lines).
Hunk #15 succeeded at 1354 (offset 68 lines).
Hunk #16 succeeded at 1390 (offset 68 lines).
Hunk #17 succeeded at 1409 (offset 68 lines).
Hunk #18 succeeded at 1437 (offset 68 lines).
Hunk #19 succeeded at 1456 (offset 68 lines).
Hunk #20 succeeded at 1476 (offset 68 lines).
Hunk #21 succeeded at 1547 (offset 68 lines).
Hunk #22 succeeded at 1568 (offset 68 lines).
Hunk #23 succeeded at 1919 (offset 68 lines).
Hunk #24 succeeded at 1954 (offset 68 lines).
Hunk #25 succeeded at 1978 (offset 68 lines).
patching file Source/JavaScriptCore/wasm/WasmB3IRGenerator.h
patching file Source/JavaScriptCore/wasm/WasmBBQPlan.cpp
patching file Source/JavaScriptCore/wasm/WasmBBQPlan.h
patching file Source/JavaScriptCore/wasm/WasmCodeBlock.cpp
patching file Source/JavaScriptCore/wasm/WasmCodeBlock.h
patching file Source/JavaScriptCore/wasm/WasmEntryPlan.cpp
patching file Source/JavaScriptCore/wasm/WasmEntryPlan.h
patching file Source/JavaScriptCore/wasm/WasmFunctionParser.h
patching file Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp
Hunk #1 succeeded at 49 (offset 1 line).
Hunk #2 succeeded at 72 (offset 1 line).
Hunk #3 succeeded at 92 (offset 1 line).
Hunk #4 succeeded at 105 (offset 1 line).
Hunk #5 succeeded at 137 (offset 1 line).
Hunk #6 succeeded at 154 (offset 1 line).
Hunk #7 succeeded at 182 (offset 1 line).
Hunk #8 succeeded at 234 (offset 1 line).
Hunk #9 succeeded at 250 (offset 1 line).
Hunk #10 succeeded at 293 (offset 1 line).
Hunk #11 succeeded at 363 (offset 1 line).
Hunk #12 succeeded at 408 (offset 1 line).
Hunk #13 succeeded at 433 (offset 1 line).
Hunk #14 succeeded at 525 (offset 1 line).
Hunk #15 succeeded at 590 (offset 1 line).
Hunk #16 succeeded at 696 (offset 1 line).
Hunk #17 succeeded at 756 (offset 1 line).
Hunk #18 succeeded at 806 (offset 20 lines).
Hunk #19 succeeded at 825 (offset 20 lines).
Hunk #20 succeeded at 843 (offset 20 lines).
Hunk #21 succeeded at 853 (offset 20 lines).
Hunk #22 succeeded at 973 (offset 20 lines).
Hunk #23 succeeded at 1005 (offset 20 lines).
Hunk #24 succeeded at 1019 (offset 20 lines).
patching file Source/JavaScriptCore/wasm/WasmLLIntGenerator.h
patching file Source/JavaScriptCore/wasm/WasmLLIntPlan.cpp
patching file Source/JavaScriptCore/wasm/WasmLLIntPlan.h
patching file Source/JavaScriptCore/wasm/WasmModule.cpp
patching file Source/JavaScriptCore/wasm/WasmModule.h
patching file Source/JavaScriptCore/wasm/WasmOMGPlan.cpp
patching file Source/JavaScriptCore/wasm/WasmPlan.cpp
patching file Source/JavaScriptCore/wasm/WasmPlan.h
patching file Source/JavaScriptCore/wasm/WasmSlowPaths.cpp
Hunk #1 succeeded at 411 (offset 7 lines).
patching file Source/JavaScriptCore/wasm/WasmThunks.cpp
patching file Source/JavaScriptCore/wasm/WasmThunks.h
patching file Source/JavaScriptCore/wasm/WasmValidate.cpp
Hunk #4 FAILED at 170.
1 out of 8 hunks FAILED -- saving rejects to file Source/JavaScriptCore/wasm/WasmValidate.cpp.rej
patching file Source/JavaScriptCore/wasm/WasmWorklist.cpp
patching file Source/JavaScriptCore/wasm/generateWasmOpsHeader.py
patching file Source/JavaScriptCore/wasm/generateWasmValidateInlinesHeader.py
rm &apos;Source/JavaScriptCore/wasm/generateWasmValidateInlinesHeader.py&apos;
patching file Source/JavaScriptCore/wasm/js/JSWebAssembly.cpp
Hunk #1 succeeded at 229 (offset 1 line).
Hunk #2 succeeded at 329 (offset 1 line).
patching file Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp
Hunk #1 succeeded at 81 with fuzz 1.

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/13286559</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595679</commentid>
    <comment_count>8</comment_count>
      <attachid>384874</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-12-04 19:57:32 -0800</bug_when>
    <thetext>Created attachment 384874
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595698</commentid>
    <comment_count>9</comment_count>
      <attachid>384874</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-04 20:41:59 -0800</bug_when>
    <thetext>Comment on attachment 384874
Patch for landing

Clearing flags on attachment: 384874

Committed r253140: &lt;https://trac.webkit.org/changeset/253140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595699</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-04 20:42:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595700</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-04 20:42:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/57652345&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595839</commentid>
    <comment_count>12</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-12-05 09:18:44 -0800</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/253140/webkit

caused 11 tests to crash on Mac debug wk1.

tracking in https://bugs.webkit.org/show_bug.cgi?id=204893</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384095</attachid>
            <date>2019-11-21 15:19:56 -0800</date>
            <delta_ts>2019-11-22 20:50:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204474-20191121151955.patch</filename>
            <type>text/plain</type>
            <size>219945</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MDc5ZDE1MDQ4NGZkNDgyYWQ3ODQ5OTBjM2JkN2JhZTM5MDkxY2I3Li4wY2JlMzljOTRhNWM5YzA1
MGYwNTdiNzkyMGJmN2I3OWJkZTFhOTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMjggQEAKKzIwMTktMTEtMjEgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBWYWxpZGF0ZSBhbmQgZ2VuZXJhdGUgYnl0ZWNv
ZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNDQ3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSwgd2UgdHJhdmVyc2UgdGhlIFdlYkFzc2VtYmx5IGNvZGUgdHdpY2U6
CisgICAgICAgIC0gYSBmaXJzdCBzZXJpYWwgcGFzcyB0aGF0IHZhbGlkYXRlcyBhbGwgZnVuY3Rp
b25zCisgICAgICAgIC0gYSBzZWNvbmQgY29uY3VycmVudCBwYXNzIHRoYXQgY29tcGlsZXMgYWxs
IGZ1bmN0aW9ucy4KKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgbW92ZSB0aGUgdmFsaWRhdGlv
biBpbnRvIHRoZSBwYXJzZXIgYW5kIHVwZGF0ZSB0aGUgTExJbnRQbGFuIHNvIHRoYXQgd2Ugbm8g
bG9uZ2VyIGhhdmUKKyAgICAgICAgdGhlIGZpcnN0IHBhc3MuIEluc3RlYWQsIHdlIG5vdyB2YWxp
ZGF0ZSBjb25jdXJyZW50bHkgYXQgdGhlIHNhbWUgdGltZSB3ZSBnZW5lcmF0ZSBieXRlY29kZS4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc0lmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OkNvbnRyb2xEYXRhOjppc1RvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlw
ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbXB0eUV4cHJl
c3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRj
aHBvaW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnRtcHNGb3JTaWdu
YXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6ZW1pdFBhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRMb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZElm
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OnVuaWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZHVtcEV4
cHJlc3Npb25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpkdW1w
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlQWlyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0Pik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
VUYzMj4pOgorICAgICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmg6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OkNvbnRyb2xEYXRhOjpDb250cm9sRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc0lmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6Omhhc05vblZvaWRyZXN1bHQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6
YnJhbmNoVGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtcHR5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjphZGRSZWZJc051bGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRUYWJsZUdldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmFkZFRhYmxlU2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFi
bGVHcm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxs
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVj
ayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW5k
QmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVh
Y2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZHVtcEV4cHJlc3Npb25TdGFjayk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNt
OjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoK
KyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJR
UGxhbjo6QkJRUGxhbik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OmRpZFJlY2VpdmVGdW5jdGlvbkRhdGEpOgorICAgICAgICAqIHdhc20vV2FzbUJC
UVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpDb2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UpOgorICAgICAgICAqIHdhc20vV2FzbUVudHJ5UGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkVudHJ5UGxhbjo6RW50cnlQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RW50
cnlQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RW50
cnlQbGFuOjpwcmVwYXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RW50cnlQbGFuOjpjb21waWxl
RnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RW50cnlQbGFuOjpjb21wbGV0ZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtRW50cnlQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6c3BsaXRTdGFjayk6CisgICAgICAgIChK
U0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpUeXBlZEV4cHJlc3Npb246OlR5cGVkRXhwcmVzc2lv
bik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpUeXBlZEV4cHJlc3Npb246
OnR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6VHlwZWRF
eHByZXNzaW9uOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFy
c2VyOjpUeXBlZEV4cHJlc3Npb246Om9wZXJhdG9yIEV4cHJlc3Npb25UeXBlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OlR5cGVkRXhwcmVzc2lvbjo6b3BlcmF0
b3ItPiBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpjb250cm9s
U3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6dmFsaWRhdGlvbkZh
aWwgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6Ymlu
YXJ5Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1
bmFyeUNhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
bG9hZCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpzdG9y
ZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpjaGVja0Jy
YW5jaFRhcmdldCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
Ojp1bmlmeSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNv
bnRyb2xUeXBlOjp0b3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6bG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6aXNJZik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6aXNUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6c3RhY2tTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpzaWduYXR1cmUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmJyYW5jaFRhcmdldEFy
aXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xU
eXBlOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmVtcHR5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmdldERy
b3BLZWVwQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6bWF0ZXJp
YWxpemVDb25zdGFudHNBbmRMb2NhbHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENv
bXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpMTElu
dEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5m
b3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRH
ZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5oOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxM
SW50UGxhbjo6TExJbnRQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpjb21w
aWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmRpZENvbXBsZXRl
Q29tcGlsYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OndvcmspOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmRpZFJlY2VpdmVGdW5jdGlvbkRhdGEpOgorICAg
ICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5j
cHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6TW9kdWxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6bWFrZVZhbGlkYXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtlVmFs
aWRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5
bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4u
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNt
L1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAg
ICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpkb250RmluYWxp
emUpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxM
SW50OjpzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2Fz
bVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdhc21U
aHVua0dlbmVyYXRvcik6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAgICog
d2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29u
dHJvbERhdGE6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJvbERh
dGE6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJvbERh
dGE6OmJsb2NrVHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpDb250
cm9sRGF0YTo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6
OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlZhbGlkYXRlOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpWYWxpZGF0ZTo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxp
ZGF0ZTo6VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlR2V0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlU2V0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VmFsaWRhdGU6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjphZGRUYWJsZUdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkVGFibGVG
aWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFJlZklzTnVsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZWZGdW5jKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VmFsaWRhdGU6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6Omdl
dExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OnNldExvY2FsKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmdldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206
OlZhbGlkYXRlOjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRk
QmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkTG9vcCk6CisgICAgICAg
IChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpW
YWxpZGF0ZTo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxzZSk6
CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpWYWxpZGF0ZTo6YWRkQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6
OmFkZFN3aXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRHcm93TWVtb3J5
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OlZh
bGlkYXRlOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZENhbGxJ
bmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpsb2FkKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VmFsaWRhdGU6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OmFkZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZHVtcEV4cHJlc3Npb25TdGFjayk6Cisg
ICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
dmFsaWRhdGVGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgICogd2FzbS9nZW5l
cmF0ZVdhc21PcHNIZWFkZXIucHk6CisgICAgICAgIChjcHBUeXBlKToKKyAgICAgICAgKGNwcE1h
Y3JvKToKKyAgICAgICAgKG9wY29kZU1hY3JvaXplcik6CisgICAgICAgIChvcGNvZGVXaXRoVHlw
ZXNNYWNyb2l6ZXIpOgorICAgICAgICAob3Bjb2RlV2l0aFR5cGVzTWFjcm9pemVyLm1vZGlmaWVy
KToKKyAgICAgICAgKG1lbW9yeUxvYWRNYWNyb2l6ZXIpOgorICAgICAgICAobWVtb3J5TG9hZE1h
Y3JvaXplci5tb2RpZmllcik6CisgICAgICAgIChtZW1vcnlTdG9yZU1hY3JvaXplcik6CisgICAg
ICAgIChtZW1vcnlTdG9yZU1hY3JvaXplci5tb2RpZmllcik6CisgICAgICAgICogd2FzbS9nZW5l
cmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAg
ICAgICAoSlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1
Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorCiAyMDE5LTExLTE3ICBUYWRldSBaYWdhbGxvICA8
dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBc3NlbWJseV0gSW1wcm92ZSBXYXNt
OjpMTEludEdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQppbmRleCBmNTkyMTJmZjAxY2M5ZDgyYTIxMDA1YjIxMjg1NzFlN2QyMzAzZTc0Li4zMGRkMjU4
YTQwZWRjNjI0NzBkODkzMDBkZDhlYTA3MzRjMzNiMjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNjAsNyArNjAsNiBAQCBhbGwgOiBcCiAgICAgVW5p
Y29kZVBhdHRlcm5UYWJsZXMuaCBcCiAgICAgeWFyci9ZYXJyQ2Fub25pY2FsaXplVW5pY29kZS5j
cHAgXAogICAgIFdhc21PcHMuaCBcCi0gICAgV2FzbVZhbGlkYXRlSW5saW5lcy5oIFwKICAgICBX
YXNtQjNJUkdlbmVyYXRvcklubGluZXMuaCBcCiAjCiAKQEAgLTM1Miw5ICszNTEsNiBAQCBJbnRs
Q2Fub25pY2FsaXplTGFuZ3VhZ2UuaDogJChKYXZhU2NyaXB0Q29yZSkvU2NyaXB0cy9nZW5lcmF0
ZUludGxDYW5vbmljYWxpemVMYQogV2FzbU9wcy5oOiAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dl
bmVyYXRlV2FzbU9wc0hlYWRlci5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2Fz
bS5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL3dhc20uanNvbgogCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSAkKEphdmFTY3JpcHRDb3Jl
KS93YXNtL3dhc20uanNvbiAuL1dhc21PcHMuaAogCi1XYXNtVmFsaWRhdGVJbmxpbmVzLmg6ICQo
SmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5
ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtLnB5ICQoSmF2YVNjcmlwdENvcmUp
L3dhc20vd2FzbS5qc29uCi0JJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJh
dGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vd2Fz
bS5qc29uIC4vV2FzbVZhbGlkYXRlSW5saW5lcy5oCi0KIFdhc21CM0lSR2VuZXJhdG9ySW5saW5l
cy5oOiAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxp
bmVzSGVhZGVyLnB5ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtLnB5ICQoSmF2
YVNjcmlwdENvcmUpL3dhc20vd2FzbS5qc29uCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUp
L3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkgJChKYXZhU2Ny
aXB0Q29yZSkvd2FzbS93YXNtLmpzb24gLi9XYXNtQjNJUkdlbmVyYXRvcklubGluZXMuaAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApp
bmRleCBlZDdiOGRlOThmNTZlNDNjYmY3YTUzYzVlZGIyMjc1MDUyZmNmOGExLi45OGU3ZTkzZmQz
ZTY3ZTIwNGU0MmRkNzVhNmZmZWQ3YTE0ZTQ3NGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTEyOSwxMiArMTI5LDEzIEBA
IHByaXZhdGU6CiAgICAgVHlwZSBtX3R5cGU7CiB9OwogCi11c2luZyBUeXBlZFRtcHMgPSBWZWN0
b3I8VHlwZWRUbXAsIDE+OwotCiBjbGFzcyBBaXJJUkdlbmVyYXRvciB7CiBwdWJsaWM6CisgICAg
dXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUeXBlZFRtcDsKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0g
VmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsKKwogICAgIHN0cnVjdCBDb250cm9sRGF0YSB7Ci0g
ICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1
bHQsIFR5cGVkVG1wcyByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKKyAgICAgICAgQ29udHJv
bERhdGEoQjM6Ok9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHJlc3VsdCwgUmVzdWx0TGlz
dCByZXN1bHRUbXBzLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBC
YXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKICAgICAgICAgICAgIDogY29udHJvbEJsb2Nr
VHlwZSh0eXBlKQogICAgICAgICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQogICAg
ICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCkBAIC0xNDgsNiArMTQ5LDkgQEAgcHVibGljOgog
ICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENv
bnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6SWY7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OlRvcExldmVsOyB9CisKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2tUeXBlKCkpIHsKQEAgLTE5NCwz
MSArMTk4LDQ2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOwogICAg
ICAgICB9CiAKKyAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5hcmd1bWVudENvdW50
KCk7CisgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+cmV0dXJuQ291bnQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwor
ICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+YXJndW1lbnQoaSk7CisgICAgICAgICAgICByZXR1
cm4gcmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEFpcklSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUg
Y29udHJvbEJsb2NrVHlwZTsKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uOwogICAg
ICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOwotICAgICAgICBUeXBlZFRtcHMgcmVzdWx0czsKKyAg
ICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwogICAgICAgICBCbG9ja1NpZ25hdHVyZSByZXR1cm5U
eXBlOwogICAgIH07CiAKLSAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFR5cGVkVG1wOwogICAg
IHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7Ci0gICAgdXNpbmcgRXhwcmVzc2lvbkxp
c3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OwotICAgIHVzaW5nIFN0YWNrID0gRXhwcmVz
c2lvbkxpc3Q7Ci0gICAgdXNpbmcgUmVzdWx0TGlzdCA9IFR5cGVkVG1wczsKLSAgICB1c2luZyBD
b250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRy
eTsKIAotICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVy
biB7IH07IH07Ci0gICAgU3RhY2sgY3JlYXRlU3RhY2soKSB7IHJldHVybiBTdGFjaygpOyB9Ci0g
ICAgYm9vbCBpc0NvbnRyb2xUeXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0
dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgIHVzaW5nIENv
bnRyb2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5
OworICAgIHVzaW5nIENvbnRyb2xTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9y
Pjo6Q29udHJvbFN0YWNrOworICAgIHVzaW5nIFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8QWlySVJH
ZW5lcmF0b3I+OjpTdGFjazsKKyAgICB1c2luZyBUeXBlZEV4cHJlc3Npb24gPSBGdW5jdGlvblBh
cnNlcjxBaXJJUkdlbmVyYXRvcj46OlR5cGVkRXhwcmVzc2lvbjsKIAogICAgIHVzaW5nIEVycm9y
VHlwZSA9IFN0cmluZzsKICAgICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBlY3RlZDxF
cnJvclR5cGU+OwogICAgIHVzaW5nIFJlc3VsdCA9IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPjsKICAgICB1c2luZyBQYXJ0aWFsUmVzdWx0ID0g
RXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKIAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lX3Y8UmVzdWx0TGlzdCwgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpSZXN1bHRM
aXN0Pik7CisKKyAgICBzdGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyBy
ZXR1cm4geyB9OyB9OworCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVW
RVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4u
LiBhcmdzKSBjb25zdAogICAgIHsKQEAgLTIzMSw3ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxl
ICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6
UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50Kiwg
VGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKTsKKyAgICBBaXJJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0
aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBjb25zdCBTaWduYXR1cmUmKTsKIAogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWdu
YXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChU
eXBlLCB1aW50MzJfdCk7CkBAIC0yNDAsMTUgKzI1OSwxNSBAQCBwdWJsaWM6CiAgICAgRXhwcmVz
c2lvblR5cGUgYWRkQm90dG9tKEJhc2ljQmxvY2sqLCBUeXBlKTsKIAogICAgIC8vIFJlZmVyZW5j
ZXMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhw
cmVzc2lvblR5cGUmIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFs
dWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOwogCiAgICAgLy8gVGFibGVzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
VGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHZhbHVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdl
dCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlU2V0KHVuc2ln
bmVkLCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlU2l6ZSh1bnNpZ25lZCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwcmVzc2lv
blR5cGUmIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBl
JiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR3Jvdyh1bnNpZ25l
ZCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRh
YmxlRmlsbCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBm
aWxsLCBFeHByZXNzaW9uVHlwZSBjb3VudCk7CiAKICAgICAvLyBMb2NhbHMKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CkBAIC0yNzksNyArMjk4LDcgQEAgcHVibGljOgogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBT
dGFjayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1Vu
cmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgcmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERh
dGEmLCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNz
aW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBD
b250cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2sp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xF
bnRyeSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjg4LDI5ICszMDcsMjEgQEAgcHVi
bGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJs
b2NrU2lnbmF0dXJlKSB7IHJldHVybiB7IH07IH0KIAogICAgIC8vIENhbGxzCi0gICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4
cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZSwgMT4mIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4
LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRM
aXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRV
bnJlYWNoYWJsZSgpOwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVS
TiBlbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRt
cD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4mJiBleHRyYUFyZ3MgPSB7IH0pOworICAg
IEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9p
bnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3Vs
dHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4m
JiBleHRyYUFyZ3MgPSB7IH0pOwogCiAgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChUeXBlLCBC
Mzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlm
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRlZ2Vy
U3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSBy
aHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRp
bmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRCaW5P
cChUeXBlLCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5
cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAotICAgIHZvaWQgZHVtcChjb25zdCBW
ZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lv
blN0YWNrKTsKKyAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sq
IGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWly
SVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBk
aWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFj
aygpIHsgfQogCi0gICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9yKGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxUbXA+IHJlc3VsdDsK
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogdmVjdG9yKQotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChpdGVtLnRtcCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0K
ICAgICBjb25zdCBCYWc8QjM6OlBhdGNocG9pbnRWYWx1ZSo+JiBwYXRjaHBvaW50cygpIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gbV9wYXRjaHBvaW50czsKQEAgLTQwMSw5ICs0MTIsOSBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgVHlwZWRUbXBzIHRtcHNGb3JTaWdu
YXR1cmUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQorICAgIFJlc3VsdExpc3QgdG1wc0ZvclNp
Z25hdHVyZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCiAgICAgewotICAgICAgICBUeXBlZFRt
cHMgcmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgICAgIFJlc3VsdExpc3Qg
cmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIHJl
c3VsdFtpXSA9IHRtcEZvclR5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTQyNiwxNiArNDM3LDE2IEBAIHByaXZhdGU6CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2Nr
KiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJn
cy4uLiB0aGVBcmdzKQogICAgIHsKLSAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywg
cGF0Y2gsIFZlY3RvcjxUbXAsIDE+IHsgcmVzdWx0IH0sIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwg
c2l6ZW9mLi4uKEFyZ3MpPjo6ZnJvbSh0aGVBcmdzLi4uKSk7CisgICAgICAgIGVtaXRQYXRjaHBv
aW50KGJhc2ljQmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBWZWN0b3I8
Q29uc3RyYWluZWRUbXAsIHNpemVvZi4uLihBcmdzKT46OmZyb20odGhlQXJncy4uLikpOwogICAg
IH0KIAogICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQpCiAgICAgewotICAgICAgICBlbWl0
UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgMT4geyByZXN1bHQgfSwg
VmVjdG9yPENvbnN0cmFpbmVkVG1wPigpKTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNC
bG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDg+IHsgcmVzdWx0IH0sIFZlY3RvcjxDb25zdHJhaW5l
ZFRtcD4oKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFRtcFR5cGUs
IHNpemVfdCBpbmxpbmVTaXplPgotICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayog
YmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1
bHRUbXBUeXBlLCAxPiYgIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6
ZT4mJiBhcmdzKQorICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9j
aywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBl
LCA4PiYgIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdz
KQogICAgIHsKICAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFsKQogICAgICAgICAgICAg
bV9wYXRjaHBvaW50U3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpQYXRjaHBvaW50U3BlY2lhbCo+
KG1fY29kZS5hZGRTcGVjaWFsKG1ha2VVbmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKSk7
CkBAIC02MzMsNyArNjQ0LDcgQEAgcHJpdmF0ZToKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9h
ZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7
CiAgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKLSAgICB2b2lkIHVu
aWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25UeXBlJiBzb3Vy
Y2UpOworICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgZHN0LCBjb25zdCBFeHBy
ZXNzaW9uVHlwZSBzb3VyY2UpOwogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3Qg
U3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFjayk7CiAKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KQEAgLTc0Myw3ICs3NTQsNyBAQCB2b2lkIEFpcklSR2Vu
ZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9jaywgVHlw
ZWRUbXAgaW5zdAogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwg
aW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxG
dW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCitBaXJJUkdlbmVyYXRvcjo6QWly
SVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUm
IHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2Rl
KQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC03NzEsOSArNzgyLDYg
QEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm8KICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1f
bWVtb3J5U2l6ZUdQUik7CiAgICAgfQogCi0gICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKLSAg
ICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNt
RXhjZXB0aW9uKTsKLQogICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBzd2l0Y2ggKG1f
bW9kZSkgewogICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgpAQCAtMTA0
NSw3ICsxMDUzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlJiB2YWx1
ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHZhbHVlLnRtcCgpKTsK
ICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKFR5cGU6OkkzMik7CkBAIC0xMDY2LDcgKzEwNzQsNyBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVz
c2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgQVNTRVJUKGluZGV4LnRtcCgpKTsKQEAg
LTEwODMsNyArMTA5MSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJ
bmRleCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRh
YmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICBBU1NFUlQoaW5k
ZXgudG1wKCkpOwpAQCAtMTExMiw3ICsxMTIwLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
VGFibGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0K
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdyb3co
dW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBl
JiBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Np
b25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKGZpbGwudG1wKCkpOwogICAgIEFTU0VS
VChpc1N1YnR5cGUoZmlsbC50eXBlKCksIG1faW5mby50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5
cGUoKSkpOwpAQCAtMTEyNSw3ICsxMTMzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFi
bGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwodW5z
aWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lvblR5cGUm
IGZpbGwsIEV4cHJlc3Npb25UeXBlJiBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZmlsbC50bXAoKSk7CiAgICAgQVNTRVJUKGlz
U3VidHlwZShmaWxsLnR5cGUoKSwgbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgp
KSk7CkBAIC0xNzE0LDkgKzE3MjIsOSBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRp
ZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCkKICAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9s
b2NhbHMpCiAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAobG9jYWwsIEIz
OjpWYWx1ZVJlcDo6Q29sZEFueSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0g
MDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250
cm9sSW5kZXgpIHsKLSAgICAgICAgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayA9IG1f
cGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrOwotICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAg
ICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh2YWx1ZSwgQjM6OlZhbHVlUmVw
OjpDb2xkQW55KSk7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+
Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAg
ICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAg
ICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLnZhbHVlKCksIEIz
OjpWYWx1ZVJlcDo6Q29sZEFueSkpOwogICAgIH0KIAogICAgIFRpZXJVcENvdW50OjpUcmlnZ2Vy
UmVhc29uKiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV90aWVyVXAtPm9zckVudHJ5VHJpZ2dlcnMo
KS5sYXN0KCkpOwpAQCAtMTc0NSw3ICsxNzUzLDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1p
dExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpCiAgICAgICAgIH0pOwogICAgIH0p
OwogCi0gICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1w
LCAxPigpLCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVu
dEJsb2NrLCBwYXRjaCwgUmVzdWx0TGlzdCB7IH0sIFdURk1vdmUocGF0Y2hBcmdzKSk7CiB9CiAK
IEFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwo
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQpAQCAtMTc1OCw4ICsxNzY2LDEyIEBAIGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5j
bG9zaW5nU3RhY2ssIENvCiAgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5hZGRCbG9jaygp
OwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOwogCi0g
ICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwotICAg
IGJsb2NrID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgbmV3U3RhY2ssIEJsb2Nr
VHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVy
ZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICBSZXN1bHRMaXN0IHJlc3VsdHM7Cisg
ICAgcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ld1N0YWNrLnNpemUoKSk7CisgICAg
Zm9yIChhdXRvIGl0ZW0gOiBuZXdTdGFjaykKKyAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRBcHBl
bmQoaXRlbSk7CisgICAgYmxvY2sgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCBX
VEZNb3ZlKHJlc3VsdHMpLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7CiAK
ICAgICBhcHBlbmQoSnVtcCk7CiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoYm9k
eSk7CkBAIC0xNzcyLDcgKzE3ODQsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKEJs
b2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogCiBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNr
JiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2sp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJl
LCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0
YWNrLCBuZXdTdGFjayk7CiAgICAgbmV3QmxvY2sgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2ln
bmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6QmxvY2ssIG1f
Y29kZS5hZGRCbG9jaygpKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTc4OCw3ICsxODAwLDcg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vz
c29ycyh0YWtlbiwgbm90VGFrZW4pOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKLSAg
ICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAg
c3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgcmVz
dWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShz
aWduYXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKICAgICBy
ZXR1cm4geyB9OwogfQpAQCAtMTgwOSw3ICsxODIxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29u
c3QgQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBD
b250cm9sRGF0YSYgZGF0YSwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKmRhdGEuc2lnbmF0dXJlKCksIENhbGxSb2xl
OjpDYWxsZWUpOwogICAgIGlmICghd2FzbUNhbGxJbmZvLnJlc3VsdHMuc2l6ZSgpKSB7CkBAIC0x
ODQ3LDcgKzE4NTksNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29u
dHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZQogICAgICAgICByZXR1cm5D
b25zdHJhaW50cy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodG1wLCB3YXNtQ2FsbEluZm8ucmVzdWx0
c1tpXSkpOwogICAgIH0KIAotICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRj
aCwgVmVjdG9yPFRtcCwgMT4oKSwgV1RGTW92ZShyZXR1cm5Db25zdHJhaW50cykpOworICAgIGVt
aXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgUmVzdWx0TGlzdCB7IH0sIFdURk1v
dmUocmV0dXJuQ29uc3RyYWludHMpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xOTYyLDEy
ICsxOTc0LDE0IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29u
dHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAg
ICAgICAgICAgIGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKICAgICAgICAgICAgICAg
ICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ld
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJl
c3Npb25TdGFjay5hcHBlbmQoYWRkQm90dG9tKG1fY3VycmVudEJsb2NrLCBkYXRhLnNpZ25hdHVy
ZSgpLT5yZXR1cm5UeXBlKGkpKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBUeXBlIHR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAg
ICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh0
eXBlLCBhZGRCb3R0b20obV9jdXJyZW50QmxvY2ssIHR5cGUpKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVzdWx0IDog
ZGF0YS5yZXN1bHRzKQotICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNp
Z25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0
dXJuVHlwZShpKSwgZGF0YS5yZXN1bHRzW2ldKTsKICAgICB9CiAKICAgICAvLyBUb3BMZXZlbCBk
b2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUg
d2UgZW1pdCBhIHJldHVybiBoZXJlLgpAQCAtMTk3Nyw3ICsxOTkxLDcgQEAgYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBT
dGFjayYgZXhwcmUKICAgICByZXR1cm4geyB9OwogfQogCi1CMzo6UGF0Y2hwb2ludFZhbHVlKiBB
aXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYg
cmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVk
VG1wPiYmIHBhdGNoQXJncykKK0IzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklSR2VuZXJhdG9yOjpl
bWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+
JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgcGF0Y2hBcmdzKQogewogICAgIGF1dG8q
IHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNSZXN1bHRUeXBlKCZzaWduYXR1cmUpKTsK
ICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0yMDAyLDcg
KzIwMTYsNyBAQCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQ
YXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdAogICAgIHJldHVybiBwYXRjaHBvaW50
OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCkBAIC0yMDkyLDcgKzIxMDYs
NyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVj
dG9yPEV4cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1
bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUg
Y2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwpAQCAtMjI0OCw3ICsyMjYyLDcgQEAgYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmEKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEFpcklSR2VuZXJh
dG9yOjp1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlw
ZSYgc291cmNlKQordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5
cGUgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCiB7CiAgICAgQVNTRVJUKGlzU3Vi
dHlwZShzb3VyY2UudHlwZSgpLCBkc3QudHlwZSgpKSk7CiAgICAgYXBwZW5kKG1vdmVPcEZvclZh
bHVlVHlwZShkc3QudHlwZSgpKSwgc291cmNlLCBkc3QpOwpAQCAtMjI2NiwxMCArMjI4MCwxMCBA
QCBzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29t
bWEsIGNvbnN0IEFpcklSR2VuZXJhdG9yOgogewogICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNz
aW9uU3RhY2s6Iik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lv
blN0YWNrKQotICAgICAgICBkYXRhTG9nKGNvbW1hLCBleHByZXNzaW9uKTsKKyAgICAgICAgZGF0
YUxvZyhjb21tYSwgZXhwcmVzc2lvbi52YWx1ZSgpKTsKIH0KIAotdm9pZCBBaXJJUkdlbmVyYXRv
cjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBT
dGFjayogc3RhY2spCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IENvbnRyb2xTdGFj
ayYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogc3RhY2spCiB7CiAgICAgZGF0YUxvZ0xuKCJQ
cm9jZXNzaW5nIEdyYXBoOiIpOwogICAgIGRhdGFMb2cobV9jb2RlKTsKQEAgLTIyOTEsNyArMjMw
NSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KICAgICBy
ZXR1cm4gQjM6Ok9yaWdpbigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4
dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJV
cCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0
YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCogdGllclVwKQogewogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRl
cm5hbEZ1bmN0aW9uPigpOwogCkBAIC0yMzE0LDcgKzIzMjgsNyBAQCBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENv
bXBpbGF0aQogICAgIAogICAgIHByb2NlZHVyZS5zZXRPcHRMZXZlbChPcHRpb25zOjp3ZWJBc3Nl
bWJseUJCUUFpck9wdGltaXphdGlvbkxldmVsKCkpOwogCi0gICAgQWlySVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBtb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwg
c2lnbmF0dXJlKTsKKyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1
cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9u
SW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVy
YXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24u
ZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTI5MDMsNyArMjkxNyw3IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcs
IEV4cHJlc3Npb25UCiAgICAgfSk7CiAKICAgICByZXN1bHQgPSBnNjQoKTsKLSAgICBlbWl0UGF0
Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgVmVjdG9yPFRtcCwgMT4geyByZXN1
bHQgfSwgV1RGTW92ZShhcmdzKSk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ss
IHBhdGNocG9pbnQsIFZlY3RvcjxUeXBlZFRtcCwgOD4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdz
KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjk3OCw3ICsyOTkyLDcgQEAgYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFy
ZywgRXhwcmVzc2lvblQKICAgICB9KTsKIAogICAgIHJlc3VsdCA9IGc2NCgpOwotICAgIGVtaXRQ
YXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCBWZWN0b3I8VG1wLCAxPiB7IHJl
c3VsdCB9LCBXVEZNb3ZlKGFyZ3MpKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9j
aywgcGF0Y2hwb2ludCwgVmVjdG9yPFR5cGVkVG1wLCA4PiB7IHJlc3VsdCB9LCBXVEZNb3ZlKGFy
Z3MpKTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCmluZGV4IDMzMWI0YjBhZDMxM2U2MjNjYTdmZjRiZDhk
ZThhMTU4NmZjN2Q1MDUuLjFjM2Y1YmFmMDkxNmQ0Y2E3OGM1ZmJiNGIzZTYyN2M3MjM4NDVmODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5o
CkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAK
LUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKK0V4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVy
VXBDb3VudCogPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4
IDYxOTYxOTM5YzY1Y2YxOTg0NmUzYmZlNjA1YmQwNDE4ZTE5MmZlMjMuLmM4MGQwYjM1YTUyNTI2
ZTkwYzg0YjE1YmNhNjFjYTI5NjU0YzQ5ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTg2LDEyICs4NiwxMyBAQCBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiBjbGFzcyBCM0lSR2VuZXJhdG9yIHsK
IHB1YmxpYzoKLSAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFZhbHVlKiwgMT47IC8vIFZh
bHVlIG11c3QgYmUgYSBQaGkKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFZhbHVlKjsKKyAg
ICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsKIAogICAgIHN0
cnVjdCBDb250cm9sRGF0YSB7CiAgICAgICAgIENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywg
T3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9ja1R5cGUgdHlwZSwg
QmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikK
ICAgICAgICAgICAgIDogY29udHJvbEJsb2NrVHlwZSh0eXBlKQotICAgICAgICAgICAgLCBzaWdu
YXR1cmUoc2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3NpZ25hdHVyZShzaWduYXR1cmUpCiAg
ICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCiAgICAgICAgICAgICAsIHNw
ZWNpYWwoc3BlY2lhbCkKICAgICAgICAgewpAQCAtMTA4LDYgKzEwOSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250
cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpU
b3BMZXZlbDsgfQorCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrVHlwZSgpKSB7CkBAIC0xMzMsNyAr
MTM3LDkgQEAgcHVibGljOgogCiAgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUoKSBjb25zdCB7
IHJldHVybiBjb250cm9sQmxvY2tUeXBlOyB9CiAKLSAgICAgICAgYm9vbCBoYXNOb25Wb2lkcmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gc2lnbmF0dXJlLT5yZXR1cm5zVm9pZCgpOyB9CisgICAgICAg
IEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9
CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaWdu
YXR1cmUtPnJldHVybnNWb2lkKCk7IH0KIAogICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9j
a0ZvckJyYW5jaCgpCiAgICAgICAgIHsKQEAgLTE0OSwyOSArMTU1LDQ3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOwogICAgICAgICB9CiAKKyAgICAgICAgU2lnbmF0
dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAg
IHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJu
IG1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgVHlwZSBi
cmFuY2hUYXJnZXRUeXBlKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChpIDwgYnJhbmNoVGFyZ2V0QXJpdHkoKSk7CisgICAgICAgICAgICBpZiAoYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25h
dHVyZS0+YXJndW1lbnQoaSk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVy
blR5cGUoaSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBCM0lSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlwZTsKLSAg
ICAgICAgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlOworICAgICAgICBCbG9ja1NpZ25hdHVyZSBt
X3NpZ25hdHVyZTsKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uOwogICAgICAgICBC
YXNpY0Jsb2NrKiBzcGVjaWFsOwogICAgICAgICBSZXN1bHRMaXN0IHBoaXM7CiAgICAgfTsKIAot
ICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmFsdWUqOworICAgIHVzaW5nIENvbnRyb2xUeXBl
ID0gQ29udHJvbERhdGE7CiAgICAgdXNpbmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVz
c2lvblR5cGUsIDE+OwotICAgIHVzaW5nIFN0YWNrID0gRXhwcmVzc2lvbkxpc3Q7CiAKLSAgICB1
c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwogICAgIHVzaW5nIENvbnRyb2xFbnRyeSA9
IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisgICAgdXNpbmcg
Q29udHJvbFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OkNvbnRyb2xTdGFj
azsKKyAgICB1c2luZyBTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpTdGFj
azsKKyAgICB1c2luZyBUeXBlZEV4cHJlc3Npb24gPSBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPjo6VHlwZWRFeHByZXNzaW9uOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9u
VHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgYm9vbCBpc0Nv
bnRyb2xUeXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wu
YmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lX3Y8UmVzdWx0TGlzdCwgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OlJlc3Vs
dExpc3Q+KTsKIAogICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsKICAgICB0eXBlZGVmIFVu
ZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OwogICAgIHR5cGVkZWYgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+IFJlc3VsdDsK
ICAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJlc3VsdDsKKwor
ICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxs
cHRyOyB9OworCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5M
SU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdz
KSBjb25zdAogICAgIHsKQEAgLTE4MywyMiArMjA3LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDAp
CiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJl
JiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVu
c2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVu
dHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24q
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqKTsK
IAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25z
dCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRM
b2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlw
ZSwgdWludDY0X3QpOwogCiAgICAgLy8gUmVmZXJlbmNlcwotICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmRnVuYyh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICAvLyBUYWJsZXMKLSAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdldCh1bnNpZ25lZCwg
RXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwgRXhwcmVz
c2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlw
ZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVGFibGVTaXplKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdyb3codW5zaWduZWQs
IEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRh
YmxlRmlsbCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lvblR5cGUm
IGZpbGwsIEV4cHJlc3Npb25UeXBlJiBjb3VudCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBmaWxsLCBF
eHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVGaWxsKHVuc2lnbmVkLCBFeHByZXNz
aW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50
KTsKICAgICAvLyBMb2NhbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBn
ZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKTsKQEAgLTIyOSw3ICsyNTMsNyBAQCBwdWJsaWM6CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0
IFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRv
VW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9s
RGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVl
cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMs
IENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFj
ayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJv
bEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CkBAIC0yNDMsNyArMjY3LDcgQEAgcHVi
bGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxl
KCk7CiAgICAgQjM6OlZhbHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3Jp
Z2luLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25z
dCBTY29wZWRMYW1iZGE8dm9pZChQYXRjaHBvaW50VmFsdWUqKT4mIHBhdGNocG9pbnRGdW5jdG9y
KTsKIAotICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0
YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1bXAoY29uc3Qg
Q29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBz
ZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNl
ciA9IHBhcnNlcjsgfTsKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0KICAg
ICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CkBAIC0zNjIsNyArMzg2LDcgQEAgdm9p
ZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHBy
b2MsIEJhc2ljQmxvY2sqIGJsb2MKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRp
b25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JF
bnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbikKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21w
aWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUg
bW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAp
CiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9jb21waWxh
dGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQpAQCAtMzkzLDkgKzQxNyw2IEBAIEIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVy
ZSYgcHJvY2VkdXJlCiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeVNpemVHUFIp
OwogICAgIH0KIAotICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgICAgIFRodW5rczo6
c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7Ci0K
ICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVj
a0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7CiAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CkBAIC02NjcsMTMgKzY4OCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVy
biB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25U
eXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICByZXN1bHQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCks
IHZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFibGVJbmRleCwg
RXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShBbnlyZWYp
LCBvcmlnaW4oKSwKQEAgLTY5Miw3ICs3MTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRh
YmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcgog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5z
aWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYg
dmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQo
dW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBl
IHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxp
bmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAg
IGF1dG8gc2hvdWxkVGhyb3cgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KG1fcHJvYywgQjM6OkludDMyLCBvcmlnaW4oKSwKQEAgLTczMiw3ICs3NTMsNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBmaWxs
LCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmVzdWx0ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKEkzMiksIG9y
aWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oJm9wZXJhdGlvbldhc21U
YWJsZUdyb3csIEIzQ0NhbGxQdHJUYWcpKSwKQEAgLTc0MSw3ICs3NjIsNyBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgZmlsbCwgRXhwcgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQs
IEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lv
blR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShJMzIpLCBv
cmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZvcGVyYXRpb25XYXNt
VGFibGVGaWxsLCBCM0NDYWxsUHRyVGFnKSksCkBAIC0xMjAyLDEyICsxMjIzLDEyIEBAIHZvaWQg
QjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpCiAK
ICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IHN0YWNrbWFwOwogICAgIGZvciAoYXV0byYgbG9j
YWwgOiBtX2xvY2FscykgewotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2lu
LCBsb2NhbCk7CisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7CiAgICAg
ICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGNv
bnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5z
aXplKCk7ICsrY29udHJvbEluZGV4KSB7CiAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9
IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrOwotICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFjaykKKyAg
ICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCiAgICAg
ICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOwogICAgIH0KIApAQCAtMTI2NSwxMiArMTI4
NiwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbgogICAgIHsKICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBlbmNsb3NpbmdTdGFj
ay5hdChvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGVu
Y2xvc2luZ1N0YWNrLmF0KG9mZnNldCArIGkpOwogICAgICAgICAgICAgYXV0byogdXBzaWxvbiA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tpXTsKICAgICAg
ICAgICAgIGJvZHktPmFwcGVuZChwaGkpOwogICAgICAgICAgICAgdXBzaWxvbi0+c2V0UGhpKHBo
aSk7Ci0gICAgICAgICAgICBuZXdTdGFjay5hcHBlbmQocGhpKTsKKyAgICAgICAgICAgIG5ld1N0
YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh2YWx1ZS50eXBlKCksIHBoaSk7CiAgICAgICAgIH0KICAg
ICAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CiAgICAgfQpAQCAtMTMwMSw3ICsx
MzIyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb24KICAgICAgICAgICAgIHVuc2lnbmVkIGJs
b2NrSW5kZXggPSAwOwogICAgICAgICAgICAgQjM6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQo
bV9wcm9jKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9u
U3RhY2suc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvKiB2YWx1ZSA9IGV4cHJl
c3Npb25TdGFja1tpXTsKKyAgICAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBl
eHByZXNzaW9uU3RhY2tbaV07CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0NvbnN0YW50
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgKytpbmRleEluQnVmZmVyOwogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTEzMjAsNyArMTM0MSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29uCiAgICAgICAgICAgICAgICAgQVNTRVJUKHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4
IC0gMSkgPT0gdmFsdWUpOwogCiAgICAgICAgICAgICAgICAgYXV0byogcGhpID0gZGF0YS5jb250
aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksICB2YWx1ZS0+dHlwZSgpLCB2
YWx1ZS0+b3JpZ2luKCkpOwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb25TdGFja1tpXSA9IHBo
aTsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBUeXBlZEV4cHJlc3Npb24g
eyB2YWx1ZS50eXBlKCksIHBoaSB9OwogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZyb21T
Y3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOwogCiAgICAgICAgICAgICAgICAgYXV0
byogc291cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3JpZ2lu
KCksIHZhbHVlLCBwaGkpOwpAQCAtMTM0OCw3ICsxMzY5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ28KIHsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2so
KTsKIAotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNr
KTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsK
ICAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwg
QmxvY2tUeXBlOjpCbG9jaywgY29udGludWF0aW9uKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAt
MTM2Nyw3ICsxMzg4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3QKICAgICBub3RUYWtlbi0+
YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0
YWtlbjsKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFj
ayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7
CiAgICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBC
bG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKICAgICByZXR1cm4geyB9Owog
fQpAQCAtMTM4Nyw3ICsxNDA4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJl
YWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRh
JiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBT
dGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0
aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlv
bkZvcihtX3BhcnNlci0+c2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwogCkBAIC0xNDU4
LDcgKzE0NzksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYg
ZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcgogewogICAgIENvbnRyb2xEYXRh
JiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBBU1NFUlQoZXhwcmVzc2lvblN0YWNr
LnNpemUoKSA9PSBkYXRhLnNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgQVNTRVJUKGV4
cHJlc3Npb25TdGFjay5zaXplKCkgPT0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSk7
CiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpMb29wKQogICAgICAgICB1
bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucGhpcyk7CiAKQEAgLTE0
NzksMTcgKzE1MDAsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxl
KENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKICAgICB9CiAKICAgICBp
ZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApIHsKLSAgICAgICAgZm9yIChW
YWx1ZSogcmVzdWx0IDogZGF0YS5waGlzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAg
IFZhbHVlKiByZXN1bHQgPSBkYXRhLnBoaXNbaV07CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkp
LCByZXN1bHQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9vdXRlckxvb3Bz
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAg
ICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpKQogICAgICAgICAgICAgICAgIGVudHJ5
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChleHByZXNzaW9uU3RhY2tbaV0pOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0
YWNrLmFwcGVuZChjb25zdGFudCh0b0IzVHlwZShkYXRhLnNpZ25hdHVyZS0+cmV0dXJuVHlwZShp
KSksIDB4YmJhZGJlZWYpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFR5
cGUgcmV0dXJuVHlwZSA9IGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7CisgICAgICAg
ICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5k
KHJldHVyblR5cGUsIGNvbnN0YW50KHRvQjNUeXBlKHJldHVyblR5cGUpLCAweGJiYWRiZWVmKSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4MjcsMTQgKzE4NTEsMTQg
QEAgdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYg
cmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdEwKICAgICAgICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5z
aXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNpemUoKSAtIDEgLSBp
KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmlu
dGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Np
b25TdGFjaykKK3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmlu
dGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6U3RhY2smIGV4cHJlc3Npb25TdGFjaykK
IHsKICAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOwogICAgIGZvciAoY29u
c3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAgZGF0YUxvZyhj
b21tYSwgKmV4cHJlc3Npb24pOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Np
b25TdGFjaykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBDb250cm9sU3RhY2smIGNv
bnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjaykKIHsKICAgICBkYXRhTG9n
TG4oIkNvbnN0YW50czoiKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnN0YW50IDogbV9jb25z
dGFudFBvb2wpCkBAIC0xODYyLDcgKzE4ODYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdp
bigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwog
fQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
dW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1v
ZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5
LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0
aW9uKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25N
b2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRy
eSwgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8
SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTg4Niw3ICsxOTEwLDcgQEAgRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShD
b21waWxhdGlvbkMKICAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUIzT3B0aW1pemF0
aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9u
TGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVy
ZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEIzSVJHZW5l
cmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxh
dGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXApOwog
ICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVu
Y3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIGluZm8p
OwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlYTU1
MDI0MDE4ZDMwZDM4ZmYxZWE3YTdhYmYxYzE2NWJjZjU2N2Y4Li5kMmY4ODFlMWU0MTI3MzNlODI2
ZDliMTQ3ZmNlZjdjMDFiOTY0NTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IENvbXBpbGF0aW9u
Q29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNt
RW50cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4
dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJV
cENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2Rl
LCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJ
bmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCmluZGV4IGFhYzVhOGMyNjUyZTM2MzAxMGRjODFjNzJmM2NkMDY0NGM1MjljYWUuLjE0YTBh
ZjI4NDJkZmU0ZWQ3NjgwZGI2MDJjOTkwZmVlMDFiYmJjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiSlNU
b1dhc20uaCIKICNpbmNsdWRlICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNt
QjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCkBAIC01NCw3ICs1NSw3
IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKIEJCUVBsYW46
OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJ
bmZvcm1hdGlvbiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbXBsZXRpb25UYXNrJiYgY29tcGxldGlvblRhc2spCi0gICAgOiBFbnRyeVBsYW4oY29udGV4
dCwgV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbiksIFdURk1vdmUoY29tcGxldGlvblRhc2spKQor
ICAgIDogRW50cnlQbGFuKGNvbnRleHQsIFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pLCBBc3lu
Y1dvcms6OkZ1bGxDb21waWxlLCBXVEZNb3ZlKGNvbXBsZXRpb25UYXNrKSkKICAgICAsIG1fY29k
ZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQog
ewpAQCAtNzksNyArODAsMjMgQEAgYm9vbCBCQlFQbGFuOjpwcmVwYXJlSW1wbCgpCiB2b2lkIEJC
UVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGlmICghbV9jb2Rl
QmxvY2spIHsKLSAgICAgICAgQmFzZTo6d29yayhlZmZvcnQpOworICAgICAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDoKKyAgICAgICAgICAgIHBhcnNl
QW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghaGFzV29yaygpKSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAg
Y2FzZSBTdGF0ZTo6VmFsaWRhdGVkOgorICAgICAgICAgICAgcHJlcGFyZSgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOgorICAgICAgICAgICAgY29t
cGlsZUZ1bmN0aW9ucyhlZmZvcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMTUsNyArMTMyLDcgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9j
ayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9
IGNhbGxlZS5jb3B5UmVmKCk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIExMSW50Q2FsbGVlJiBs
bGludENhbGxlZSA9ICptX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbbV9mdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5t
X2xsaW50Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKICAg
ICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwog
ICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0
dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKQEAg
LTE1MywxMCArMTcwLDExIEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5t
X3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIHJlcGF0Y2hD
YWxscyhtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKLSAgICAgICAgICAg
IGlmIChMTEludENhbGxlZSogbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxl
ZXNbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVu
dENhbGxlZSA9IGxsaW50Q2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAgICAgICAgICAgICAgIExMSW50Q2FsbGVl
JiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1tpXS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2Fs
bGVlLnJlcGxhY2VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBs
YWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUtPm9z
ckVudHJ5Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNh
bGxlZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbaV0uZ2V0KCkpIHsKQEAgLTE5MSw3ICsy
MDksNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KQogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJu
YWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcigqbV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLmVtYmVkZGVyRW50cnlwb2ludEpJVCwg
c2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5j
dGlvbkluZGV4LCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoKm1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XS5lbWJlZGRlckVudHJ5cG9pbnRKSVQsIHNpZ25hdHVyZSwgJm1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KIH0KQEAgLTIxNSw5ICsyMzMsOSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCiAgICAg
aWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKLSAgICAgICAg
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNvbnRleHQsIGZ1bmN0
aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNl
cHRpb24pOworICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVB
aXIoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVw
KTsKICAgICBlbHNlCi0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29t
cGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwg
bV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9N
QVgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBm
dW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXApOwogCiAgICAgaWYgKFVOTElLRUxZKCFw
YXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKQEAgLTI4MywyMSArMzAxLDQxIEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNh
bGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6ZXImIGNhbGxiYWNrKQogICAgIEFTU0VSVCghZmFp
bGVkKCkpOwogICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50
ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2lu
dGVybmFsRnVuY3Rpb25JbmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZTsKKyAgICAgICAgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZT4gZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogICAgICAgICBpZiAoYXV0byBlbWJl
ZGRlclRvV2FzbUZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdl
dChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWUgPSBXYXNtOjpFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3Zl
KGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKKyAgICAgICAgICAgIGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdU
Rk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNh
bGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWUuZ2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1
bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5n
ZXQoKTsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVuY3Rp
b25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAg
ICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpCQlFD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5k
ZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSks
IFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhd
KSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2Fs
bGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBX
VEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkp
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxl
ZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxlZS5w
dHIoKSkpOwogCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92
ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVl
KSk7CiAgICAgfQogfQogCitib29sIEJCUVBsYW46OmRpZFJlY2VpdmVGdW5jdGlvbkRhdGEodW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbikKK3sKKyAg
ICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUHJvY2Vzc2luZyBm
dW5jdGlvbiBzdGFydGluZyBhdDogIiwgZnVuY3Rpb24uc3RhcnQsICIgYW5kIGVuZGluZyBhdDog
IiwgZnVuY3Rpb24uZW5kKTsKKyAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbi5l
bmQgLSBmdW5jdGlvbi5zdGFydDsKKyAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPT0gZnVuY3Rp
b24uZGF0YS5zaXplKCkpOworICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rp
b25JbmRleF07CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKworICAgIGF1dG8gdmFsaWRhdGlvblJlc3Vs
dCA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSk7CisgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CisgICAgICAgIGlmIChX
YXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24uZGF0YVtpXSkpLCAi
LCAiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgICAgIGZhaWwo
aG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIs
IGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7
IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KKyAgICB9CisgICAgcmV0dXJuICEhdmFs
aWRhdGlvblJlc3VsdDsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5oCmluZGV4IGYyMmUxODk2NDcyN2FmM2U1ZTgwNGZlODUzNzhhMTBjOWVmMDQ3YWQuLjVl
MmRmZGZmYzYzMDFhNTYyNzQwY2ZjYzJlNzQxZDRmMzYzYmY4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtNDQsNyArNDQsOSBAQCBjbGFzcyBDYWxsTGlu
a0luZm87CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgQkJRQ2FsbGVlOwogY2xhc3MgQ29k
ZUJsb2NrOworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogCiBjbGFzcyBCQlFQbGFu
IGZpbmFsIDogcHVibGljIEVudHJ5UGxhbiB7CiBwdWJsaWM6CkBAIC01NCw4ICs1NiwyNCBAQCBw
dWJsaWM6CiAKICAgICBCQlFQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb2RlQmxvY2sqLCBDb21wbGV0aW9uVGFzayYmKTsKIAor
ICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9h
c3luY1dvcmsgPT0gQXN5bmNXb3JrOjpWYWxpZGF0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGUgPCBTdGF0ZTo6VmFsaWRhdGVkOworICAgICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRl
OjpDb21waWxlZDsKKyAgICB9CisKICAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92
ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6
ZXImKSBvdmVycmlkZTsKKworICAgIHVzaW5nIENhbGxlZUluaXRpYWxpemVyID0gRnVuY3Rpb248
dm9pZCh1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiwgUmVmPEJC
UUNhbGxlZT4mJik+OworICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5p
dGlhbGl6ZXImKTsKKworICAgIGJvb2wgZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNpZ25lZCwg
Y29uc3QgRnVuY3Rpb25EYXRhJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHBhcnNlQW5kVmFsaWRh
dGVNb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2U6OnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUobV9zb3VyY2UuZGF0YSgpLCBtX3NvdXJjZS5zaXplKCkpOworICAgIH0KIAogcHJvdGVj
dGVkOgogICAgIGJvb2wgcHJlcGFyZUltcGwoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggNDAyZTcwYmQ4NGExZjA2ZjE5NjQy
MDc5YmIwNmIzYzU1ODM0ZjIxYS4uMTM0ZGE3ZGUwYjNlOTc1NTc0MTZkYzQzMTk1YmNhZGZlZmU5
MjI0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAK
QEAgLTM2LDU4ICszNiw3MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
Ci1SZWY8Q29kZUJsb2NrPiBDb2RlQmxvY2s6OmNyZWF0ZShDb250ZXh0KiBjb250ZXh0LCBNZW1v
cnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiwgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUo
Q29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24sIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIGxsaW50Q2FsbGVlcykKIHsK
LSAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKENvZGVC
bG9jaykpKSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIFdURk1v
dmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBhdXRv
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKENvZGVCbG9jaykpKSBD
b2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIGxsaW50Q2FsbGVlcyk7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpyZXN1bHQpOwogfQogCi1Db2RlQmxvY2s6OkNvZGVCbG9j
ayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBt
b2R1bGVJbmZvcm1hdGlvbiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJX
cmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQ29kZUJsb2Nr
OjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZv
cm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIGxsaW50
Q2FsbGVlcykKICAgICA6IG1fY2FsbGVlQ291bnQobW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkpCiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fbGxpbnRDYWxsZWVz
KGxsaW50Q2FsbGVlcykKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0g
dGhpczsKIAotICAgIGF1dG8gdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tU
eXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFu
JikgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgIGlm
IChtX3BsYW4tPmZhaWxlZCgpKSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxh
bi0+ZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCi0gICAgICAgIG1fbGxpbnRD
YWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgbV9iYnFDYWxsZWVzLnJlc2l6
ZShtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgbV9vbWdDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNv
dW50KTsKLSAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMucmVzaXplKG1fY2Fs
bGVlQ291bnQpOwotCi0gICAgICAgIG1fcGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNp
Z25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPENhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUsIFJlZlB0cjxDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnQpIHsKLSAgICAgICAgICAgIGlmIChl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IG1fZW1iZWRkZXJDYWxsZWVzLnNldChjYWxsZWVJbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOworICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkgeworICAg
ICAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBtYWtlUmVmKG1v
ZHVsZUluZm9ybWF0aW9uKSwgbV9sbGludENhbGxlZXMsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6
Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldIChQbGFuJikgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7CisgICAgICAgICAgICAgICAg
c2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxl
ZUluZGV4XSA9IHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCk7CiAKLSAgICAgICAgICAgIGlm
IChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkKLSAgICAgICAgICAgICAgICBtX2xsaW50Q2FsbGVl
c1tjYWxsZWVJbmRleF0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxMTEludENhbGxlZSo+KHdhc21F
bnRyeXBvaW50LmxlYWtSZWYoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxCQlFDYWxs
ZWUqPih3YXNtRW50cnlwb2ludC5sZWFrUmVmKCkpKTsKLSAgICAgICAgfSk7CisgICAgICAgICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCisg
ICAgICAgICAgICBtX2JicUNhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICAg
ICAgbV9vbWdDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fd2Fz
bUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbGVlQ291bnQ7ICsraSkKKyAgICAg
ICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tpXSA9IG1fbGxpbnRDYWxs
ZWVzW2ldLT5lbnRyeXBvaW50KCk7CisKKyAgICAgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVi
cyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKKyAgICAgICAgICAgIG1fd2Fz
bVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKKyAg
ICAgICAgICAgIG1fZW1iZWRkZXJDYWxsZWVzID0gc3RhdGljX2Nhc3Q8TExJbnRQbGFuKj4obV9w
bGFuLmdldCgpKS0+dGFrZUVtYmVkZGVyQ2FsbGVlcygpOwogCi0gICAgICAgIG1fd2FzbVRvV2Fz
bUV4aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKLSAgICAgICAg
bV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygp
OworICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAgICB9KSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250
ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29tcGlsZSwg
Y3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9wbGFuLT5mYWlsZWQo
KSkgeworICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3Nh
Z2UoKTsKKyAgICAgICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgIGlmIChPcHRpb25zOjp1
c2VXYXNtTExJbnQoKSkKLSAgICAgICAgICAgIG1fbGxpbnRFbnRyeVRodW5rcyA9IGJpdHdpc2Vf
Y2FzdDxMTEludFBsYW4qPihtX3BsYW4uZ2V0KCkpLT50YWtlRW50cnlUaHVua3MoKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZXZlbnR1YWxseSBjb2xsZWN0IHRoZSBCQlEgY29k
ZS4KKyAgICAgICAgICAgIG1fYmJxQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisgICAg
ICAgICAgICBtX29tZ0NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAg
bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMucmVzaXplKG1fY2FsbGVlQ291bnQpOworCisg
ICAgICAgICAgICBCQlFQbGFuKiBiYnFQbGFuID0gc3RhdGljX2Nhc3Q8QkJRUGxhbio+KG1fcGxh
bi5nZXQoKSk7CisgICAgICAgICAgICBiYnFQbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVu
c2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiYmIGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSwgUmVmUHRyPEJCUUNhbGxlZT4mJiB3YXNtRW50cnlwb2lu
dCkgeworICAgICAgICAgICAgICAgIGlmIChlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2Fs
bGVlSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW2NhbGxlZUluZGV4XSA9IHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCk7CisgICAgICAg
ICAgICAgICAgbV9iYnFDYWxsZWVzW2NhbGxlZUluZGV4XSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0
PEJCUUNhbGxlZSo+KHdhc21FbnRyeXBvaW50LmxlYWtSZWYoKSkpOworICAgICAgICAgICAgfSk7
CiAKLSAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwotICAgIH0pOworICAgICAgICAg
ICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVi
cygpOworICAgICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2Fz
bVRvV2FzbUNhbGxzaXRlcygpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKQot
ICAgICAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBtYWtlUmVm
KG1vZHVsZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29tcGlsZSwgV1RGTW92ZSh0YXNr
KSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0
LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29tcGlsZSwgV1RG
TW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNl
cHRpb24pKTsKKyAgICAgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKKyAgICAgICAg
fSkpKTsKKyAgICB9CiAgICAgbV9wbGFuLT5zZXRNb2RlKG1vZGUpOwogCiAgICAgYXV0byYgd29y
a2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5oCmluZGV4IDU4MTIyZWY2OGNmMTEwNGE2ODU1OTUyZjYwMThmMThj
NmQzMmQ1ODcuLjNiYTZkNmFhMTgzMTkxMzM1N2IzMjU3N2M4Y2U3MGU2NTA1NDVkYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTUyLDcgKzUyLDcg
QEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9j
az4gewogcHVibGljOgogICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVmPENvZGVCbG9j
az4mJik7CiAgICAgdXNpbmcgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVmUHRyPFdURjo6
U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3Jl
YXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVk
ZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHN0YXRpYyBSZWY8Q29kZUJs
b2NrPiBjcmVhdGUoQ29udGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgY29u
c3QgUmVmPExMSW50Q2FsbGVlPiopOwogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwog
ICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2sm
Jik7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqbV9vbWdD
YWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICAgICAgaWYgKG1fYmJxQ2FsbGVlc1tjYWxs
ZWVJbmRleF0pCiAgICAgICAgICAgICByZXR1cm4gKm1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0u
Z2V0KCk7Ci0gICAgICAgIHJldHVybiAqbV9sbGludENhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgp
OworICAgICAgICByZXR1cm4gbV9sbGludENhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwogICAg
IH0KIAogICAgIEJCUUNhbGxlZSYgd2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
dW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQpAQCAtMTI4LDE1ICsxMjgsMTQgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKICAgICBmcmllbmQgY2xhc3MgT01HRm9yT1NS
RW50cnlQbGFuOwogCi0gICAgQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24p
OworICAgIENvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24m
LCBjb25zdCBSZWY8TExJbnRDYWxsZWU+Kik7CiAgICAgdm9pZCBzZXRDb21waWxhdGlvbkZpbmlz
aGVkKCk7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKICAgICBNZW1vcnlNb2RlIG1fbW9k
ZTsKICAgICBWZWN0b3I8UmVmUHRyPE9NR0NhbGxlZT4+IG1fb21nQ2FsbGVlczsKICAgICBWZWN0
b3I8UmVmUHRyPEJCUUNhbGxlZT4+IG1fYmJxQ2FsbGVlczsKLSAgICBWZWN0b3I8UmVmUHRyPExM
SW50Q2FsbGVlPj4gbV9sbGludENhbGxlZXM7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIz
Q29tcGlsYXRpb25QdHJUYWc+IG1fbGxpbnRFbnRyeVRodW5rczsKLSAgICBIYXNoTWFwPHVpbnQz
Ml90LCBSZWZQdHI8Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNo
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRl
ckNhbGxlZXM7CisgICAgY29uc3QgUmVmPExMSW50Q2FsbGVlPiogbV9sbGludENhbGxlZXM7Cisg
ICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5
cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxs
RW50cnlQb2ludHM7CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4g
bV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcAppbmRleCA1YWVkYmQyZmMzZDMxMjg5ZTkw
MWNjNWMyYTQ3NzU3ODI3NDEzOWM0Li5jNjFhNjNkODBmZGE5YzY0NTRkYTJjMzY4OGUzM2NhNDdh
ZjZiZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNw
cApAQCAtNDYsMzMgKzQ2LDE3IEBAIG5hbWVzcGFjZSBXYXNtRW50cnlQbGFuSW50ZXJuYWwgewog
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1FbnRyeVBsYW46OkVudHJ5
UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
IGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKLSAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwg
V1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCitFbnRy
eVBsYW46OkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+
IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNl
KGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzaykpCiAgICAgLCBtX3N0cmVhbWlu
Z1BhcnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKICAgICAsIG1fc3RhdGUo
U3RhdGU6OlZhbGlkYXRlZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiB9CiAKLUVudHJ5
UGxhbjo6RW50cnlQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJj
ZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uKQotICAgIDogQmFzZShjb250ZXh0LCBNb2R1bGVJbmZvcm1hdGlvbjo6Y3Jl
YXRlKCksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhy
b3dXYXNtRXhjZXB0aW9uKQotICAgICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2UpKQotICAgICwg
bV9zdHJlYW1pbmdQYXJzZXIobV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgKnRoaXMpCi0gICAg
LCBtX3N0YXRlKFN0YXRlOjpJbml0aWFsKQotICAgICwgbV9hc3luY1dvcmsod29yaykKLXsKLX0K
LQotRW50cnlQbGFuOjpFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9y
bWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiwgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDog
QmFzZShjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSwgV1RGTW92ZSh0YXNrKSkK
LSAgICAsIG1fc3RyZWFtaW5nUGFyc2VyKG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksICp0aGlz
KQotICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKLSAgICAsIG1fYXN5bmNXb3JrKEFzeW5j
V29yazo6RnVsbENvbXBpbGUpCi17Ci19Ci0KLUVudHJ5UGxhbjo6RW50cnlQbGFuKENvbnRleHQq
IGNvbnRleHQsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCitFbnRyeVBs
YW46OkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2Us
IEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRl
eHQsIFdURk1vdmUodGFzaykpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkpCiAgICAg
LCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKICAg
ICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQpAQCAt
OTgsMjYgKzgyLDYgQEAgdm9pZCBFbnRyeVBsYW46Om1vdmVUb1N0YXRlKFN0YXRlIHN0YXRlKQog
ICAgIG1fc3RhdGUgPSBzdGF0ZTsKIH0KIAotYm9vbCBFbnRyeVBsYW46OmRpZFJlY2VpdmVGdW5j
dGlvbkRhdGEodW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5j
dGlvbikKLXsKLSAgICBkYXRhTG9nTG5JZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbi5zdGFydCwgIiBh
bmQgZW5kaW5nIGF0OiAiLCBmdW5jdGlvbi5lbmQpOwotICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0
aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9uLnN0YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvbkxl
bmd0aCA9PSBmdW5jdGlvbi5kYXRhLnNpemUoKSk7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotCi0gICAgYXV0byB2
YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKLSAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsK
LSAgICAgICAgaWYgKFdhc21FbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0
aW9uLmRhdGFbaV0pKSwgIiwgIik7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oKTsKLSAgICAgICAg
fQotICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJl
c3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihm
dW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCi0gICAgfQot
ICAgIHJldHVybiAhIXZhbGlkYXRpb25SZXN1bHQ7Ci19Ci0KIGJvb2wgRW50cnlQbGFuOjpwYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxl
bmd0aCkKIHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKQEAgLTE0NCw4ICsx
MDgsNiBAQCBib29sIEVudHJ5UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShjb25zdCB1aW50
OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndAogICAgICAgICBkYXRhTG9nTG4oIlRvb2sg
IiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWNyb3NlY29uZHMoKSwgIiB1
cyB0byB2YWxpZGF0ZSBtb2R1bGUiKTsKIAogICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpWYWxpZGF0
ZWQpOwotICAgIGlmIChtX2FzeW5jV29yayA9PSBWYWxpZGF0aW9uKQotICAgICAgICBjb21wbGV0
ZShob2xkTG9jayhtX2xvY2spKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU1LDYgKzEx
Nyw3IEBAIHZvaWQgRW50cnlQbGFuOjpwcmVwYXJlKCkKICAgICBkYXRhTG9nTG5JZihXYXNtRW50
cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwogCiAgICAg
Y29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwor
ICAgIG1fbnVtYmVyT2ZGdW5jdGlvbnMgPSBmdW5jdGlvbnMuc2l6ZSgpOwogICAgIGlmICghdHJ5
UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0
byBKYXZhU2NyaXB0IHN0dWJzIikKICAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFz
c2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMiwy
MCArMTg1LDYgQEAgcHVibGljOgogICAgIEVudHJ5UGxhbiYgbV9wbGFuOwogfTsKIAotdm9pZCBF
bnRyeVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCi17Ci0gICAg
QVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4ID49IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCkpOwotICAgIGRhdGFMb2dMbklmKFdh
c21FbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKLQot
ICAgIGlmICghZmFpbGVkKCkgJiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpCi0gICAgICAg
IGRpZENvbXBsZXRlQ29tcGlsYXRpb24obG9ja2VyKTsKLQotICAgIGlmICghaXNDb21wbGV0ZSgp
KSB7Ci0gICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOwotICAgICAgICBydW5D
b21wbGV0aW9uVGFza3MobG9ja2VyKTsKLSAgICB9Ci19Ci0KIAogdm9pZCBFbnRyeVBsYW46OmNv
bXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewpAQCAtMjUxLDcgKzIw
MCw2IEBAIHZvaWQgRW50cnlQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKICAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMpOwogCiAgICAgc2l6
ZV90IGJ5dGVzQ29tcGlsZWQgPSAwOwotICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBp
ZiAoZWZmb3J0ID09IFBhcnRpYWwgJiYgYnl0ZXNDb21waWxlZCA+PSBPcHRpb25zOjp3ZWJBc3Nl
bWJseVBhcnRpYWxDb21waWxlTGltaXQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI1OSw3
ICsyMDcsNyBAQCB2b2lkIEVudHJ5UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBp
ZiAobV9jdXJyZW50SW5kZXggPj0gbV9udW1iZXJPZkZ1bmN0aW9ucykgewogICAgICAgICAgICAg
ICAgIGlmIChoYXNXb3JrKCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRl
OjpDb21waWxlZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjY5LDMxICsyMTcsMjUg
QEAgdm9pZCBFbnRyeVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgICAgICB9CiAKICAgICAgICAgY29tcGlsZUZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgp
OwotICAgICAgICBieXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5kYXRh
LnNpemUoKTsKKyAgICAgICAgYnl0ZXNDb21waWxlZCArPSBtX21vZHVsZUluZm9ybWF0aW9uLT5m
dW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZGF0YS5zaXplKCk7CiAgICAgfQogfQogCi12b2lkIEVu
dHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCit2b2lkIEVudHJ5UGxhbjo6
Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBzd2l0Y2ggKG1f
c3RhdGUpIHsKLSAgICBjYXNlIFN0YXRlOjpJbml0aWFsOgotICAgICAgICBwYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKLSAgICAgICAgaWYg
KCFoYXNXb3JrKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0NvbXBsZXRlKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBT
dGF0ZTo6VmFsaWRhdGVkOgotICAgICAgICBwcmVwYXJlKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU3RhdGU6OlByZXBhcmVkOgotICAgICAgICBjb21waWxlRnVuY3Rpb25zKGVmZm9ydCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIEFTU0VS
VChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtRW50
cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7CisKKyAgICBp
ZiAoIWZhaWxlZCgpICYmIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKQorICAgICAgICBkaWRD
b21wbGV0ZUNvbXBpbGF0aW9uKGxvY2tlcik7CisKKyAgICBpZiAoIWlzQ29tcGxldGUoKSkgewor
ICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKKyAgICAgICAgcnVuQ29tcGxl
dGlvblRhc2tzKGxvY2tlcik7CiAgICAgfQogfQogCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRW50cnlQbGFuLmgKaW5kZXggMjQ4MzYyOGJjY2Q1MzAwMGE5ZDZiYTA1NTU3
NDYwNTdhMjU1OTA4Zi4uYjQ5ZGMyYjE1OTEyZGU5NjZjZDg4NmE2NDc0OGYwMWJjN2MyZjQ0NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbnRyeVBsYW4uaApAQCAtNDcsMzYg
KzQ3LDE1IEBAIHB1YmxpYzoKICAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29t
cGlsZSwgVmFsaWRhdGlvbiB9OwogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxk
IG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJl
IGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIEVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldy
YXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBFbnRy
eVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25U
YXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwotICAg
IEVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRh
c2smJik7Ci0gICAgRW50cnlQbGFuKENvbnRleHQqLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNr
JiYpOworICAgIEVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5
bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBFbnRyeVBs
YW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgdmlydHVhbCB+RW50cnlQbGFuKCkgPSBkZWZhdWx0OwogCi0gICAgdXNpbmcg
Q2FsbGVlSW5pdGlhbGl6ZXIgPSBGdW5jdGlvbjx2b2lkKHVpbnQzMl90LCBSZWZQdHI8Q2FsbGVl
PiYmLCBSZWY8Q2FsbGVlPiYmKT47Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IENhbGxlZUluaXRpYWxpemVyJikgPSAwOwotCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJzZUFuZFZhbGlkYXRlTW9kdWxl
KG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKLSAgICB9Ci0gICAgYm9vbCBwYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHZvaWQgcHJl
cGFyZSgpOwogCiAgICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsK
IAotICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBvcnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7Ci0gICAgfQotCi0gICAgc2l6ZV90IGludGVybmFs
RnVuY3Rpb25Db3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFp
bGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKLSAgICB9Ci0KICAgICBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+JiYgdGFrZU1vZHVsZUluZm9ybWF0aW9uKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKQEAgLTEwMywzOSArODIsMjcgQEAgcHVi
bGljOgogICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBDb21wbGV0
ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCiAgICAgfTsKIAotICAgIGJvb2wgaGFzV29y
aygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAobV9hc3luY1dvcmsgPT0gQXN5
bmNXb3JrOjpWYWxpZGF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6
VmFsaWRhdGVkOwotICAgICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpDb21waWxlZDsKLSAg
ICB9Ci0KLSAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92ZXJyaWRlOwotICAgIGJv
b2wgaGFzQmVlblByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJl
cGFyZWQ7IH0KLSAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBoYXNCZWVuUHJlcGFyZWQoKTsgfQotCi0gICAgYm9vbCBkaWRSZWNlaXZlRnVuY3Rpb25EYXRh
KHVuc2lnbmVkLCBjb25zdCBGdW5jdGlvbkRhdGEmKSBvdmVycmlkZTsKKyAgICBib29sIG11bHRp
VGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID49IFN0YXRlOjpQcmVw
YXJlZDsgfQogCiBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOwogICAgIGZy
aWVuZCBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKIAotICAgIHZvaWQgcHJlcGFyZSgpOwotICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZDsgfQotICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
KSBvdmVycmlkZTsKLQotICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKLQogcHJv
dGVjdGVkOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5k
IHRvIHBhcmVudCBjbGFzc2VzLi4uCiAgICAgdXNpbmcgQmFzZTo6bV9sb2NrOwogCisgICAgYm9v
bCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworCisgICAg
Y29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3RhdGUpOworICAgIHZvaWQgbW92ZVRvU3RhdGUoU3Rh
dGUpOworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU3RhdGU6OkNvbXBsZXRlZDsgfQorICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKSBvdmVycmlkZTsKKwogICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlSW1wbCgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVDb21waWxhdGlvbihjb25zdCBB
YnN0cmFjdExvY2tlciYpID0gMDsKIAotICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUpOwotCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBib29sIHRyeVJlc2VydmVDYXBhY2l0eShWZWN0
b3I8VD4mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpCiAgICAgewpAQCAt
MTU3LDYgKzEyNCw3IEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dv
cms7CiAgICAgdWludDhfdCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsKICAgICB1aW50
MzJfdCBtX2N1cnJlbnRJbmRleCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX251bWJlck9mRnVuY3Rp
b25zIHsgMCB9OwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oCmluZGV4IGRlOWVkZjY5MmE4NmI0NWJjZDkyZjkyMzYyZDFiNWZiM2Nh
YTNkNDAuLmNjMWYwZTRlZmZmMDhmY2I2OTQ0MGI2ZmVmZDFhNGI3MTAyMzg0MjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC00MCwz
MSArNDAsNTAgQEAgZW51bSBjbGFzcyBCbG9ja1R5cGUgewogICAgIFRvcExldmVsCiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBTdGFjaz4KLVN0YWNrIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlLCBTdGFjayYgc3RhY2spCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNsb3NpbmdTdGFj
aywgdHlwZW5hbWUgTmV3U3RhY2s+Cit2b2lkIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCBFbmNsb3NpbmdTdGFjayYgZW5jbG9zaW5nU3RhY2ssIE5ld1N0YWNrJiBuZXdTdGFj
aykKIHsKLSAgICBTdGFjayByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwotICAgIEFTU0VSVChzdGFjay5zaXplKCkg
Pj0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0
YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgIG5ld1N0YWNrLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOworICAgIEFT
U0VSVChlbmNsb3NpbmdTdGFjay5zaXplKCkgPj0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkp
OworICAgIHVuc2lnbmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KHN0YWNrLmF0KGkgKyBvZmZzZXQpKTsKLSAgICBzdGFjay5zaHJpbmsob2Zmc2V0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICBuZXdTdGFjay51bmNoZWNrZWRBcHBlbmQoZW5jbG9zaW5n
U3RhY2suYXQoaSArIG9mZnNldCkpOworICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogY2xhc3MgRnVuY3Rpb25QYXJzZXIg
OiBwdWJsaWMgUGFyc2VyPHZvaWQ+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBFeHByZXNzaW9uVHlw
ZSA9IHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25UeXBlOworICAgIHN0cnVjdCBDb250cm9s
RW50cnk7CisKICAgICB1c2luZyBDb250cm9sVHlwZSA9IHR5cGVuYW1lIENvbnRleHQ6OkNvbnRy
b2xUeXBlOwotICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gdHlwZW5hbWUgQ29udGV4dDo6RXhw
cmVzc2lvbkxpc3Q7Ci0gICAgdXNpbmcgU3RhY2sgPSB0eXBlbmFtZSBDb250ZXh0OjpTdGFjazsK
LSAgICB1c2luZyBSZXN1bHRMaXN0ID0gdHlwZW5hbWUgQ29udGV4dDo6UmVzdWx0TGlzdDsKKyAg
ICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25UeXBl
OwogCi0gICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mKTsKKyAgICBjbGFzcyBUeXBlZEV4cHJlc3Npb24geworICAgIHB1Ymxp
YzoKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uKCkgPSBkZWZhdWx0OwogCi0gICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOworICAgICAgICBUeXBlZEV4cHJlc3Npb24oVHlwZSB0
eXBlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKKyAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCisg
ICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgICAgIEV4cHJl
c3Npb25UeXBlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBvcGVy
YXRvciBFeHByZXNzaW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgICAg
ICBFeHByZXNzaW9uVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIEV4cHJlc3Npb25U
eXBlIG1fdmFsdWU7CisgICAgfTsKKworICAgIHVzaW5nIENvbnRyb2xTdGFjayA9IFZlY3RvcjxD
b250cm9sRW50cnksIDE2PjsKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Np
b25UeXBlLCA4PjsKKyAgICB1c2luZyBTdGFjayA9IFZlY3RvcjxUeXBlZEV4cHJlc3Npb24sIDE2
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz47CiAKICAgICBzdHJ1Y3QgQ29udHJvbEVudHJ5IHsKICAg
ICAgICAgU3RhY2sgZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CkBAIC03MiwxMSArOTEsMTUgQEAg
cHVibGljOgogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKICAgICB9OwogCisgICAg
RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNp
emVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mKTsKKworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKwogICAg
IE9wVHlwZSBjdXJyZW50T3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T3Bjb2RlOyB9
CiAgICAgc2l6ZV90IGN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0OyB9CiAgICAgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCi0gICAgVmVjdG9yPENv
bnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9Cisg
ICAgQ29udHJvbFN0YWNrJiBjb250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsg
fQogICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2soKSB7IHJldHVybiBtX2V4cHJlc3Npb25TdGFj
azsgfQogCiBwcml2YXRlOgpAQCAtODYsNiArMTA5LDggQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGNoZWNrQnJhbmNoVGFyZ2V0KGNvbnN0IENvbnRyb2xUeXBlJik7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnkoY29uc3QgQ29udHJvbFR5
cGUmKTsKIAogI2RlZmluZSBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJlc3Vs
dCwgd2hhdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgcG9w
IGVtcHR5IHN0YWNrIGluICIgd2hhdCk7IFwKQEAgLTk0LDE4ICsxMTksMzggQEAgcHJpdmF0ZToK
ICAgICB9IHdoaWxlICgwKQogCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuYXJ5Q2FzZSgpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHVuYXJ5Q2FzZShUeXBlIHJldHVyblR5cGUsIFR5cGUgb3BlcmFuZFR5
cGUpOwogCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGJpbmFyeUNhc2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBiaW5hcnlDYXNlKFR5cGUgcmV0dXJuVHlwZSwgVHlwZSBsaHNUeXBlLCBUeXBlIHJoc1R5
cGUpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoVHlwZSBt
ZW1vcnlUeXBlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKFR5
cGUgbWVtb3J5VHlwZSk7CiAKICNkZWZpbmUgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkX2V4
cHJlc3Npb24pIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMobV9jb250ZXh0LmFkZF9leHByZXNz
aW9uKQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5F
IFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHZhbGlkYXRpb25GYWlsKGNvbnN0
IEFyZ3MmLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFp
bHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAg
aWYgKFVOTElLRUxZKCFBU1NFUlRfRElTQUJMRUQgJiYgT3B0aW9uczo6Y3Jhc2hPbkZhaWxlZFdl
YkFzc2VtYmx5VmFsaWRhdGUoKSkpCisgICAgICAgICAgICBXVEZCcmVha3BvaW50VHJhcCgpOwor
CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgb3V0LnByaW50KCJXZWJB
c3NlbWJseS5Nb2R1bGUgZG9lc24ndCB2YWxpZGF0ZTogIl9zLCBhcmdzLi4uKTsKKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQob3V0LnRvU3RyaW5nKCkpOworICAgIH0KKyNkZWZpbmUg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAgIGlm
IChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
cmV0dXJuIHZhbGlkYXRpb25GYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICBcCisgICAg
fSB3aGlsZSAoMCkKKwogICAgIC8vIEZJWE1FIGFkZCBhIG1hY3JvIGFzIGFib3ZlIGZvciBXQVNN
X1RSWV9BUFBFTkRfVE9fQ09OVFJPTF9TVEFDSyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1ODYyCiAKICAgICBDb250ZXh0JiBtX2NvbnRleHQ7CiAgICAgU3RhY2sg
bV9leHByZXNzaW9uU3RhY2s7Ci0gICAgVmVjdG9yPENvbnRyb2xFbnRyeT4gbV9jb250cm9sU3Rh
Y2s7CisgICAgQ29udHJvbFN0YWNrIG1fY29udHJvbFN0YWNrOworICAgIFZlY3RvcjxUeXBlLCAx
Nj4gbV9sb2NhbHM7CiAgICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKICAgICBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogCkBAIC0xMzYsNiArMTgxLDEwIEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZSksICJjYW4ndCBh
ZGQgIiwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyB0byBGdW5jdGlv
biIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGxvY2FsR3JvdXBz
Q291bnQpLCAiY2FuJ3QgZ2V0IGxvY2FsIGdyb3VwcyBjb3VudCIpOwogCisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBmdW5jdGlvbidz
ICIsIG1fc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisg
ICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFwcGVuZChtX3NpZ25hdHVyZS5hcmd1bWVudChpKSk7
CisKICAgICB1aW50NjRfdCB0b3RhbE51bWJlck9mTG9jYWxzID0gbV9zaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsb2NhbEdyb3Vwc0NvdW50
OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMb2NhbHM7CkBAIC0xNDUsNiArMTk0
LDExIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiAg
ICAgICAgIHRvdGFsTnVtYmVyT2ZMb2NhbHMgKz0gbnVtYmVyT2ZMb2NhbHM7CiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYodG90YWxOdW1iZXJPZkxvY2FscyA+IG1heEZ1bmN0aW9uTG9jYWxz
LCAiRnVuY3Rpb24ncyBudW1iZXIgb2YgbG9jYWxzIGlzIHRvbyBiaWcgIiwgdG90YWxOdW1iZXJP
ZkxvY2FscywgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9uTG9jYWxzKTsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodHlwZU9mTG9jYWwpLCAiY2FuJ3QgZ2V0IEZ1
bmN0aW9uIGxvY2FsJ3MgdHlwZSBpbiBncm91cCAiLCBpKTsKKworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxOdW1iZXJPZkxvY2Fs
cyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBmdW5jdGlvbidzICIsIHRvdGFs
TnVtYmVyT2ZMb2NhbHMsICIgbG9jYWxzIik7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkxvY2FsczsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVja2Vk
QXBwZW5kKHR5cGVPZkxvY2FsKTsKKwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpKTsKICAgICB9CiAKQEAgLTE4Niwz
MSArMjQwLDEwNCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUJvZHkoKSAt
PiBQYXJ0aWFsUmVzdWx0CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiB0ZW1wbGF0ZTxP
cFR5cGUgb3A+Ci1hdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlDYXNlKCkgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6YmluYXJ5Q2FzZShU
eXBlIHJldHVyblR5cGUsIFR5cGUgbGhzVHlwZSwgVHlwZSByaHNUeXBlKSAtPiBQYXJ0aWFsUmVz
dWx0CiB7Ci0gICAgRXhwcmVzc2lvblR5cGUgcmlnaHQ7Ci0gICAgRXhwcmVzc2lvblR5cGUgbGVm
dDsKLSAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgVHlwZWRFeHByZXNzaW9uIHJpZ2h0
OworICAgIFR5cGVkRXhwcmVzc2lvbiBsZWZ0OwogCiAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyhyaWdodCwgImJpbmFyeSByaWdodCIpOwogICAgIFdBU01fVFJZX1BPUF9F
WFBSRVNTSU9OX1NUQUNLX0lOVE8obGVmdCwgImJpbmFyeSBsZWZ0Iik7Ci0gICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCByZXN1bHQpKTsK
IAotICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYobGVmdC50eXBlKCkgIT0gbGhzVHlwZSwgb3AsICIgbGVmdCB2YWx1ZSB0eXBl
IG1pc21hdGNoIik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihyaWdodC50eXBlKCkgIT0g
cmhzVHlwZSwgb3AsICIgcmlnaHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisgICAgRXhwcmVz
c2lvblR5cGUgcmVzdWx0OworICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFk
ZE9wPG9wPihsZWZ0LCByaWdodCwgcmVzdWx0KSk7CisgICAgbV9leHByZXNzaW9uU3RhY2suY29u
c3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIHRlbXBsYXRlPE9wVHlwZSBvcD4KLWF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZShUeXBlIHJldHVyblR5cGUsIFR5
cGUgb3BlcmFuZFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSB2
YWx1ZTsKLSAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0KKyAgICBUeXBlZEV4cHJlc3Npb24g
dmFsdWU7CiAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInVu
YXJ5Iik7CisKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVlLnR5cGUoKSAhPSBvcGVy
YW5kVHlwZSwgb3AsICIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisgICAgRXhwcmVzc2lvblR5
cGUgcmVzdWx0OwogICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9w
Pih2YWx1ZSwgcmVzdWx0KSk7CisgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBw
ZW5kKHJldHVyblR5cGUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29udGV4dD4KK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmxvYWQoVHlw
ZSBtZW1vcnlUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRighbV9pbmZvLm1lbW9yeSwgImxvYWQgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsK
KworICAgIHVpbnQzMl90IGFsaWdubWVudDsKKyAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgVHlw
ZWRFeHByZXNzaW9uIHBvaW50ZXI7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBsb2FkIGFsaWdubWVudCIpOworICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoYWxpZ25tZW50ID4gbWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRP
cGNvZGUpLCAiYnl0ZSBhbGlnbm1lbnQgIiwgMXVsbCA8PCBhbGlnbm1lbnQsICIgZXhjZWVkcyBs
b2FkJ3MgbmF0dXJhbCBhbGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cyQWxpZ25tZW50KG1f
Y3VycmVudE9wY29kZSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KG9mZnNldCksICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsKKyAgICBXQVNNX1RSWV9QT1BfRVhQ
UkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJsb2FkIHBvaW50ZXIiKTsKKworICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYocG9pbnRlci50eXBlKCkgIT0gSTMyLCBtX2N1cnJlbnRPcGNvZGUs
ICIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7CisKKyAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7
CisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBl
PihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpOworICAgIG1fZXhw
cmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChtZW1vcnlUeXBlLCByZXN1bHQpOworICAg
IHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CithdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpzdG9yZShUeXBlIG1lbW9yeVR5cGUpIC0+IFBhcnRpYWxSZXN1
bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFtX2luZm8ubWVtb3J5LCAic3RvcmUg
aW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsKKworICAgIHVpbnQzMl90IGFsaWdubWVudDsK
KyAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlOworICAgIFR5
cGVkRXhwcmVzc2lvbiBwb2ludGVyOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKGFsaWdubWVudCksICJjYW4ndCBnZXQgc3RvcmUgYWxpZ25tZW50Iik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVu
dE9wY29kZSksICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBleGNlZWRz
IHN0b3JlJ3MgbmF0dXJhbCBhbGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cyQWxpZ25tZW50
KG1fY3VycmVudE9wY29kZSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKG9mZnNldCksICJjYW4ndCBnZXQgc3RvcmUgb2Zmc2V0Iik7CisgICAgV0FTTV9UUllfUE9Q
X0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInN0b3JlIHZhbHVlIik7CisgICAgV0FTTV9U
UllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9pbnRlciIpOwor
CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihwb2ludGVyLnR5cGUoKSAhPSBJMzIsIG1fY3Vy
cmVudE9wY29kZSwgIiBwb2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKKyAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKHZhbHVlLnR5cGUoKSAhPSBtZW1vcnlUeXBlLCBtX2N1cnJlbnRPcGNvZGUsICIg
dmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc3Rv
cmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+KG1fY3VycmVudE9wY29kZSksIHBvaW50ZXIsIHZh
bHVlLCBvZmZzZXQpKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6Y2hlY2tCcmFuY2hUYXJnZXQo
Y29uc3QgQ29udHJvbFR5cGUmIHRhcmdldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGlmICgh
dGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IHRhcmdldC5i
cmFuY2hUYXJnZXRBcml0eSgpLCBDb250cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJnZXQpID8gImJy
YW5jaCBvdXQgb2YgZnVuY3Rpb24iIDogImJyYW5jaCB0byBibG9jayIsICIgb24gZXhwcmVzc2lv
biBzdGFjayBvZiBzaXplICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiwgYnV0IGJsb2Nr
LCAiLCB0YXJnZXQuc2lnbmF0dXJlKCktPnRvU3RyaW5nKCkgLCAiIGV4cGVjdHMgIiwgdGFyZ2V0
LmJyYW5jaFRhcmdldEFyaXR5KCksICIgdmFsdWVzIik7CisKKworICAgIHVuc2lnbmVkIG9mZnNl
dCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHko
KTsgKytpKQorICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodGFyZ2V0
LmJyYW5jaFRhcmdldFR5cGUoaSksIG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUo
KSksICJicmFuY2gncyBzdGFjayB0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb2YgYmxvY2sncyB0eXBl
IGJyYW5jaCB0YXJnZXQgdHlwZS4gU3RhY2sgdmFsdWUgaGFzIHR5cGUiLCBtX2V4cHJlc3Npb25T
dGFja1tvZmZzZXQgKyBpXS50eXBlKCksICIgYnV0IGJyYW5jaCB0YXJnZXQgZXhwZWN0cyBhIHZh
bHVlIHdpdGggc3VidHlwZSBvZiAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgIiBhdCBp
bmRleCAiLCBpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmlmeShjb25zdCBDb250cm9s
VHlwZSYgY29udHJvbERhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpICE9IG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKSwgIiBibG9jayB3aXRoIHR5cGU6ICIsIGNvbnRyb2xEYXRhLnNp
Z25hdHVyZSgpLT50b1N0cmluZygpLCAiIHJldHVybnM6ICIsIGNvbnRyb2xEYXRhLnNpZ25hdHVy
ZSgpLT5yZXR1cm5Db3VudCgpLCAiIGJ1dCBzdGFjayBoYXM6ICIsIG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSwgIiB2YWx1ZXMiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29udHJv
bERhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKSwgY29u
dHJvbERhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSkpLCAiY29udHJvbCBmbG93IHJldHVy
bnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUuICIsIG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKSwg
IiBpcyBub3QgYSBzdWJ0eXBlIG9mICIsIGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5U
eXBlKGkpKTsKIAotICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogICAgIHJl
dHVybiB7IH07CiB9CiAKQEAgLTIxOCw4NSArMzQ1LDY2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+CiBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgc3dpdGNoIChtX2N1cnJlbnRPcGNvZGUpIHsKLSNkZWZp
bmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5cGU6Om5hbWU6IHJl
dHVybiBiaW5hcnlDYXNlPE9wVHlwZTo6bmFtZT4oKTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFt
ZSwgaWQsIGIzb3AsIGluYywgbGhzVHlwZSwgcmhzVHlwZSwgcmV0dXJuVHlwZSkgY2FzZSBPcFR5
cGU6Om5hbWU6IHJldHVybiBiaW5hcnlDYXNlPE9wVHlwZTo6bmFtZT4ocmV0dXJuVHlwZSwgbGhz
VHlwZSwgcmhzVHlwZSk7CiAgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0NBU0Up
CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNv
cCwgaW5jKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIHVuYXJ5Q2FzZTxPcFR5cGU6Om5hbWU+
KCk7CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMsIG9wZXJhbmRUeXBl
LCByZXR1cm5UeXBlKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIHVuYXJ5Q2FzZTxPcFR5cGU6
Om5hbWU+KHJldHVyblR5cGUsIG9wZXJhbmRUeXBlKTsKICAgICBGT1JfRUFDSF9XQVNNX1VOQVJZ
X09QKENSRUFURV9DQVNFKQogI3VuZGVmIENSRUFURV9DQVNFCiAKICAgICBjYXNlIFNlbGVjdDog
ewotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247Ci0gICAgICAgIEV4cHJlc3Npb25U
eXBlIHplcm87Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIG5vblplcm87CisgICAgICAgIFR5cGVk
RXhwcmVzc2lvbiBjb25kaXRpb247CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB6ZXJvOworICAg
ICAgICBUeXBlZEV4cHJlc3Npb24gbm9uWmVybzsKIAogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQ
UkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgInNlbGVjdCBjb25kaXRpb24iKTsKICAgICAg
ICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh6ZXJvLCAic2VsZWN0IHplcm8i
KTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhub25aZXJvLCAi
c2VsZWN0IG5vbi16ZXJvIik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25k
aXRpb24udHlwZSgpICE9IEkzMiwgInNlbGVjdCBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAi
LCBjb25kaXRpb24udHlwZSgpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihub25a
ZXJvLnR5cGUoKSAhPSB6ZXJvLnR5cGUoKSwgInNlbGVjdCByZXN1bHQgdHlwZXMgbXVzdCBtYXRj
aCwgZ290ICIsIG5vblplcm8udHlwZSgpLCAiIGFuZCAiLCB6ZXJvLnR5cGUoKSk7CisKICAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvLCByZXN1bHQpKTsKIAotICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHplcm8udHlwZSgpLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwg
aW5jKSBjYXNlIE9wVHlwZTo6bmFtZToKLSAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9MT0FEX09Q
KENSRUFURV9DQVNFKSB7Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAgICAgICAgdWlu
dDMyX3Qgb2Zmc2V0OwotICAgICAgICBFeHByZXNzaW9uVHlwZSBwb2ludGVyOwotICAgICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGFsaWdubWVudCksICJjYW4ndCBnZXQgbG9hZCBhbGlnbm1lbnQiKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1f
Y3VycmVudE9wY29kZSksICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBl
eGNlZWRzIGxvYWQncyBuYXR1cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8IG1lbW9yeUxvZzJBbGln
bm1lbnQobV9jdXJyZW50T3Bjb2RlKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsKLSAgICAgICAg
V0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAibG9hZCBwb2ludGVy
Iik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8TG9h
ZE9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKTsKLSAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQorI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jLCBtZW1v
cnlUeXBlKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIGxvYWQobWVtb3J5VHlwZSk7CitGT1Jf
RUFDSF9XQVNNX01FTU9SWV9MT0FEX09QKENSRUFURV9DQVNFKQorI3VuZGVmIENSRUFURV9DQVNF
CiAKLSAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkgewotICAg
ICAgICB1aW50MzJfdCBhbGlnbm1lbnQ7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICAg
ICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHBvaW50ZXI7
Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCks
ICJjYW4ndCBnZXQgc3RvcmUgYWxpZ25tZW50Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoYWxpZ25tZW50ID4gbWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNvZGUpLCAiYnl0
ZSBhbGlnbm1lbnQgIiwgMXVsbCA8PCBhbGlnbm1lbnQsICIgZXhjZWVkcyBzdG9yZSdzIG5hdHVy
YWwgYWxpZ25tZW50ICIsIDF1bGwgPDwgbWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNv
ZGUpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIob2Zmc2V0
KSwgImNhbid0IGdldCBzdG9yZSBvZmZzZXQiKTsKLSAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJF
U1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInN0b3JlIHZhbHVlIik7Ci0gICAgICAgIFdBU01fVFJZ
X1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgInN0b3JlIHBvaW50ZXIiKTsKLSAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5
cGU+KG1fY3VycmVudE9wY29kZSksIHBvaW50ZXIsIHZhbHVlLCBvZmZzZXQpKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBp
bmMsIG1lbW9yeVR5cGUpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gc3RvcmUobWVtb3J5VHlw
ZSk7CitGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICN1bmRlZiBD
UkVBVEVfQ0FTRQogCiAgICAgY2FzZSBGMzJDb25zdDogewogICAgICAgICB1aW50MzJfdCBjb25z
dGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIoY29uc3RhbnQp
LCAiY2FuJ3QgcGFyc2UgMzItYml0IGZsb2F0aW5nLXBvaW50IGNvbnN0YW50Iik7Ci0gICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoRjMyLCBjb25z
dGFudCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRjMy
LCBtX2NvbnRleHQuYWRkQ29uc3RhbnQoRjMyLCBjb25zdGFudCkpOwogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIAogICAgIGNhc2UgSTMyQ29uc3Q6IHsKICAgICAgICAgaW50MzJfdCBjb25z
dGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQzMihjb25zdGFu
dCksICJjYW4ndCBwYXJzZSAzMi1iaXQgY29uc3RhbnQiKTsKLSAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIsIGNvbnN0YW50KSk7CisgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJMzIsIG1fY29udGV4dC5h
ZGRDb25zdGFudChJMzIsIGNvbnN0YW50KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBGNjRDb25zdDogewogICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgcGFy
c2UgNjQtYml0IGZsb2F0aW5nLXBvaW50IGNvbnN0YW50Iik7Ci0gICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoRjY0LCBjb25zdGFudCkpOworICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRjY0LCBtX2NvbnRleHQu
YWRkQ29uc3RhbnQoRjY0LCBjb25zdGFudCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAogICAgIGNhc2UgSTY0Q29uc3Q6IHsKICAgICAgICAgaW50NjRfdCBjb25zdGFudDsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25zdGFudCksICJjYW4ndCBw
YXJzZSA2NC1iaXQgY29uc3RhbnQiKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5k
KG1fY29udGV4dC5hZGRDb25zdGFudChJNjQsIGNvbnN0YW50KSk7CisgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJNjQsIG1fY29udGV4dC5hZGRDb25zdGFudChJ
NjQsIGNvbnN0YW50KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zMDQsMTAg
KzQxMiwxNiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24o
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6
OnVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVmZXJlbmNlcyBhcmUgbm90IGVuYWJsZWQi
KTsKICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBwYXJzZSB0YWJsZSBpbmRl
eCIpOwotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQsIGluZGV4OworICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9pbmZvLnRhYmxlQ291bnQoKSwgInRh
YmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9pbmZv
LnRhYmxlQ291bnQoKSk7CisKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGluZGV4OwogICAgICAg
ICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGluZGV4LCAidGFibGUuZ2V0Iik7
CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoSTMyICE9IGluZGV4LnR5cGUoKSwgInRh
YmxlLmdldCBpbmRleCB0byB0eXBlICIsIGluZGV4LnR5cGUoKSwgIiBleHBlY3RlZCAiLCBJMzIp
OworCisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkVGFibGVHZXQodGFibGVJbmRleCwgaW5kZXgsIHJlc3VsdCkpOwotICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgVHlwZSByZXN1
bHRUeXBlID0gbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpOworICAgICAgICBt
X2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmVzdWx0VHlwZSwgcmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTMxNSwxMCArNDI5LDE1IEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlS
ZWZlcmVuY2VzKCksICJyZWZlcmVuY2VzIGFyZSBub3QgZW5hYmxlZCIpOwogICAgICAgICB1bnNp
Z25lZCB0YWJsZUluZGV4OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMih0YWJsZUluZGV4KSwgImNhbid0IHBhcnNlIHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHZhbCwgaW5kZXg7Ci0gICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9O
X1NUQUNLX0lOVE8odmFsLCAidGFibGUuc2V0Iik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYodGFibGVJbmRleCA+PSBtX2luZm8udGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwg
dGFibGVJbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8udGFibGVDb3VudCgp
KTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlLCBpbmRleDsKKyAgICAgICAgV0FTTV9U
UllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInRhYmxlLnNldCIpOwogICAgICAg
ICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGluZGV4LCAidGFibGUuc2V0Iik7
Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlU2V0KHRhYmxlSW5kZXgs
IGluZGV4LCB2YWwpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihJMzIgIT0gaW5k
ZXgudHlwZSgpLCAidGFibGUuc2V0IGluZGV4IHRvIHR5cGUgIiwgaW5kZXgudHlwZSgpLCAiIGV4
cGVjdGVkICIsIEkzMik7CisgICAgICAgIFR5cGUgdHlwZSA9IG1faW5mby50YWJsZXNbdGFibGVJ
bmRleF0ud2FzbVR5cGUoKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0
eXBlKHZhbHVlLnR5cGUoKSwgdHlwZSksICJ0YWJsZS5zZXQgdmFsdWUgdG8gdHlwZSAiLCB2YWx1
ZS50eXBlKCksICIgZXhwZWN0ZWQgIiwgdHlwZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
aW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5cGU6OkFueXJl
ZiB8fCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBl
OjpGdW5jcmVmKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVGFibGVTZXQo
dGFibGVJbmRleCwgaW5kZXgsIHZhbHVlKSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CkBAIC0zMjgsMjcgKzQ0NywzOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVUludDgoZXh0T3ApLCAiY2FuJ3QgcGFyc2UgdGFibGUgZXh0ZW5kZWQgb3Bjb2Rl
Iik7CiAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXg7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgcGFyc2UgdGFibGUgaW5k
ZXgiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1faW5m
by50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQs
IGxpbWl0IGlzICIsIG1faW5mby50YWJsZUNvdW50KCkpOwogCiAgICAgICAgIHN3aXRjaCAoc3Rh
dGljX2Nhc3Q8RXh0VGFibGVPcFR5cGU+KGV4dE9wKSkgewogICAgICAgICBjYXNlIEV4dFRhYmxl
T3BUeXBlOjpUYWJsZVNpemU6IHsKICAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsK
ICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlU2l6ZSh0YWJsZUlu
ZGV4LCByZXN1bHQpKTsKLSAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1
bHQpOworICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKEkz
MiwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
RXh0VGFibGVPcFR5cGU6OlRhYmxlR3JvdzogewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUg
ZmlsbCwgZGVsdGEsIHJlc3VsdDsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBmaWxsOwor
ICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGRlbHRhOwogICAgICAgICAgICAgV0FTTV9UUllf
UE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgInRhYmxlLmdyb3ciKTsKICAgICAgICAg
ICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oZmlsbCwgInRhYmxlLmdyb3ci
KTsKKworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGZpbGwu
dHlwZSgpLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkpLCAidGFibGUuZ3Jv
dyBleHBlY3RzIGZpbGwgdmFsdWUgb2YgdHlwZSAiLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhd
Lndhc21UeXBlKCksICIgZ290ICIsIGZpbGwudHlwZSgpKTsKKyAgICAgICAgICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYoSTMyICE9IGRlbHRhLnR5cGUoKSwgInRhYmxlLmdyb3cgZXhwZWN0cyBh
biBpMzIgZGVsdGEgdmFsdWUsIGdvdCAiLCBkZWx0YS50eXBlKCkpOworCisgICAgICAgICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRUYWJsZUdyb3codGFibGVJbmRleCwgZmlsbCwgZGVsdGEsIHJlc3VsdCkpOwotICAgICAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRUYWJsZU9wVHlwZTo6VGFibGVG
aWxsOiB7Ci0gICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIGZpbGwsIGNvdW50Owor
ICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIG9mZnNldCwgZmlsbCwgY291bnQ7CiAgICAgICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvdW50LCAidGFibGUuZmls
bCIpOwogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhmaWxs
LCAidGFibGUuZmlsbCIpOwogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyhvZmZzZXQsICJ0YWJsZS5maWxsIik7CisKKyAgICAgICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoIWlzU3VidHlwZShmaWxsLnR5cGUoKSwgbV9pbmZvLnRhYmxlc1t0YWJsZUlu
ZGV4XS53YXNtVHlwZSgpKSwgInRhYmxlLmZpbGwgZXhwZWN0cyBmaWxsIHZhbHVlIG9mIHR5cGUg
IiwgbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpLCAiIGdvdCAiLCBmaWxsLnR5
cGUoKSk7CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKEkzMiAhPSBvZmZzZXQu
dHlwZSgpLCAidGFibGUuZmlsbCBleHBlY3RzIGFuIGkzMiBvZmZzZXQgdmFsdWUsIGdvdCAiLCBv
ZmZzZXQudHlwZSgpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoSTMyICE9
IGNvdW50LnR5cGUoKSwgInRhYmxlLmZpbGwgZXhwZWN0cyBhbiBpMzIgY291bnQgdmFsdWUsIGdv
dCAiLCBjb3VudC50eXBlKCkpOworCiAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRUYWJsZUZpbGwodGFibGVJbmRleCwgb2Zmc2V0LCBmaWxsLCBjb3VudCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM2MSwxNiArNDkyLDE4IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAog
ICAgIGNhc2UgUmVmTnVsbDogewogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMoKSwgInJlZmVyZW5jZXMgYXJlIG5vdCBlbmFibGVk
Iik7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3Rh
bnQoRnVuY3JlZiwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRnVuY3JlZiwgbV9jb250ZXh0LmFkZENvbnN0
YW50KEZ1bmNyZWYsIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICBjYXNlIFJlZklzTnVsbDogewogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMoKSwgInJlZmVyZW5j
ZXMgYXJlIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCwgdmFs
dWU7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICAgICAgV0FTTV9UUllfUE9Q
X0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInJlZi5pc19udWxsIik7CisgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZS50eXBlKCksIEFueXJlZiksICJy
ZWYuaXNfbnVsbCB0byB0eXBlICIsIHZhbHVlLnR5cGUoKSwgIiBleHBlY3RlZCAiLCBBbnlyZWYp
OworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZFJlZklzTnVsbCh2YWx1ZSwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IApAQCAtMzgwLDggKzUxMywxMCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVmZXJlbmNlcyBhcmUg
bm90IGVuYWJsZWQiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciByZWYuZnVuYyIpOwogCisgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNp
emUoKSwgInJlZi5mdW5jIGluZGV4ICIsIGluZGV4LCAiIGlzIHRvbyBsYXJnZSwgbWF4IGlzICIs
IG1faW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgICAgICBtX2luZm8uYWRkUmVm
ZXJlbmNlZEZ1bmN0aW9uKGluZGV4KTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkUmVmRnVuYyhpbmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFw
cGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBl
bmQoRnVuY3JlZiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTM4
OSwxNiArNTI0LDE4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVz
c2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAg
IEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciBnZXRfbG9jYWwiKTsKKyAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2xvY2Fscy5zaXplKCksICJh
dHRlbXB0IHRvIHVzZSB1bmtub3duIGxvY2FsICIsIGluZGV4LCAiIGxhc3Qgb25lIGlzICIsIG1f
bG9jYWxzLnNpemUoKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldExvY2Fs
KGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChtX2xvY2Fs
c1tpbmRleF0sIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2Fz
ZSBTZXRMb2NhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgRXhwcmVzc2lv
blR5cGUgdmFsdWU7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4
IGZvciBzZXRfbG9jYWwiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyh2YWx1ZSwgInNldF9sb2NhbCIpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KCFpc1N1YnR5cGUodmFsdWUudHlwZSgpLCBtX2xvY2Fsc1tpbmRleF0pLCAic2V0X2xvY2FsIHRv
IHR5cGUgIiwgdmFsdWUudHlwZSgpLCAiIGV4cGVjdGVkICIsIG1fbG9jYWxzW2luZGV4XSk7CiAg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCB2YWx1ZSkpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTQwNyw3ICs1NDQsOSBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHRlZV9sb2NhbCIpOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImNh
bid0IHRlZV9sb2NhbCBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrIik7Ci0gICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCBtX2V4cHJlc3Npb25TdGFjay5sYXN0
KCkpKTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2su
bGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodmFsdWUu
dHlwZSgpLCBtX2xvY2Fsc1tpbmRleF0pLCAic2V0X2xvY2FsIHRvIHR5cGUgIiwgdmFsdWUudHlw
ZSgpLCAiIGV4cGVjdGVkICIsIG1fbG9jYWxzW2luZGV4XSk7CisgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCB2YWx1ZSkpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIApAQCAtNDE1LDE2ICs1NTQsMjcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICB1aW50MzJf
dCBpbmRleDsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2Jh
bCdzIGluZGV4Iik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9p
bmZvLmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGds
b2JhbCwgbGltaXQgaXMgIiwgbV9pbmZvLmdsb2JhbHMuc2l6ZSgpKTsKKyAgICAgICAgVHlwZSBy
ZXN1bHRUeXBlID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgICAgIEFTU0VSVChp
c1ZhbHVlVHlwZShyZXN1bHRUeXBlKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGdldEdsb2JhbChpbmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFw
cGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBl
bmQocmVzdWx0VHlwZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBjYXNlIFNldEdsb2JhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgRXhw
cmVzc2lvblR5cGUgdmFsdWU7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0
IHNldF9nbG9iYWwncyBpbmRleCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9T
VEFDS19JTlRPKHZhbHVlLCAic2V0X2dsb2JhbCB2YWx1ZSIpOworCisgICAgICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmdsb2JhbHMuc2l6ZSgpLCAic2V0X2dsb2Jh
bCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9pbmZvLmdsb2Jh
bHMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2luZm8uZ2xvYmFs
c1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSwgInNldF9nbG9iYWwgIiwg
aW5kZXgsICIgaXMgaW1tdXRhYmxlIik7CisKKyAgICAgICAgVHlwZSBnbG9iYWxUeXBlID0gbV9p
bmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgICAgIEFTU0VSVChpc1ZhbHVlVHlwZShnbG9i
YWxUeXBlKSk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZ2xvYmFsVHlwZSAhPSB2
YWx1ZS50eXBlKCksICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIHdpdGggdHlwZSAiLCBnbG9iYWxU
eXBlLCAiIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlICIsIHZhbHVlLnR5cGUoKSk7CisKICAgICAg
ICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSkpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTQ0MiwxNSArNTkyLDIyIEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxs
ZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lv
blN0YWNrLmF0KGkpKTsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJl
c3Npb25TdGFjay5hdChpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZShhcmcudHlwZSgpLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJn
dW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJn
LnR5cGUoKSwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJz
dEFyZ3VtZW50SW5kZXgpKTsKKyAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGFyZyk7
CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAgICAgICAg
fQogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsK
IAorICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
ID09IGFyZ3Muc2l6ZSgpKTsKKwogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2ln
bmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CiAKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBw
ZW5kVmVjdG9yKHJlc3VsdHMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVTaWduYXR1
cmUucmV0dXJuQ291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNhbGxlZVNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAg
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoY2FsbGVlU2lnbmF0
dXJlLnJldHVyblR5cGUoaSksIHJlc3VsdHNbaV0pOwogCiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQpAQCAtNDY5LDE4ICs2MjYsMjcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBzaXplX3QgYXJndW1l
bnRDb3VudCA9IGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxOyAvLyBBZGQgdGhl
IGNhbGxlZSdzIGluZGV4LgogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291
bnQgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsX2luZGlyZWN0IGV4cGVjdHMgIiwg
YXJndW1lbnRDb3VudCwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJy
ZW50bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCisg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5
cGUoKSAhPSBJMzIsICJub24taTMyIGNhbGxfaW5kaXJlY3QgaW5kZXggIiwgbV9leHByZXNzaW9u
U3RhY2subGFzdCgpLnR5cGUoKSk7CisKICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBh
cmdzOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0
eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGFy
Z3VtZW50Q291bnQsICIgY2FsbF9pbmRpcmVjdCBhcmd1bWVudHMiKTsKICAgICAgICAgc2l6ZV90
IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGFyZ3VtZW50
Q291bnQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXJncy51bmNoZWNr
ZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2suYXQoaSkpOworICAgICAgICAgICAgVHlwZWRFeHBy
ZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpOworICAgICAgICAgICAgaWYgKGkg
PCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKQorICAgICAgICAgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShhcmcudHlwZSgpLCBjYWxsZWVTaWduYXR1cmUu
YXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRj
aCBpbiBjYWxsX2luZGlyZWN0LCBnb3QgIiwgYXJnLnR5cGUoKSwgIiwgZXhwZWN0ZWQgIiwgY2Fs
bGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpKTsKKyAgICAgICAg
ICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGFyZyk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlk
UG9wVmFsdWVGcm9tU3RhY2soKTsKICAgICAgICAgfQogICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAorCisKICAgICAgICAgUmVzdWx0TGlzdCBy
ZXN1bHRzOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3Qo
dGFibGVJbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7Ci0gICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmFwcGVuZFZlY3RvcihyZXN1bHRzKTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2FsbGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKKyAg
ICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChjYWxsZWVTaWdu
YXR1cmUucmV0dXJuVHlwZShpKSwgcmVzdWx0c1tpXSk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CkBAIC00ODksNiArNjU1LDEzIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgQmxvY2tTaWduYXR1
cmUgaW5saW5lU2lnbmF0dXJlOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJs
b2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBibG9jaydz
IHNpZ25hdHVyZSIpOwogCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28g
ZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgYmxvY2suIEJsb2NrIGV4cGVjdHMgIiwgaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIEJsb2NrIGhhcyBpbmxpbmVTaWduYXR1cmU6ICIsIGlu
bGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgVHlwZSB0eXBlID0gbV9leHByZXNzaW9u
U3RhY2suYXQob2Zmc2V0ICsgaSkudHlwZSgpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRighaXNTdWJ0eXBlKHR5cGUsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkpLCAi
QmxvY2sgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlIGEgc3VidHlw
ZSBvZiAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVudCBoYXMg
dHlwZSAiLCB0eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7CiAgICAgICAg
IENvbnRyb2xUeXBlIGJsb2NrOwpAQCAtNTA1LDYgKzY3OCwxMyBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAg
IEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4n
dCBnZXQgbG9vcCdzIHNpZ25hdHVyZSIpOwogCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCksICJUb28gZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgbG9vcCBibG9jay4gTG9vcCBleHBl
Y3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBMb29wIGhhcyBpbmxpbmVT
aWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5l
U2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgVHlwZSB0eXBl
ID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zmc2V0ICsgaSkudHlwZSgpOworICAgICAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHR5cGUsIGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnQoaSkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIg
dG8gYmUgYSBzdWJ0eXBlIG9mICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICIgYnV0
IGFyZ3VtZW50IGhhcyB0eXBlICIsIHR5cGUpOworICAgICAgICB9CisKICAgICAgICAgaW50NjRf
dCBvbGRTaXplID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAgICAgICBTdGFjayBuZXdT
dGFjazsKICAgICAgICAgQ29udHJvbFR5cGUgbG9vcDsKQEAgLTUxOSwxMCArNjk5LDE2IEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKIAogICAgIGNhc2UgSWY6IHsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2ln
bmF0dXJlOwotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247CisgICAgICAgIFR5cGVk
RXhwcmVzc2lvbiBjb25kaXRpb247CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
QmxvY2tTaWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGlmJ3Mg
c2lnbmF0dXJlIik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
Y29uZGl0aW9uLCAiaWYgY29uZGl0aW9uIik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihjb25kaXRpb24udHlwZSgpICE9IEkzMiwgImlmIGNvbmRpdGlvbiBtdXN0IGJlIGkzMiwg
Z290ICIsIGNvbmRpdGlvbi50eXBlKCkpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIGlmIGJsb2NrLiBJZiBleHBlY3Rz
ICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBJZiBibG9jayBoYXMgc2lnbmF0
dXJlOiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkpOworICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKCFpc1N1YnR5cGUobV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0ICsgaV0udHlwZSgpLCBp
bmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQg
YXQgaW5kZXgiLCBpLCAiIHRvIGJlIGEgc3VidHlwZSBvZiAiLCBpbmxpbmVTaWduYXR1cmUtPmFy
Z3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tp
XS50eXBlKCkpOworCiAgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7CiAgICAgICAgIENvbnRyb2xUeXBlIGNv
bnRyb2w7CkBAIC01MzcsMzIgKzcyMyw0MCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBjYXNlIEVsc2U6IHsK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkgPT0gMSwg
ImNhbid0IHVzZSBlbHNlIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOwot
ICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlKG1fY29udHJvbFN0YWNrLmxh
c3QoKS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKLSAgICAgICAgbV9leHByZXNz
aW9uU3RhY2sgPSBXVEZNb3ZlKG1fY29udHJvbFN0YWNrLmxhc3QoKS5lbHNlQmxvY2tTdGFjayk7
CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5s
YXN0KCk7CisKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9s
RW50cnkuY29udHJvbERhdGEpKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRFbHNlKGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKKyAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBXVEZNb3ZlKGNvbnRyb2xFbnRyeS5lbHNlQmxvY2tT
dGFjayk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBCcjoKICAgICBj
YXNlIEJySWY6IHsKICAgICAgICAgdWludDMyX3QgdGFyZ2V0OwotICAgICAgICBFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24gPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24oKTsKKyAgICAgICAgVHlw
ZWRFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIodGFyZ2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFyZ2V0Iik7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUo
KSwgImJyIC8gYnJfaWYncyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFj
ayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRP
cGNvZGUgPT0gQnJJZikKKyAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9PSBCcklmKSB7CiAg
ICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwg
ImJyIC8gYnJfaWYgY29uZGl0aW9uIik7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uLnR5cGUoKSAhPSBJMzIsICJjb25kaXRpb25hbCBi
cmFuY2ggd2l0aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25kaXRpb24udHlwZSgpKTsKKyAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgICAg
ICAgICAgY29uZGl0aW9uID0gVHlwZWRFeHByZXNzaW9uIHsgVm9pZCwgQ29udGV4dDo6ZW1wdHlF
eHByZXNzaW9uKCkgfTsKKyAgICAgICAgfQogCiAgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0g
bV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJv
bERhdGE7Ci0KKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhjaGVja0JyYW5jaFRh
cmdldChkYXRhKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEJyYW5jaChk
YXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgY2FzZSBCclRhYmxlOiB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9m
VGFyZ2V0czsKLSAgICAgICAgdWludDMyX3QgZGVmYXVsdFRhcmdldDsKLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgY29uZGl0aW9uOworICAgICAgICB1aW50MzJfdCBkZWZhdWx0VGFyZ2V0SW5kZXg7
CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBjb25kaXRpb247CiAgICAgICAgIFZlY3RvcjxDb250
cm9sVHlwZSo+IHRhcmdldHM7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIobnVtYmVyT2ZUYXJnZXRzKSwgImNhbid0IGdldCB0aGUgbnVtYmVyIG9mIHRhcmdl
dHMgZm9yIGJyX3RhYmxlIik7CkBAIC01NzYsMTcgKzc3MCwyOSBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAg
ICAgICB0YXJnZXRzLnVuY2hlY2tlZEFwcGVuZCgmbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3Rh
Y2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGEpOwogICAgICAgICB9CiAKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGVmYXVsdFRhcmdldCksICJj
YW4ndCBnZXQgZGVmYXVsdCB0YXJnZXQgZm9yIGJyX3RhYmxlIik7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZGVmYXVsdFRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJicl90
YWJsZSdzIGRlZmF1bHQgdGFyZ2V0ICIsIGRlZmF1bHRUYXJnZXQsICIgZXhjZWVkcyBjb250cm9s
IHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGVmYXVsdFRhcmdldEluZGV4KSwgImNhbid0IGdl
dCBkZWZhdWx0IHRhcmdldCBmb3IgYnJfdGFibGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihkZWZhdWx0VGFyZ2V0SW5kZXggPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAiYnJfdGFi
bGUncyBkZWZhdWx0IHRhcmdldCAiLCBkZWZhdWx0VGFyZ2V0SW5kZXgsICIgZXhjZWVkcyBjb250
cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgQ29udHJv
bFR5cGUmIGRlZmF1bHRUYXJnZXQgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXpl
KCkgLSAxIC0gZGVmYXVsdFRhcmdldEluZGV4XS5jb250cm9sRGF0YTsKIAogICAgICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJyX3RhYmxlIGNvbmRp
dGlvbiIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRTd2l0Y2goY29uZGl0
aW9uLCB0YXJnZXRzLCBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0g
ZGVmYXVsdFRhcmdldF0uY29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CisgICAgICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uLnR5cGUoKSAhPSBJMzIsICJicl90YWJs
ZSB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNvbmRpdGlvbi50eXBlKCkpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBDb250cm9sVHlwZSogdGFyZ2V0ID0gdGFyZ2V0c1tpXTsKKyAgICAgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpICE9IHRh
cmdldC0+YnJhbmNoVGFyZ2V0QXJpdHkoKSwgImJyX3RhYmxlIHRhcmdldCB0eXBlIHNpemUgbWlz
bWF0Y2guIERlZmF1bHQgaGFzIHNpemU6ICIsIGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0QXJp
dHkoKSwgImJ1dCB0YXJnZXQ6ICIsIGksICIgaGFzIHNpemU6ICIsIHRhcmdldC0+YnJhbmNoVGFy
Z2V0QXJpdHkoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAwOyB0eXBlIDwg
ZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOyArK3R5cGUpCisgICAgICAgICAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGRlZmF1bHRUYXJnZXQuYnJhbmNo
VGFyZ2V0VHlwZSh0eXBlKSwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpKSwgImJyX3Rh
YmxlIHRhcmdldCB0eXBlIG1pc21hdGNoIGF0IG9mZnNldCAiLCB0eXBlLCAiIGV4cGVjdGVkOiAi
LCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUodHlwZSksICIgYnV0IHNhdzogIiwgdGFy
Z2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpLCAiIHdoZW4gdGFyZ2V0aW5nIGJsb2NrOiAiLCB0
YXJnZXQtPnNpZ25hdHVyZSgpLT50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCkp
OworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRTd2l0Y2goY29uZGl0aW9uLCB0
YXJnZXRzLCBkZWZhdWx0VGFyZ2V0LCBtX2V4cHJlc3Npb25TdGFjaykpOwogCiAgICAgICAgIG1f
dW5yZWFjaGFibGVCbG9ja3MgPSAxOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAg
IGNhc2UgUmV0dXJuOiB7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoY2hlY2tC
cmFuY2hUYXJnZXQobV9jb250cm9sU3RhY2tbMF0uY29udHJvbERhdGEpKTsKICAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoYWRkUmV0dXJuKG1fY29udHJvbFN0YWNrWzBdLmNvbnRyb2xE
YXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0g
MTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTU5NCwxMyArODAwLDE1IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAog
ICAgIGNhc2UgRW5kOiB7CiAgICAgICAgIENvbnRyb2xFbnRyeSBkYXRhID0gbV9jb250cm9sU3Rh
Y2sudGFrZUxhc3QoKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC5pc0NvbnRyb2xUeXBlSWYoZGF0
YS5jb250cm9sRGF0YSkpIHsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0lmKGRhdGEuY29u
dHJvbERhdGEpKSB7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5
KGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZEVsc2UoZGF0YS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShkYXRhLmVsc2VCbG9ja1N0YWNrKTsKICAg
ICAgICAgfQogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCBpbiB0aGF0
IGl0IHdpbGwgbW9kaWZ5IHRoZSBleHByZXNzaW9uU3RhY2sgZm9yIHRoZSByZXN1bHQgb2YgdGhl
IGJsb2NrLgogICAgICAgICAvLyBUaGF0J3MgYSBsaXR0bGUgdG9vIGVmZmVjdGZ1bCBmb3IgbWUg
YnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBBUEkgcmlnaHQgbm93LgogICAgICAgICAvLyBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTMKKyAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShkYXRhLmNvbnRyb2xEYXRhKSk7CiAgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0
YWNrKSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJl
c3Npb25TdGFjayk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC02MzAsMTIgKzgzOCwxMyBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2
ZWQpLCAiY2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5Iik7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVp
bnQxIGZvciBncm93X21lbW9yeSBtdXN0IGJlIHplcm8iKTsKIAotICAgICAgICBFeHByZXNzaW9u
VHlwZSBkZWx0YTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGRlbHRhOwogICAgICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGRlbHRhLCAiZXhwZWN0IGFuIGkzMiBhcmd1
bWVudCB0byBncm93X21lbW9yeSBvbiB0aGUgc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRihkZWx0YS50eXBlKCkgIT0gSTMyLCAiZ3Jvd19tZW1vcnkgd2l0aCBub24taTMy
IGRlbHRhIGFyZ3VtZW50IGhhcyB0eXBlOiAiLCBkZWx0YS50eXBlKCkpOwogCiAgICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
R3Jvd01lbW9yeShkZWx0YSwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFw
cGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBl
bmQoSTMyLCByZXN1bHQpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNjQ5LDcg
Kzg1OCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEN1cnJlbnRNZW1vcnkocmVzdWx0KSk7Ci0g
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQpAQCAtNjY0LDcgKzg3Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENv
bnRleHQ+CiBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhw
cmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV91bnJlYWNoYWJsZUJs
b2Nrcyk7Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BU
eXBlOjpuYW1lOgorI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgT3BUeXBlOjpu
YW1lOgogICAgIHN3aXRjaCAobV9jdXJyZW50T3Bjb2RlKSB7CiAgICAgY2FzZSBFbHNlOiB7CiAg
ICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKQEAgLTY4MCw5ICs4ODksMTAgQEAg
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24o
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFj
aGFibGVCbG9ja3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2Nv
bnRyb2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKG1fY29udGV4dC5pc0NvbnRy
b2xUeXBlSWYoZGF0YS5jb250cm9sRGF0YSkpIHsKKyAgICAgICAgICAgIGlmIChDb250cm9sVHlw
ZTo6aXNJZihkYXRhLmNvbnRyb2xEYXRhKSkgewogICAgICAgICAgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKICAg
ICAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IFdURk1vdmUoZGF0YS5lbHNlQmxvY2tT
dGFjayk7CisgICAgICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShk
YXRhLmNvbnRyb2xEYXRhKSk7CiAgICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQoZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVuZFRvVW5yZWFj
aGFibGUoZGF0YSkpOwpAQCAtODE0LDQgKzEwMjQsOCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAorI3VuZGVmIFdBU01fVFJZX1BPUF9FWFBSRVNT
SU9OX1NUQUNLX0lOVE8KKyN1bmRlZiBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVAorI3VuZGVmIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYKKwogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmlu
ZGV4IGE5ZTExOGY1YWUwYzI4MDdkMzA2ZWJlNzFkMmE4N2NlMTJhOTcyMGMuLjBiZWQwZmY3OGUw
OGM2MTFhMWM1NGY4NDVhNjhhZDJmMGUzM2U5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDgsOCArNDgsNiBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogY2xhc3MgTExJbnRHZW5lcmF0b3IgOiBwdWJs
aWMgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPEdlbmVyYXRvclRyYWl0cz4gewogcHVibGljOgogICAg
IHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmlydHVhbFJlZ2lzdGVyOwotICAgIHVzaW5nIEV4cHJl
c3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKLSAgICB1c2luZyBTdGFjayA9
IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMTI4LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz47CiAKICAg
ICBzdHJ1Y3QgQ29udHJvbExvb3AgIHsKICAgICAgICAgUmVmPExhYmVsPiBtX2JvZHk7CkBAIC03
MywxNCArNzEsMTQgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVk
IHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGJvZHksIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRp
b24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSB0b3BMZXZlbChCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlv
bikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwg
c3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0
aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3ZlKGJvZHkpIH0pOworICAgICAgICAgICAgcmV0dXJu
IENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiks
IENvbnRyb2xUb3BMZXZlbCB7IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRy
b2xUeXBlIHRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tT
aXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJv
bFR5cGUgbG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwg
UmVmPExhYmVsPiYmIGJvZHksIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSwg
V1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sVG9wTGV2ZWwgeyB9KTsKKyAgICAgICAgICAg
IHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92
ZShib2R5KSB9KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBibG9j
ayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmUHRyPExh
YmVsPiYmIGNvbnRpbnVhdGlvbikKQEAgLTkzLDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1v
dmUoYWx0ZXJuYXRlKSB9KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBib29sIGlzSWYo
Y29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q29udHJvbElmPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVs
KGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPENvbnRyb2xUb3BMZXZlbD4oY29udHJvbCk7IH0KKworICAgICAgICB1bnNpZ25lZCBzdGFj
a1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorICAgICAgICBCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQorCiAgICAgICAg
IFJlZlB0cjxMYWJlbD4gdGFyZ2V0TGFiZWxGb3JCcmFuY2goKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oKnRoaXMp
KQpAQCAtMTAwLDE0ICsxMDQsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG1fY29u
dGludWF0aW9uOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgdGFyZ2V0QXJpdHkoKSBj
b25zdAorICAgICAgICBTaWduYXR1cmVBcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRy
b2xMb29wPigqdGhpcykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7CiAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVybkNvdW50
KCk7CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrU2l6ZTsgfQorICAgICAgICBUeXBlIGJyYW5jaFRhcmdldFR5cGUodW5zaWdu
ZWQgaSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBicmFuY2hUYXJn
ZXRBcml0eSgpKTsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRy
b2xMb29wPigqdGhpcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1
bWVudChpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShpKTsK
KyAgICAgICAgfQogCiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIG1fc2lnbmF0dXJlOwogICAgICAg
ICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKQEAgLTEyNiwxNCArMTM2LDE1IEBAIHB1YmxpYzoKIAog
ICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKICAgICB1c2luZyBQYXJ0aWFsUmVzdWx0ID0g
RXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsKLSAgICB1c2luZyBSZXN1bHRMaXN0ID0gRXhwcmVz
c2lvbkxpc3Q7CiAgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKIAogICAgIHVzaW5nIENvbnRyb2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2VyPExMSW50R2Vu
ZXJhdG9yPjo6Q29udHJvbEVudHJ5OworICAgIHVzaW5nIENvbnRyb2xTdGFjayA9IEZ1bmN0aW9u
UGFyc2VyPExMSW50R2VuZXJhdG9yPjo6Q29udHJvbFN0YWNrOworICAgIHVzaW5nIFJlc3VsdExp
c3QgPSBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj46OlJlc3VsdExpc3Q7CisgICAgdXNp
bmcgU3RhY2sgPSBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj46OlN0YWNrOworICAgIHVz
aW5nIFR5cGVkRXhwcmVzc2lvbiA9IEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPjo6VHlw
ZWRFeHByZXNzaW9uOwogCi0gICAgTExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNp
Z25hdHVyZSYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBmaW5h
bGl6ZSgpOworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJl
dHVybiB7IH07IH07CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZF
Ul9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4u
IGFyZ3MpIGNvbnN0CkBAIC0xNDIsNiArMTUzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBj
b21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAgIH0KIAorICAgIExMSW50
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IGZpbmFsaXplKCk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeHByZXNzaW9uTGlz
dEEsIHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0Qj4KICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJs
b2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0QSYgZGVzdGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9u
TGlzdEImIHZhbHVlcykKICAgICB7CkBAIC0xNjQsMTAgKzE3OSw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IC0tbV9zdGFja1NpemU7IH0KIAotICAgIHN0
YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIgeyB9OyB9OwotICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkgeyByZXR1cm4gU3RhY2soKTsg
fQotICAgIGJvb2wgaXNDb250cm9sVHlwZUlmKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xJZj4oY29udHJvbCk7IH0KLQog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBT
aWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2Nh
bChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwg
aW50NjRfdCk7CkBAIC0yMjAsMTUgKzIzMSwxNSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUpOwogCiAgICAg
Ly8gQ2FsbHMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVp
bnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25M
aXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRD
YWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlz
dCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5y
ZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpOwogCiAgICAg
dm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+KiBwYXJzZXIpIHsg
bV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRy
b2xFbnRyeT4mLCBjb25zdCBTdGFjayopIHsgfQorICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9s
U3RhY2smLCBjb25zdCBTdGFjayopIHsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBHZW5lcmlj
TGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjsKQEAgLTIzNiw4ICsyNDcsOCBAQCBwcml2YXRl
OgogICAgIHN0cnVjdCBMTEludENhbGxJbmZvcm1hdGlvbiB7CiAgICAgICAgIHVuc2lnbmVkIHN0
YWNrT2Zmc2V0OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQXJndW1lbnRzOwotICAg
ICAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHM7Ci0gICAgICAgIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoRXhwcmVzc2lvbkxpc3QmKT4gY29tbWl0UmVzdWx0czsKKyAgICAgICAgUmVzdWx0TGlz
dCBhcmd1bWVudHM7CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzdWx0TGlzdCYp
PiBjb21taXRSZXN1bHRzOwogICAgIH07CiAKICAgICBMTEludENhbGxJbmZvcm1hdGlvbiBjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJik7CkBAIC0yNzksOCArMjkwLDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERyb3BLZWVwQ291bnQoY29uc3QgQ29udHJvbFR5cGUm
IHRhcmdldCwgdW5zaWduZWQmIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCYgZHJvcCwgdW5zaWduZWQm
IGtlZXApCiAgICAgewogICAgICAgICBzdGFydE9mZnNldCA9IHRhcmdldC5zdGFja1NpemUoKSAr
IDE7Ci0gICAgICAgIGtlZXAgPSB0YXJnZXQudGFyZ2V0QXJpdHkoKTsKLSAgICAgICAgZHJvcCA9
IG1fc3RhY2tTaXplIC0gdGFyZ2V0LnN0YWNrU2l6ZSgpIC0gdGFyZ2V0LnRhcmdldEFyaXR5KCk7
CisgICAgICAgIGtlZXAgPSB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKTsKKyAgICAgICAgZHJv
cCA9IG1fc3RhY2tTaXplIC0gdGFyZ2V0LnN0YWNrU2l6ZSgpIC0gdGFyZ2V0LmJyYW5jaFRhcmdl
dEFyaXR5KCk7CiAgICAgfQogCiAgICAgdm9pZCBkcm9wS2VlcChTdGFjayYgdmFsdWVzLCBjb25z
dCBDb250cm9sVHlwZSYgdGFyZ2V0LCBib29sIGRyb3BWYWx1ZXMpCkBAIC0zMDcsMTIgKzMxOCwx
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZvciAoaW50IGkg
PSBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICBhdXRv
IGV4cHJlc3Npb24gPSBleHByZXNzaW9uU3RhY2tbZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGld
OworICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBleHByZXNzaW9uU3Rh
Y2tbZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGldOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHNsb3QgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX3N0YWNrU2l6ZSAtIGkpOwotICAg
ICAgICAgICAgaWYgKGV4cHJlc3Npb24gIT0gc2xvdCkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChleHByZXNzaW9uLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9uLmlzQXJndW1lbnQoKSB8fCBl
eHByZXNzaW9uLnRvTG9jYWwoKSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgICAgICAg
ICAgaWYgKGV4cHJlc3Npb24udmFsdWUoKSAhPSBzbG90KSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGV4cHJlc3Npb24udmFsdWUoKS5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgp
LmlzQXJndW1lbnQoKSB8fCBleHByZXNzaW9uLnZhbHVlKCkudG9Mb2NhbCgpIDwgbV9jb2RlQmxv
Y2stPm1fbnVtVmFycyk7CiAgICAgICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90
LCBleHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbZXhwcmVzc2lv
blN0YWNrLnNpemUoKSAtIGldID0gc2xvdDsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uU3Rh
Y2tbZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGldID0gVHlwZWRFeHByZXNzaW9uIHsgZXhwcmVz
c2lvbi50eXBlKCksIHNsb3QgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTMzNiw3ICszNDcsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8TGFiZWwqLCBWZWN0b3I8U3dp
dGNoRW50cnk+PiBtX3N3aXRjaGVzOwogICAgIEV4cHJlc3Npb25UeXBlIG1fanNOdWxsQ29uc3Rh
bnQ7CiAgICAgRXhwcmVzc2lvblR5cGUgbV96ZXJvQ29uc3RhbnQ7Ci0gICAgRXhwcmVzc2lvbkxp
c3QgbV91bml0aWFsaXplZExvY2FsczsKKyAgICBSZXN1bHRMaXN0IG1fdW5pdGlhbGl6ZWRMb2Nh
bHM7CiAgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lzdGVyLCBXVEY6Oklu
dEhhc2g8RW5jb2RlZEpTVmFsdWU+LCBDb25zdGFudE1hcEhhc2hUcmFpdHM+IG1fY29uc3RhbnRN
YXA7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9yZXN1bHRzOwogICAgIHVuc2ln
bmVkIG1fc3RhY2tTaXplIHsgMCB9OwpAQCAtMzQ0LDE2ICszNTUsMTYgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX3RvcExldmVsU3RhY2tTaXplOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29k
ZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmlu
Zz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwg
c2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiB7Ci0gICAg
TExJbnRHZW5lcmF0b3IgbGxpbnRHZW5lcmF0b3IoaW5mbywgZnVuY3Rpb25JbmRleCwgdGhyb3dX
YXNtRXhjZXB0aW9uLCBzaWduYXR1cmUpOworICAgIExMSW50R2VuZXJhdG9yIGxsaW50R2VuZXJh
dG9yKGluZm8sIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8
TExJbnRHZW5lcmF0b3I+IHBhcnNlcihsbGludEdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVu
Y3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKICAgICByZXR1cm4gbGxpbnRHZW5lcmF0b3IuZmluYWxp
emUoKTsKIH0KIAotTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKQorTExJbnRHZW5lcmF0b3I6
OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JC
YXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAg
ICwgbV9pbmZvKGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAg
LTM2Miw5ICszNzMsNiBAQCBMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSQogICAgIG1fc3RhY2tTaXpl
ID0gbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7CiAgICAgbV9tYXhTdGFja1NpemUg
PSBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsKIAotICAgIGlmICh0aHJvd1dhc21F
eGNlcHRpb24pCi0gICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0
aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7Ci0KICAgICBXYXNtRW50ZXI6OmVtaXQodGhpcyk7CiB9
CiAKQEAgLTQ1Nyw4ICs0NjUsOCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgICAgICBt
X21heFN0YWNrU2l6ZSA9IG1fc3RhY2tTaXplOwogCiAKLSAgICBFeHByZXNzaW9uTGlzdCBhcmd1
bWVudHMoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgRXhwcmVzc2lvbkxpc3QgdGVt
cG9yYXJ5UmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291bnQoKSk7CisgICAgUmVzdWx0TGlzdCBh
cmd1bWVudHMoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CisgICAgUmVzdWx0TGlzdCB0ZW1w
b3JhcnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKIAogICAgIGNvbnN0IHVuc2ln
bmVkIHN0YWNrT2Zmc2V0ID0gbV9zdGFja1NpemU7CiAgICAgY29uc3QgdW5zaWduZWQgYmFzZSA9
IHN0YWNrT2Zmc2V0IC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CkBAIC01MjIs
NyArNTMwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVy
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKIAogICAgIG1fc3RhY2tTaXplID0g
aW5pdGlhbFN0YWNrU2l6ZTsKIAotICAgIGF1dG8gY29tbWl0UmVzdWx0cyA9IFt0aGlzLCB0ZW1w
b3JhcnlSZXN1bHRzID0gV1RGTW92ZSh0ZW1wb3JhcnlSZXN1bHRzKV0oRXhwcmVzc2lvbkxpc3Qm
IHJlc3VsdHMpIHsKKyAgICBhdXRvIGNvbW1pdFJlc3VsdHMgPSBbdGhpcywgdGVtcG9yYXJ5UmVz
dWx0cyA9IFdURk1vdmUodGVtcG9yYXJ5UmVzdWx0cyldKFJlc3VsdExpc3QmIHJlc3VsdHMpIHsK
ICAgICAgICAgZm9yIChhdXRvIHRlbXBvcmFyeVJlc3VsdCA6IHRlbXBvcmFyeVJlc3VsdHMpIHsK
ICAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IHB1c2goKTsKICAgICAgICAgICAg
IFdhc21Nb3Y6OmVtaXQodGhpcywgcmVzdWx0LCB0ZW1wb3JhcnlSZXN1bHQpOwpAQCAtNjI5LDE2
ICs2MzcsMTUgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiBhdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgbV9jb2RlQmxvY2stPm1fbnVtVmFycyArPSBjb3VudDsKLSAgICB3aGlsZSAoY291bnQtLSkg
ewotICAgICAgICBhdXRvIGxvY2FsID0gcHVzaCgpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICAgICAgY2FzZSBUeXBlOjpBbnlyZWY6Ci0gICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoK
LSAgICAgICAgICAgIG1fdW5pdGlhbGl6ZWRMb2NhbHMuYXBwZW5kKGxvY2FsKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGU6OkFueXJlZjoKKyAgICBjYXNl
IFR5cGU6OkZ1bmNyZWY6CisgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgbV91
bml0aWFsaXplZExvY2Fscy5hcHBlbmQocHVzaCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgbV9zdGFja1NpemUgKz0gY291bnQ7CisgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICByZXR1cm4geyB9OwogfQpAQCAtNjkyLDExICs2OTksMTEgQEAgYXV0byBMTEludEdl
bmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAt
PiBQYXJ0aWFsUmUKICAgICAvLyBJZiB0aGlzIGxvY2FsIGlzIGN1cnJlbnRseSBvbiB0aGUgc3Rh
Y2sgd2UgbmVlZCB0byBtYXRlcmlhbGl6ZSBpdCwgb3RoZXJ3aXNlIGl0J2xsIHNlZSB0aGUgbmV3
IHZhbHVlIGluc3RlYWQgb2YgdGhlIG9sZCBvbmUKICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNr
ID0gbV9wYXJzZXItPmV4cHJlc3Npb25TdGFjaygpOwogICAgIGZvciAoaW50IGkgPSBleHByZXNz
aW9uU3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGF1dG8gZXhwcmVzc2lvbiA9
IGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaV07Ci0gICAgICAgIGlm
IChleHByZXNzaW9uID09IHRhcmdldCkgeworICAgICAgICBUeXBlZEV4cHJlc3Npb24gZXhwcmVz
c2lvbiA9IGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaV07CisgICAg
ICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgPT0gdGFyZ2V0KSB7CiAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2xvdCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fc3RhY2tTaXplIC0g
aSk7CiAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOwot
ICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpXSA9
IHNsb3Q7CisgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbZXhwcmVzc2lvblN0YWNrLnNpemUo
KSAtIGldID0gVHlwZWRFeHByZXNzaW9uIHsgZXhwcmVzc2lvbi50eXBlKCksIHNsb3QgfTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNzI0LDcgKzczMSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6
OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRp
YWxSCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywgU3RhY2smIG5l
d1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBuZXdT
dGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRT
dGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgbWF0ZXJpYWxp
emVDb25zdGFudHNBbmRMb2NhbHMobmV3U3RhY2spOwogCiAgICAgUmVmPExhYmVsPiBib2R5ID0g
bmV3RW1pdHRlZExhYmVsKCk7CkBAIC03NDMsNyArNzUwLDcgQEAgYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ28KICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250cm9sSW5kZXgg
PCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRleCkgewogICAg
ICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2Nv
bnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7Ci0gICAgICAgIGZvciAoYXV0byYg
ZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Np
b24gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAgICAgIG9zckVudHJ5RGF0
YS5hcHBlbmQoZXhwcmVzc2lvbik7CiAgICAgfQogCkBAIC03NjIsNyArNzY5LDcgQEAgYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKSAtPiBD
b250cm9sVHlwZQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2Nr
LCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBuZXdTdGFjayA9IHNw
bGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhzaWdu
YXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgbmV3QmxvY2sgPSBDb250cm9s
VHlwZTo6YmxvY2soc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgbmV3TGFiZWwoKSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KQEAgLTc3NCw3ICs3ODEsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRJ
ZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgUwog
CiAgICAgV2FzbUpmYWxzZTo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIGFsdGVybmF0ZS0+YmluZCh0
aGlzKSk7CiAKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdT
dGFjayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFj
ayk7CiAgICAgcmVzdWx0ID0gQ29udHJvbFR5cGU6OmlmXyhzaWduYXR1cmUsIG1fc3RhY2tTaXpl
LCBXVEZNb3ZlKGFsdGVybmF0ZSksIFdURk1vdmUoY29udGludWF0aW9uKSk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KQEAgLTg3NywxMCArODg0LDYgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6ZW5kQmxv
Y2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGEKIAog
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVu
dHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBib29sIHVucmVhY2hhYmxlKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0jaWYgQVNTRVJUX0RJU0FCTEVECi0gICAgVU5VU0VEX1BBUkFNKGV4
cHJlc3Npb25TdGFjayk7Ci0jZW5kaWYKLQogICAgIENvbnRyb2xUeXBlJiBkYXRhID0gZW50cnku
Y29udHJvbERhdGE7CiAKICAgICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNr
U2l6ZSA9PSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQo
KSk7CkBAIC04ODksMTAgKzg5MiwxMSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9zaWduYXR1cmUtPnJldHVybkNvdW50KCk7
ICsraSkgewogICAgICAgICBhdXRvIHRtcCA9IHB1c2goKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgICAgIEFTU0VSVCh1bnJlYWNoYWJsZSB8fCB0bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ld
KTsKLSNlbmRpZgotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQo
dG1wKTsKKyAgICAgICAgQVNTRVJUKHVucmVhY2hhYmxlIHx8IHRtcCA9PSBleHByZXNzaW9uU3Rh
Y2tbaV0udmFsdWUoKSk7CisgICAgICAgIGlmICh1bnJlYWNoYWJsZSkKKyAgICAgICAgICAgIGVu
dHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5UeXBlKGkpLCB0bXApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsK
ICAgICB9CiAKICAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gd2FzbV9qbXAgJiYgZGF0YS5tX2Nv
bnRpbnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBzKCkuc2l6ZSgpID09IDEgJiYgZGF0YS5tX2NvbnRp
bnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBzKClbMF0gPT0gc3RhdGljX2Nhc3Q8aW50PihtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSkpIHsKQEAgLTkyMiw3ICs5MjYsNyBAQCBhdXRvIExMSW50R2Vu
ZXJhdG9yOjplbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFT
U0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBMTElu
dENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVy
ZSk7CkBAIC05MzYsNyArOTQwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICByZXR1
cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWdu
ZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNz
aW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAppbmRleCBlZDUwNzhiZWM5YWIz
NDM3NDg5NzJmNDc4MWVmOTkwNDE3Mzc5Y2ZmLi44OWNkYzcxMGYxOGEyOTUyMDRiNDdiMDE3MjI0
MDBlOTU1NGY0NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TExJbnRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuaApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29k
ZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiA9
IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IGJjZWViMjg2YmEzY2IzMTk3
ZWJmYjgwYjRlNWVmNTE2ZmFiNGQ1OWEuLjgyYWE3NTc1NGY3ZjFlZWRhZjM0ZWNjMjc2ZWNhYThh
ZGYxYTgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dFBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4u
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlRHVtcGVyLmgiCiAjaW5jbHVkZSAiQ2FsbGVlQml0cy5oIgorI2luY2x1ZGUg
IkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNDQsNiArNDUsMjEgQEAgbmFtZXNw
YWNlIFdhc21MTEludFBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiB9CiAKK0xMSW50UGxhbjo6TExJbnRQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rv
cjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spKQoreworICAgIGlmIChwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwg
bV9zb3VyY2Uuc2l6ZSgpKSkKKyAgICAgICAgcHJlcGFyZSgpOworfQorCitMTEludFBsYW46OkxM
SW50UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIGNv
bnN0IFJlZjxMTEludENhbGxlZT4qIGNhbGxlZXMsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAg
ICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgQXN5bmNXb3JrOjpGdWxsQ29tcGlsZSwg
V1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fY2FsbGVlcyhjYWxsZWVzKQoreworICAgIHByZXBhcmUo
KTsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5z
aXplKCk7Cit9CisKIGJvb2wgTExJbnRQbGFuOjpwcmVwYXJlSW1wbCgpCiB7CiAgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwpAQCAtNjIs
MTAgKzc4LDkgQEAgdm9pZCBMTEludFBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eFNwYWNlID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7CiAg
ICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
PnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
ID09IHNpZ25hdHVyZUluZGV4KTsKLSAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlv
biwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVCeXRl
Y29kZShmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVy
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgZnVuY3Rpb25JbmRleCwgbV90aHJvd1dhc21F
eGNlcHRpb24pOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9j
az4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQnl0ZWNv
ZGUoZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKQEAgLTc4LDQxICs5MywxNSBAQCB2b2lkIExMSW50UGxhbjo6Y29t
cGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgfQogCiAgICAgbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBp
bGVSZXN1bHQpOwotCi0gICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMo
ZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9u
cygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgIEVtYmVkZXJUb1dhc21GdW5j
dGlvbiBlbnRyeTsKLSAgICAgICAgZW50cnkuaml0ID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+
KCk7Ci0gICAgICAgIGVudHJ5LmZ1bmN0aW9uID0gbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoKmVu
dHJ5LmppdCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KTsK
LSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRl
eCwgV1RGTW92ZShlbnRyeSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOwotICAgIH0KIH0KIAogdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29t
cGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBmb3IgKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7Ci0gICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5j
dGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7Ci0KLSAgICAgICAgaWYgKGF1dG8gaXQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbnMuZmluZChmdW5jdGlvbkluZGV4KTsgaXQgIT0gbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKml0
LT52YWx1ZS5qaXQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgICAg
ICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewotICAgICAg
ICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJs
ZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJl
cihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaXQtPnZhbHVlLmZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAotICAgICAgICAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkVtYmVkZGVyLT5XZWJB
c3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKLSAgICAgICAgICAgICAgICBudWxscHRyKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHVuc2lnbmVkIGZ1bmN0aW9uQ291bnQgPSBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5zaXplKCk7Ci0gICAgaWYgKGZ1bmN0aW9uQ291bnQpIHsKKyAgICBpZiAoIW1f
Y2FsbGVlcyAmJiBmdW5jdGlvbkNvdW50KSB7CiAgICAgICAgIC8vIExMSW50IGVudHJ5cG9pbnQg
dGh1bmtzIGdlbmVyYXRpb24KICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKLSAgICAgICAgbV9j
YWxsZWVzLnJlc2l6ZShmdW5jdGlvbkNvdW50KTsKKyAgICAgICAgbV9jYWxsZWVzVmVjdG9yLnJl
c2l6ZShmdW5jdGlvbkNvdW50KTsKICAgICAgICAgVmVjdG9yPENDYWxsSGVscGVyczo6TGFiZWw+
IGVudHJ5cG9pbnRzKGZ1bmN0aW9uQ291bnQpOwogICAgICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJz
OjpKdW1wPiBqdW1wcyhmdW5jdGlvbkNvdW50KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMTIxLDcgKzExMCw3IEBAIHZvaWQgTExJ
bnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIpCiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21C
eXRlY29kZXMoKSkpCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVEdW1wZXI6OmR1bXBCbG9jayht
X3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpXS5nZXQoKSwgbV9tb2R1bGVJbmZvcm1hdGlvbiwgV1RG
OjpkYXRhRmlsZSgpKTsKIAotICAgICAgICAgICAgbV9jYWxsZWVzW2ldID0gV2FzbTo6TExJbnRD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ldKSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSkpOworICAgICAgICAgICAgbV9jYWxsZWVzVmVjdG9yW2ldID0gTExJbnRD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ldKSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSkpOwogICAgICAgICAgICAgZW50cnlwb2ludHNbaV0gPSBqaXQubGFiZWwo
KTsKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNh
bGxlZVNsb3QoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihD
UFVSZWdpc3RlcikpOwpAQCAtMTMwLDcgKzExOSw3IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRDb21w
bGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAjZWxzZQogI2Vy
cm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZS4KICNlbmRpZgotICAgICAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihDYWxsZWVCaXRzOjpib3hXYXNtKG1f
Y2FsbGVlc1tpXS5wdHIoKSkpLCBjYWxsZWVTbG90KTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoQ2FsbGVlQml0czo6Ym94V2FzbShtX2NhbGxl
ZXNWZWN0b3JbaV0ucHRyKCkpKSwgY2FsbGVlU2xvdCk7CiAgICAgICAgICAgICBqdW1wc1tpXSA9
IGppdC5qdW1wKCk7CiAgICAgICAgIH0KIApAQCAtMTQxLDE4ICsxMzAsNTEgQEAgdm9pZCBMTElu
dFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
cikKICAgICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlv
bkNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIG1fY2FsbGVlc1tpXS0+c2V0RW50cnlwb2ludChs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50c1tpXSkpOwor
ICAgICAgICAgICAgbV9jYWxsZWVzVmVjdG9yW2ldLT5zZXRFbnRyeXBvaW50KGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnRzW2ldKSk7CiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbms8SklUVGh1bmtQdHJUYWc+KGp1bXBzW2ldLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4oTExJbnQ6Ondhc21GdW5jdGlvbkVudHJ5VGh1bmsoKS5jb2Rl
KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZW50cnlUaHVua3MgPSBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXYXNtIExMSW50IGVudHJ5IHRodW5r
cyIpOworICAgICAgICBtX2NhbGxlZXMgPSBtX2NhbGxlZXNWZWN0b3IuZGF0YSgpOworICAgIH0K
KworICAgIGlmIChtX2FzeW5jV29yayA9PSBBc3luY1dvcms6OlZhbGlkYXRpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9u
SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyBmdW5jdGlvbklu
ZGV4KyspIHsKKyAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMo
ZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9u
cygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CisgICAgICAgICAgICBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gZnVuY3Rpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIo
aml0LCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhd
LCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOworCisg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKKyAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwgbWFr
ZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IGluIGZ1bmN0aW9uIGVudHJ5cG9pbnQg
YXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAg
ICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywg
IkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgs
IHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICBu
dWxscHRyKTsKKworICAgICAgICAgICAgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY2Fs
bGVlID0gRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+
ZW50cnlwb2ludCkpOworICAgICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHJlcGF0Y2hQ
b2ludGVyIC0ganVzdCBwYXNzIGluIHRoZSBjYWxsZWUgZGlyZWN0bHkKKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAg
ICAgIGlmIChmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uKQorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworCisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fZW1iZWRkZXJDYWxsZWVzLmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGNh
bGxlZSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlu
a2VkKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9u
LT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2
ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4g
VGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogaW1wb3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0
ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUg
cmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4KKyAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCiAgICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmNvZGUoKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGVBZGRyZXNzID0gbV9jYWxsZWVzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlIC0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpXS0+ZW50cnlwb2ludCgp
OwpAQCAtMTYxLDIxICsxODMsMjUgQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICB9CiB9CiAKLXZvaWQgTExJ
bnRQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYWxsZWVJbml0aWFsaXplciYgY2FsbGJh
Y2spCit2b2lkIExMSW50UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0g
ICAgQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9u
SW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
cy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIFJlZlB0cjxXYXNt
OjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8gaXQg
PSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZmluZChpbnRlcm5hbEZ1bmN0aW9u
SW5kZXgpOyBpdCAhPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZW5kKCkpIHsK
LSAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50
cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoaXQtPnZhbHVlLmZ1bmN0aW9uLT5lbnRyeXBv
aW50KSk7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb24pCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGl0
LT52YWx1ZS5mdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSksIFdURk1vdmUobV9jYWxsZWVzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDoKKyAgICAgICAg
Y29tcGlsZUZ1bmN0aW9ucyhlZmZvcnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXRl
OjpDb21waWxlZDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogfQogCitib29sIExMSW50UGxhbjo6ZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNp
Z25lZCwgY29uc3QgRnVuY3Rpb25EYXRhJikKK3sKKyAgICAvLyBWYWxpZGF0aW9uIGlzIGRvbmUg
aW5saW5lIGJ5IHRoZSBwYXJzZXIKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uaAppbmRleCA2YzkxZDI3YmYyMzljYzM2
Zjc4YzU3NGZkZDFkZmQzM2QwZjlhODdmLi40MmRlODEzM2I3MmZjNWZlNTE5OWMxOWY2ZTMyM2U5
ZTM3YjFjOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5o
CkBAIC0zNywxNCArMzcsMTYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvOwogbmFtZXNwYWNlIFdhc20g
ewogCiBjbGFzcyBMTEludENhbGxlZTsKK2NsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsK
KwordXNpbmcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlTWFwID0gSGFzaE1hcDx1aW50MzJfdCwg
UmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVp
bnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJf
dD4+OwogCiBjbGFzcyBMTEludFBsYW4gZmluYWwgOiBwdWJsaWMgRW50cnlQbGFuIHsKLXB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gRW50cnlQbGFuOwogCi0gICAgdXNpbmcgQmFzZTo6QmFzZTsK
LQotICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6ZXImKSBv
dmVycmlkZTsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBMTEludFBsYW4oQ29udGV4
dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAg
IExMSW50UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgY29uc3QgUmVmPExM
SW50Q2FsbGVlPiosIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+JiYgdGFrZUVudHJ5VGh1bmtzKCkKICAgICB7CkBAIC01
MiwyMCArNTQsMzcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5VGh1
bmtzKTsKICAgICB9CiAKKyAgICBWZWN0b3I8UmVmPExMSW50Q2FsbGVlPj4mJiB0YWtlQ2FsbGVl
cygpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmso
KSk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fY2FsbGVlc1ZlY3Rvcik7CisgICAgfQorCisg
ICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlTWFwJiYgdGFrZUVtYmVkZGVyQ2FsbGVlcygpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Cisg
ICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW1iZWRkZXJDYWxsZWVzKTsKKyAgICB9CisKKyAgICBi
b29sIGhhc1dvcmsoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3Rh
dGUgPCBTdGF0ZTo6Q29tcGlsZWQ7CisgICAgfQorCisgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9u
RWZmb3J0KSBvdmVycmlkZTsKKworICAgIGJvb2wgZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNp
Z25lZCwgY29uc3QgRnVuY3Rpb25EYXRhJikgb3ZlcnJpZGU7CisKIHByb3RlY3RlZDoKICAgICBi
b29sIHByZXBhcmVJbXBsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb21waWxlRnVuY3Rpb24odWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDb21wbGV0ZUNvbXBp
bGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAg
c3RydWN0IEVtYmVkZXJUb1dhc21GdW5jdGlvbiB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
Q2FsbEhlbHBlcnM+IGppdDsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGZ1bmN0aW9uOwotICAgIH07Ci0KICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7Ci0gICAgVmVjdG9yPFJlZjxM
TEludENhbGxlZT4+IG1fY2FsbGVlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBFbWJlZGVyVG9X
YXNtRnVuY3Rpb24sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9uczsKKyAgICBjb25zdCBSZWY8TExJbnRDYWxsZWU+KiBtX2NhbGxlZXMg
eyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlZjxMTEludENhbGxlZT4+IG1fY2FsbGVlc1ZlY3Rv
cjsKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVNYXAgbV9lbWJlZGRlckNhbGxlZXM7CiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IG1fZW50cnlUaHVu
a3M7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4
IDQ0YTI3NDMxOGIxZmZjNjZiN2E2MWMyOTQ3Nzk4NjBjNDZiMDU4MjYuLjNjODQzMmVjZGE2NmU2
ZjcyMjdiYmZiYzA3YjZjMjY5Y2VkZjZiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuY3BwCkBAIC0yOCwxNCArMjgsMjIgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50UGxh
bi5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21X
b3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Nb2R1bGU6
Ok1vZHVsZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCi0gICAg
OiBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pKQorTW9kdWxl
OjpNb2R1bGUoTExJbnRQbGFuJiBwbGFuKQorICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihwbGFu
LnRha2VNb2R1bGVJbmZvcm1hdGlvbigpKQorICAgICwgbV9sbGludENhbGxlZXMocGxhbi50YWtl
Q2FsbGVlcygpKQorICAgICwgbV9sbGludEVudHJ5VGh1bmtzKHBsYW4udGFrZUVudHJ5VGh1bmtz
KCkpCit7Cit9CisKK01vZHVsZTo6TW9kdWxlKEJCUVBsYW4mIHBsYW4pCisgICAgOiBtX21vZHVs
ZUluZm9ybWF0aW9uKHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCkpCiB7CiB9CiAKQEAgLTQ2
LDM2ICs1NCw1MCBAQCBXYXNtOjpTaWduYXR1cmVJbmRleCBNb2R1bGU6OnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdAogICAgIHJldHVybiBtX21vZHVs
ZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleFNwYWNlKTsKIH0KIAotc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtl
VmFsaWRhdGlvblJlc3VsdChFbnRyeVBsYW4mIHBsYW4pCit0ZW1wbGF0ZTx0eXBlbmFtZSBQbGFu
Pgorc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChQ
bGFuJiBwbGFuKQogewogICAgIEFTU0VSVCghcGxhbi5oYXNXb3JrKCkpOwogICAgIGlmIChwbGFu
LmZhaWxlZCgpKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxTdHJpbmc+KHBsYW4uZXJyb3JN
ZXNzYWdlKCkpOwotICAgIHJldHVybiBNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQoTW9kdWxlOjpj
cmVhdGUocGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSkpOworICAgIHJldHVybiBNb2R1bGU6
OlZhbGlkYXRpb25SZXN1bHQoTW9kdWxlOjpjcmVhdGUocGxhbikpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQbGFuVD4KIHN0YXRpYyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlv
bkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsK
ICAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXSAoUGxhbiYgcGxhbikgewogICAgICAgICBBU1NFUlQoIXBs
YW4uaGFzV29yaygpKTsKLSAgICAgICAgY2FsbGJhY2stPnJ1bihtYWtlVmFsaWRhdGlvblJlc3Vs
dChzdGF0aWNfY2FzdDxMTEludFBsYW4mPihwbGFuKSkpOworICAgICAgICBjYWxsYmFjay0+cnVu
KG1ha2VWYWxpZGF0aW9uUmVzdWx0KHN0YXRpY19jYXN0PFBsYW5UJj4ocGxhbikpKTsKICAgICB9
KTsKIH0KIAogTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKENv
bnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKIHsKLSAgICBSZWY8TExJ
bnRQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgV1RGTW92ZShz
b3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpLCBudWxs
cHRyLCBudWxscHRyKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKSB7CisgICAg
ICAgIFJlZjxMTEludFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0
LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5UGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpKTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uZ2V0
KCkpOworICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICByZXR1cm4g
bWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7CisgICAgfQorCisgICAgUmVmPEJCUVBs
YW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2Up
LCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgcGxh
bi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRhdGlvblJl
c3VsdChwbGFuLmdldCgpKTsKIH0KIAogdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoQ29udGV4
dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRh
dGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5UGxhbjo6VmFs
aWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSksIG51bGxw
dHIsIG51bGxwdHIpKTsKLSAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92
ZShwbGFuKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKSB7CisgICAgICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgV1RGTW92ZShz
b3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2s8TExJ
bnRQbGFuPihXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xp
c3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZjxQ
bGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNl
KSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrPEJCUVBsYW4+
KFdURk1vdmUoY2FsbGJhY2spKSkpOworICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVu
cXVldWUoV1RGTW92ZShwbGFuKSk7CisgICAgfQogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6
OmdldE9yQ3JlYXRlQ29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwg
Q3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21F
eGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRP
ckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUpCiB7CiAg
ICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKQEAgLTg2LDIyICsxMDgsMjUgQEAgUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpn
ZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIEMK
ICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBiYWNrIG9mZiByZXRyeWluZyBhdCBzb21l
IHBvaW50OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA2MDcKICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29kZUJsb2NrLT5jb21waWxhdGlvbkZpbmlz
aGVkKCkgJiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgY29kZUJsb2NrID0g
Q29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1h
dGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBl
ciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgIGNvbnN0IFJlZjxMTEludENhbGxlZT4q
IGxsaW50Q2FsbGVlcyA9IG51bGxwdHI7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJ
bnQoKSkKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlcyA9IG1fbGxpbnRDYWxsZWVzLmRhdGEoKTsK
KyAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwgY29u
c3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBsbGludENh
bGxlZXMpOwogICAgICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSld
ID0gY29kZUJsb2NrOwogICAgIH0KICAgICByZXR1cm4gY29kZUJsb2NrLnJlbGVhc2VOb25OdWxs
KCk7CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29u
dGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJl
ZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitSZWY8
Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1v
ZGUgbW9kZSkKIHsKLSAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNv
ZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRo
cm93V2FzbUV4Y2VwdGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JD
cmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSk7CiAgICAgY29kZUJsb2NrLT53YWl0VW50aWxG
aW5pc2hlZCgpOwogICAgIHJldHVybiBjb2RlQmxvY2s7CiB9CiAKLXZvaWQgTW9kdWxlOjpjb21w
aWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxvY2s6OkFz
eW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNy
ZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlv
bikKK3ZvaWQgTW9kdWxlOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9k
ZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiB7Ci0g
ICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4
dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2Nr
KGNvbnRleHQsIG1vZGUpOwogICAgIGNvZGVCbG9jay0+Y29tcGlsZUFzeW5jKGNvbnRleHQsIFdU
Rk1vdmUodGFzaykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgK
aW5kZXggNjUyZGRkMzdkYjhlNTc4OGQwNTg3NWQyYzJkZmM3ZmFkYzllNzM2NS4uMmRhZGI2YTli
YWY3MDNmMTlmOTAzNjhhNzU1ZDI1MTAxNWNkYTVmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuaApAQCAtMzcsOSArMzcsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgQkJRUGxhbjsKK2NsYXNzIExMSW50UGxhbjsKIHN0cnVj
dCBDb250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwotY2xhc3MgUGxhbjsKIAogdXNp
bmcgU2lnbmF0dXJlSW5kZXggPSB1aW50NjRfdDsKIApAQCAtNTIsMjYgKzUzLDM0IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZVN5bmMoQ29udGV4dCosIFZl
Y3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7CiAgICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhD
b250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlv
bkNhbGxiYWNrJiYpOwogCi0gICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShSZWY8TW9kdWxl
SW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCisgICAgc3RhdGljIFJlZjxNb2R1bGU+
IGNyZWF0ZShCQlFQbGFuJiBwbGFuKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTW9kdWxlKFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE1vZHVsZShwbGFuKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZjxNb2R1
bGU+IGNyZWF0ZShMTEludFBsYW4mIHBsYW4pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBNb2R1bGUocGxhbikpOwogICAgIH0KIAogICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7
IH0KIAotICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlNb2Rl
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICB2b2lk
IGNvbXBpbGVBc3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBp
bGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1v
ZGUpOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDb2RlQmxv
Y2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yKE1lbW9yeU1vZGUgbW9k
ZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQo
KTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9jayhD
b250ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4
dCosIE1lbW9yeU1vZGUpOwogCi0gICAgTW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7
CisgICAgTW9kdWxlKEJCUVBsYW4mKTsKKyAgICBNb2R1bGUoTExJbnRQbGFuJik7CiAgICAgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFJlZlB0cjxDb2Rl
QmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKKyAgICBWZWN0
b3I8UmVmPExMSW50Q2FsbGVlPj4gbV9sbGludENhbGxlZXM7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IG1fbGxpbnRFbnRyeVRodW5rczsKICAgICBMb2Nr
IG1fbG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAppbmRleCA2ZjRkZGNhYzdkZTI3ODJiODE2ZjZhZDk0MjI4ODRjYzQ4MDkyNDk0Li41ZDQ5YzNl
OTJhMDAzZWQyZTVlNDk0MmY5YzExOWQ0MDIyM2RjYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0xMjIsMTAgKzEyMiwxMSBAQCB2b2lkIE9NR1Bs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5z
ZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKICAgICAgICAgICAgICAgICBiYnFDYWxs
ZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3Vu
dDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKExMSW50Q2FsbGVlKiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhsbGludENhbGxlZS0+dGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0gICAg
ICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkp
OwotICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9jb21waWxh
dGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBp
bGVkOworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAg
ICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xs
aW50Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpOworICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGF1dG8mIGNhbGwg
OiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewpAQCAtMTYxLDEwICsxNjIsMTEgQEAg
dm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2FzbVRv
V2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoTExJbnRDYWxsZWUqIGxsaW50Q2Fs
bGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW2ldLmdldCgpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS0+cmVw
bGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMp
IHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9j
ay0+bV9sbGludENhbGxlZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKEpJVENhbGxl
ZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudCgpKQogICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21D
YWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBv
c3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAg
ICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENh
bGxlZS5vc3JFbnRyeUNhbGxlZSgpKQogICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMo
b3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFD
YWxsZWVzW2ldLmdldCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAK
aW5kZXggMWVkNmNmZmZhMGQ0NGQwMTMxYWJjN2JlMzcwY2EwMmNkNTQ2Y2ZlNy4uNWE1M2I5NTkw
ODM2Zjk0YmNhNGZkMTAzN2Y0NDZhMmMxZTM1Y2MyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcApAQCAtNDgsMTkgKzQ4LDExIEBAIG5hbWVzcGFjZSBXYXNtUGxhbklu
dGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLVBs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBD
b21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK1BsYW46
OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21w
bGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoaW5m
bykpCi0gICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVy
V3JhcHBlcikpCi0gICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24p
CiB7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQs
IFdURk1vdmUodGFzaykpKTsKIH0KLQotUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IFBs
YW4oY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0
cikKLXsKLX0KLQogUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVh
dGUoKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IDllYzY4ODY1
ODEzMzFiYWNjOWYwOGRkMjZmOWFhYmI0ZTliZDUzYmYuLjAxOTRkNTc0OThmMmFlYTc2M2VjYmQw
OWIwOTg0ZjBmNjFjNjE0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApA
QCAtNTAsNyArNTAsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQ29tcGxldGlvblRhc2sgPSBSZWZQ
dHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKIAogICAgIHN0YXRpYyBDb21wbGV0aW9uVGFz
ayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4o
W10oUGxhbiYpIHsgfSk7IH0KLSAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNt
RXhjZXB0aW9uKTsKICAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBD
b21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxk
IG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBl
LmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKQEAgLTg3LDkgKzg2LDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxldGlvblRhc2s+LCAxPiBt
X2NvbXBsZXRpb25UYXNrczsKIAotICAgIENyZWF0ZUVtYmVkZGVyV3JhcHBlciBtX2NyZWF0ZUVt
YmVkZGVyV3JhcHBlcjsKLSAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRp
b24geyBudWxscHRyIH07Ci0KICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTWVtb3J5
TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIExvY2sgbV9s
b2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRl
eCAxNmYzZGFjNzMzNzcyY2YxZThjNDE5ZjRjNmE0ZDE3ZTkxZjY5YmQyLi4yMTI1YTgwYjgzNGFh
NjdjZTg5ZDM3MjM3Mzg0NDU0ZmQyY2YwNjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNDA0LDcgKzQwNCw3IEBAIFdBU01fU0xPV19QQVRI
X0RFQ0woc2V0X2dsb2JhbF9yZWYpCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93
X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElu
c3RydWN0aW9uKiBwYywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25U
eXBlIGV4Y2VwdGlvblR5cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICBXQVNNX1JF
VFVSTl9UV08oV2FzbTo6VGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKShj
YWxsRnJhbWUsIGV4Y2VwdGlvblR5cGUsIGluc3RhbmNlKSwgMCk7CisgICAgV0FTTV9SRVRVUk5f
VFdPKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVHlwZSwg
aW5zdGFuY2UpLCAwKTsKIH0KIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19w
YXRoX3dhc21fcG9wY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCB1aW50MzJfdCB4KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAppbmRleCBmMmIzZWUxNWZkOWFm
MjA1MmU0ZjFiM2NhYTRiN2Y0Y2UyODAyN2E0Li5mOTM0ZjFhMTg2MGFjN2RhMjFjYTZkNWI5YWRj
MzQxODZiZTJmODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNw
cApAQCAtNTYsMTAgKzU2LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QKICAgICBqaXQuZmFy
SnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAg
ICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgogCi0gICAg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9u
KCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhj
ZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQp
OwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KHRocm93V2FzbUV4Y2VwdGlvbikpOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRo
cm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKIH0KIApAQCAtMTEzLDE5ICsxMTEsNiBAQCBUaHVu
a3MmIFRodW5rczo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAotdm9pZCBU
aHVua3M6OnNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAv
LyBUaGUgdGh1bmtzIGFyZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3Jl
IGNoYW5naW5nIHRoZSB0aHJvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBv
ZiBXZWJBc3NlbWJseS4KLSAgICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24g
fHwgbV90aHJvd1dhc21FeGNlcHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBtX3Ro
cm93V2FzbUV4Y2VwdGlvbiA9IHRocm93V2FzbUV4Y2VwdGlvbjsKLX0KLQotVGhyb3dXYXNtRXhj
ZXB0aW9uIFRodW5rczo6dGhyb3dXYXNtRXhjZXB0aW9uKCkKLXsKLSAgICByZXR1cm4gbV90aHJv
d1dhc21FeGNlcHRpb247Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1
bmtzLmgKaW5kZXggODFjYzY2OTUwZmZkOThhNDhiN2RkYjcwNGFhYWU2YWU0OGQ1OTI1OS4uYTI4
YWJhOTZjZjAzZDQxZDViNDMwZjM4Mzg0NmI2NWU5NTk3ZDYzYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtNDUsOSArNDUsNiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHN0YXRpYyBUaHVua3MmIHNpbmdsZXRvbigpOwog
Ci0gICAgdm9pZCBzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAg
ICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKCk7Ci0KICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3R1Yihjb25zdCBBYnN0cmFj
dExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvcik7CkBAIC01Niw3ICs1Myw2
IEBAIHByaXZhdGU6CiAgICAgVGh1bmtzKCkgPSBkZWZhdWx0OwogCiAgICAgSGFzaE1hcDxUaHVu
a0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gbV9zdHVi
czsKLSAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRy
IH07CiAgICAgTG9jayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVZhbGlkYXRlLmNwcAppbmRleCA3MjgzMmYyOTY4ZmZiNDM4NTQzN2U0NDQzNzQxZDlhODU3
ZmQyMmRjLi5kMTNmMGEyNzU5NmRlNzgzZDg1YTMwYTYyZTRjMjE0YTM5MjQ0OGYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAgLTQ2LDYgKzQ2LDE5
IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wg
aXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwo
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorCisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUo
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrVHlwZTsgfQorICAgICAgICBCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQorCisgICAgICAgIHVuc2ln
bmVkIGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpMb29wID8gc2lnbmF0dXJlKCktPmFyZ3VtZW50Q291bnQoKSA6IHNpZ25hdHVyZSgp
LT5yZXR1cm5Db3VudCgpOyB9CisgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25l
ZCBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdl
dEFyaXR5KCkpOworICAgICAgICAgICAgcmV0dXJuIGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
TG9vcCA/IHNpZ25hdHVyZSgpLT5hcmd1bWVudChpKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5UeXBl
KGkpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2tUeXBlKCkpIHsKQEAgLTY2
LDM0ICs3OSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBvdXQucHJpbnQoc2lnKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrVHlwZTsgfQotICAgICAgICBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3NpZ25hdHVyZTsgfQotCi0gICAgICAgIHVuc2lnbmVkIGJyYW5jaFRhcmdldEFyaXR5
KCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wID8gc2lnbmF0
dXJlKCktPmFyZ3VtZW50Q291bnQoKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyB9Ci0g
ICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCA/IHNpZ25hdHVyZSgpLT5h
cmd1bWVudChpKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOwotICAgICAgICB9Ci0KICAg
ICBwcml2YXRlOgogICAgICAgICBCbG9ja1R5cGUgbV9ibG9ja1R5cGU7CiAgICAgICAgIEJsb2Nr
U2lnbmF0dXJlIG1fc2lnbmF0dXJlOwogICAgIH07CiAKLSAgICB0eXBlZGVmIFN0cmluZyBFcnJv
clR5cGU7Ci0gICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3Vs
dDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUmVzdWx0OwotICAgIHVz
aW5nIEV4cHJlc3Npb25UeXBlID0gVHlwZTsKLSAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZl
Y3RvcjxFeHByZXNzaW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlz
dDsKLSAgICB0eXBlZGVmIENvbnRyb2xEYXRhIENvbnRyb2xUeXBlOwotICAgIHR5cGVkZWYgRXhw
cmVzc2lvbkxpc3QgUmVzdWx0TGlzdDsKLSAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPFZhbGlk
YXRlPjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKKyAgICBlbnVtIEV4cHJlc3Npb25UeXBl
IHsgRW1wdHlFeHByZXNzaW9uIH07CisKKyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7Cisg
ICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1
c2luZyBSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+OworICAgIHVzaW5nIENvbnRy
b2xUeXBlID0gQ29udHJvbERhdGE7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25U
eXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZvaWQ7IH0KLSAgICBTdGFjayBjcmVhdGVT
dGFjaygpIHsgcmV0dXJuIFN0YWNrKCk7IH0KLSAgICBib29sIGlzQ29udHJvbFR5cGVJZihjb25z
dCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6OklmOyB9CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8
VmFsaWRhdGU+OjpDb250cm9sRW50cnk7CisgICAgdXNpbmcgQ29udHJvbFN0YWNrID0gRnVuY3Rp
b25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sU3RhY2s7CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9
IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBTdGFjayA9
IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6U3RhY2s7CisKKyAgICBzdGF0aWMgRXhwcmVzc2lv
blR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gRW1wdHlFeHByZXNzaW9uOyB9OwogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0
ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoY29uc3QgQXJncyYuLi4gYXJncykgY29u
c3QKQEAgLTExMywxOCArMTE2LDE4IEBAIHB1YmxpYzoKIAogICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwotICAgIEV4cHJlc3Npb25U
eXBlIGFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QpIHsgcmV0dXJuIHR5cGU7IH0KKyAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCkgeyByZXR1cm4gRW1w
dHlFeHByZXNzaW9uOyB9CiAKICAgICAvLyBSZWZlcmVuY2VzCi0gICAgUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUmIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVs
bChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8vIFRhYmxlcwotICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRU
YWJsZVNldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYg
dmFsdWUpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWdu
ZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlU2V0KHVuc2lnbmVkLCBFeHByZXNzaW9u
VHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVGFibGVTaXplKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
LSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhw
cmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBkZWx0YSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5z
aWduZWQsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHBy
ZXNzaW9uVHlwZSYgY291bnQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFi
bGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0
YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lv
blR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgY291bnQpOwogICAgIC8vIExvY2FscwogICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKQEAgLTE2NywxNDIgKzE3MCw4
MSBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVuc2ln
bmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwg
Y29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwogCi0gICAg
Ym9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1fbW9kdWxlLm1lbW9yeTsgfQotCi0g
ICAgVmFsaWRhdGUoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZSkKLSAgICAgICAgOiBt
X21vZHVsZShtb2R1bGUpCisgICAgVmFsaWRhdGUoKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lk
IGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopOworICAgIHZv
aWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayopOwogICAgIHZvaWQgc2V0
UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiopIHsgfQogICAgIHZvaWQgZGlkRmluaXNo
UGFyc2luZ0xvY2FscygpIHsgfQogICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0K
IAogcHJpdmF0ZToKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5KGNvbnN0IFN0
YWNrJiwgY29uc3QgQ29udHJvbERhdGEmKTsKLQotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gY2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbERhdGEmIHRhcmdldCwgY29uc3QgU3RhY2smIGV4
cHJlc3Npb25TdGFjayk7Ci0KLSAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7Ci0gICAgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIG1fbW9kdWxlOwogfTsKIAotYXV0byBWYWxpZGF0ZTo6YWRkQXJn
dW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKSAtPiBSZXN1bHQKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhhZGRMb2NhbChzaWduYXR1cmUuYXJndW1lbnQo
aSksIDEpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdl
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVHZXQodW5zaWdu
ZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX21vZHVsZS50YWJsZUNvdW50KCks
ICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1f
bW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0gICAgcmVzdWx0ID0gbV9tb2R1bGUudGFibGVzW3RhYmxl
SW5kZXhdLndhc21UeXBlKCk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIg
IT0gaW5kZXgsICJ0YWJsZS5nZXQgaW5kZXggdG8gdHlwZSAiLCBtYWtlU3RyaW5nKGluZGV4KSwg
IiBleHBlY3RlZCAiLCBtYWtlU3RyaW5nKFR5cGU6OkkzMikpOwotCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhw
cmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFJlc3VsdAorYXV0
byBWYWxpZGF0ZTo6YWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNz
aW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUlu
ZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgs
ICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1bGUudGFibGVDb3VudCgpKTsKLSAgICBh
dXRvIHR5cGUgPSBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKTsKLSAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBpbmRleCwgInRhYmxlLnNldCBpbmRl
eCB0byB0eXBlICIsIGluZGV4LCAiIGV4cGVjdGVkICIsIFR5cGU6OkkzMik7Ci0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZhbHVlLCB0eXBlKSwgInRhYmxlLnNldCB2YWx1
ZSB0byB0eXBlICIsIHZhbHVlLCAiIGV4cGVjdGVkICIsIHR5cGUpOwotICAgIFJFTEVBU0VfQVNT
RVJUKG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50VHlw
ZTo6QW55cmVmIHx8IG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVF
bGVtZW50VHlwZTo6RnVuY3JlZik7Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlk
YXRlOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRUYWJsZVNpemUodW5zaWduZWQsIEV4
cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gVHlwZTo6STMyOwotICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX21vZHVsZS50YWJsZUNvdW50
KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIs
IG1fbW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZh
bGlkYXRlOjphZGRUYWJsZUdyb3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUm
IGZpbGwsIEV4cHJlc3Npb25UeXBlJiBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdyb3codW5zaWduZWQsIEV4cHJlc3Npb25U
eXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBy
ZXN1bHQgPSBUeXBlOjpJMzI7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4
ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIg
aXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1bGUudGFibGVDb3VudCgpKTsKLSAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoZmlsbCwgbV9tb2R1bGUudGFibGVzW3RhYmxl
SW5kZXhdLndhc21UeXBlKCkpLCAidGFibGUuZ3JvdyBleHBlY3RzIGZpbGwgdmFsdWUgb2YgdHlw
ZSAiLCBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSwgIiBnb3QgIiwgZmls
bCk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIgIT0gZGVsdGEsICJ0YWJs
ZS5ncm93IGV4cGVjdHMgYW4gaTMyIGRlbHRhIHZhbHVlLCBnb3QgIiwgbWFrZVN0cmluZyhkZWx0
YSkpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVGaWxs
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25U
eXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0
ZTo6YWRkVGFibGVGaWxsKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUs
IEV4cHJlc3Npb25UeXBlKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KHRhYmxlSW5kZXggPj0gbV9tb2R1bGUudGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwgdGFi
bGVJbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX21vZHVsZS50YWJsZUNvdW50KCkp
OwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShmaWxsLCBtX21vZHVsZS50
YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSksICJ0YWJsZS5maWxsIGV4cGVjdHMgZmlsbCB2
YWx1ZSBvZiB0eXBlICIsIG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpLCAi
IGdvdCAiLCBmaWxsKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBv
ZmZzZXQsICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4gaTMyIG9mZnNldCB2YWx1ZSwgZ290ICIsIG1h
a2VTdHJpbmcob2Zmc2V0KSk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIg
IT0gY291bnQsICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4gaTMyIGNvdW50IHZhbHVlLCBnb3QgIiwg
bWFrZVN0cmluZyhjb3VudCkpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0
ZTo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5
cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gVHlwZTo6STMy
OwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZSwgVHlwZTo6QW55
cmVmKSwgInJlZi5pc19udWxsIHRvIHR5cGUgIiwgbWFrZVN0cmluZyh2YWx1ZSksICIgZXhwZWN0
ZWQgIiwgbWFrZVN0cmluZyhUeXBlOjpBbnlyZWYpKTsKLQogICAgIHJldHVybiB7IH07CiB9CiAK
LWF1dG8gVmFsaWRhdGU6OmFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkUmVmRnVuYyh1aW50MzJfdCwg
RXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBUeXBlOjpGdW5jcmVm
OwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZnVuY3Rpb25J
bmRleFNwYWNlU2l6ZSgpLCAicmVmLmZ1bmMgaW5kZXggIiwgaW5kZXgsICIgaXMgdG9vIGxhcmdl
LCBtYXggaXMgIiwgbV9tb2R1bGUuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBtX21v
ZHVsZS5hZGRSZWZlcmVuY2VkRnVuY3Rpb24oaW5kZXgpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4g
UmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRMb2NhbChUeXBlLCB1aW50MzJfdCkgLT4gUmVzdWx0
CiB7Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBtX2xvY2Fscy5zaXplKCkgKyBjb3VudDsKLSAgICBB
U1NFUlQoIShDaGVja2VkVWludDMyKGNvdW50KSArIG1fbG9jYWxzLnNpemUoKSkuaGFzT3ZlcmZs
b3dlZCgpKTsKLSAgICBBU1NFUlQobmV3U2l6ZSA8PSBtYXhGdW5jdGlvbkxvY2Fscyk7Ci0gICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG5ld1Np
emUpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBuZXdTaXplLCAiIGxvY2FscyIpOwot
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fbG9j
YWxzLnVuY2hlY2tlZEFwcGVuZCh0eXBlKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZh
bGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCwgRXhwcmVzc2lvblR5
cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1f
bG9jYWxzLnNpemUoKSwgImF0dGVtcHQgdG8gdXNlIHVua25vd24gbG9jYWwgIiwgaW5kZXgsICIg
bGFzdCBvbmUgaXMgIiwgbV9sb2NhbHMuc2l6ZSgpKTsKLSAgICByZXN1bHQgPSBtX2xvY2Fsc1tp
bmRleF07CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OnNldExvY2FsKHVpbnQzMl90LCBFeHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAg
RXhwcmVzc2lvblR5cGUgbG9jYWxUeXBlOwotICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
Z2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlwZSkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
IWlzU3VidHlwZSh2YWx1ZSwgbG9jYWxUeXBlKSwgInNldF9sb2NhbCB0byB0eXBlICIsIHZhbHVl
LCAiIGV4cGVjdGVkICIsIGxvY2FsVHlwZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBW
YWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJfdCwgRXhwcmVzc2lv
blR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49
IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtu
b3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpOwotICAgIHJl
c3VsdCA9IG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLnR5cGU7Ci0gICAgQVNTRVJUKGlzVmFsdWVU
eXBlKHJlc3VsdCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OnNldEds
b2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFJlc3VsdAorYXV0
byBWYWxpZGF0ZTo6c2V0R2xvYmFsKHVpbnQzMl90LCBFeHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0
CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX21vZHVsZS5nbG9iYWxz
LnNpemUoKSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgb2YgdW5rbm93biBnbG9iYWwsIGxpbWl0
IGlzICIsIG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFi
bGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlzIGltbXV0YWJsZSIpOwotCi0gICAgRXhwcmVz
c2lvblR5cGUgZ2xvYmFsVHlwZSA9IG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLnR5cGU7Ci0gICAg
QVNTRVJUKGlzVmFsdWVUeXBlKGdsb2JhbFR5cGUpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKGdsb2JhbFR5cGUgIT0gdmFsdWUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIHdpdGggdHlw
ZSAiLCBnbG9iYWxUeXBlLCAiIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlICIsIHZhbHVlKTsKICAg
ICByZXR1cm4geyB9OwogfQogCkBAIC0zMTEsMTc4ICsyNTMsMTE0IEBAIFZhbGlkYXRlOjpDb250
cm9sVHlwZSBWYWxpZGF0ZTo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQog
ICAgIHJldHVybiBDb250cm9sRGF0YShCbG9ja1R5cGU6OlRvcExldmVsLCBzaWduYXR1cmUpOwog
fQogCi1zdGF0aWMgVmFsaWRhdGU6OlN0YWNrIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCBWYWxpZGF0ZTo6U3RhY2smIHN0YWNrKQotewotICAgIFZhbGlkYXRlOjpTdGFjayBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCkpOwotICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCkpOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YWNrLnNpemUoKSAtIHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKHN0YWNrW2kgKyBvZmZzZXRdKTsKLSAgICBzdGFjay5zaHJpbmsob2Zmc2V0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBhdXRvIFZhbGlkYXRlOjphZGRCbG9jayhCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2Nr
LCBTdGFjayYgbmV3U3RhY2spIC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoZW5jbG9zaW5nU3RhY2suc2l6ZSgpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJU
b28gZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgYmxvY2suIEJsb2NrIGV4cGVjdHMgIiwgc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIGVuY2xvc2luZ1N0YWNrLnNpemUo
KSwgIiB3ZXJlIHByZXNlbnQuIEJsb2NrIGhhcyBzaWduYXR1cmU6ICIsICpzaWduYXR1cmUpOwot
ICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAg
ICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICBu
ZXdCbG9jayA9IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6QmxvY2ssIHNpZ25hdHVyZSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kp
Ci0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShuZXdTdGFja1tpXSwg
c2lnbmF0dXJlLT5hcmd1bWVudChpKSksICJMb29wIGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGlu
ZGV4IiwgaSwgIiB0byBiZSBhIHN1YnR5cGUgb2YgIiwgc2lnbmF0dXJlLT5hcmd1bWVudChpKSwg
IiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbmV3U3RhY2tbaV0pOwogICAgIHJldHVybiB7IH07
CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBsb29wLCBTdGFjayYgbmV3U3RhY2ss
IHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGVuY2xv
c2luZ1N0YWNrLnNpemUoKSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2
YWx1ZXMgb24gc3RhY2sgZm9yIGxvb3AgYmxvY2suIExvb3AgZXhwZWN0cyAiLCBzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgZW5jbG9zaW5nU3RhY2suc2l6ZSgpLCAi
IHdlcmUgcHJlc2VudC4gTG9vcCBoYXMgc2lnbmF0dXJlOiAiLCAqc2lnbmF0dXJlKTsKLSAgICBu
ZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3Bs
aXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgbG9vcCA9
IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6TG9vcCwgc2lnbmF0dXJlKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKG5ld1N0YWNrW2ldLCBzaWduYXR1cmUt
PmFyZ3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAi
IHRvIGJlIGEgc3VidHlwZSBvZiAiLCBzaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1
bWVudCBoYXMgdHlwZSAiLCBuZXdTdGFja1tpXSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0
byBWYWxpZGF0ZTo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lv
blR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQK
IHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJMzIsICJzZWxlY3Qg
Y29uZGl0aW9uIG11c3QgYmUgaTMyLCBnb3QgIiwgY29uZGl0aW9uKTsKLSAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKG5vblplcm8gIT0gemVybywgInNlbGVjdCByZXN1bHQgdHlwZXMgbXVzdCBt
YXRjaCwgZ290ICIsIG5vblplcm8sICIgYW5kICIsIHplcm8pOwotICAgIHJlc3VsdCA9IHplcm87
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkSWYoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdT
dGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBSZXN1bHQKK2F1
dG8gVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBlLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5l
d1N0YWNrKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlv
biAhPSBJMzIsICJpZiBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAiLCBtYWtlU3RyaW5nKGNv
bmRpdGlvbikpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZW5jbG9zaW5nU3RhY2suc2l6
ZSgpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBz
dGFjayBmb3IgaWYgYmxvY2suIElmIGV4cGVjdHMgIiwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksICIsIGJ1dCBvbmx5ICIsIGVuY2xvc2luZ1N0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQu
IElmIGJsb2NrIGhhcyBzaWduYXR1cmU6ICIsICpzaWduYXR1cmUpOwotICAgIG5ld1N0YWNrID0g
c3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNp
Z25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICByZXN1bHQgPSBDb250cm9s
RGF0YShCbG9ja1R5cGU6OklmLCBzaWduYXR1cmUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUobmV3U3RhY2tbaV0sIHNpZ25hdHVyZS0+YXJndW1lbnQo
aSkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgYSBz
dWJ0eXBlIG9mICIsIHNpZ25hdHVyZS0+YXJndW1lbnQoaSksICIgYnV0IGFyZ3VtZW50IGhhcyB0
eXBlICIsIG5ld1N0YWNrW2ldKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRl
OjphZGRFbHNlKENvbnRyb2xUeXBlJiBjdXJyZW50LCBjb25zdCBTdGFjayYgdmFsdWVzKSAtPiBS
ZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0
IFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlm
eSh2YWx1ZXMsIGN1cnJlbnQpKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoY3Vy
cmVudCk7CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJiBjdXJyZW50KSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGN1
cnJlbnQuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpJZiwgImVsc2UgYmxvY2sgaXNuJ3QgYXNz
b2NpYXRlZCB0byBhbiBpZiIpOwogICAgIGN1cnJlbnQgPSBDb250cm9sRGF0YShCbG9ja1R5cGU6
OkJsb2NrLCBjdXJyZW50LnNpZ25hdHVyZSgpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IFZhbGlkYXRlOjphZGRSZXR1cm4oQ29udHJvbFR5cGUmIHRvcExldmVsLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZFJldHVy
bihDb250cm9sVHlwZSYsIGNvbnN0IFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgQVNTRVJUKHRv
cExldmVsLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpOwotICAgIHJldHVybiBj
aGVja0JyYW5jaFRhcmdldCh0b3BMZXZlbCwgcmV0dXJuVmFsdWVzKTsKLX0KLQotYXV0byBWYWxp
ZGF0ZTo6Y2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbFR5cGUmIHRhcmdldCwgY29uc3QgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaykgLT4gUmVzdWx0Ci17Ci0gICAgaWYgKCF0YXJnZXQuYnJhbmNoVGFy
Z2V0QXJpdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgp
LCB0YXJnZXQuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCA/ICJicmFuY2ggb3V0
IG9mIGZ1bmN0aW9uIiA6ICJicmFuY2ggdG8gYmxvY2siLCAiIG9uIGV4cHJlc3Npb24gc3RhY2sg
b2Ygc2l6ZSAiLCBleHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiLCBidXQgYmxvY2ssICIsIHRhcmdl
dCAsICIgZXhwZWN0cyAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSwgIiB2YWx1ZXMiKTsK
LQotCi0gICAgdW5zaWduZWQgZXhwcmVzc2lvblN0YWNrT2Zmc2V0ID0gZXhwcmVzc2lvblN0YWNr
LnNpemUoKSAtIHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKTsgKytpKQotICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUoaSks
IGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2tPZmZzZXQgKyBpXSksICJicmFuY2gncyBz
dGFjayB0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb2YgYmxvY2sncyB0eXBlIGJyYW5jaCB0YXJnZXQg
dHlwZS4gU3RhY2sgdmFsdWUgaGFzIHR5cGUiLCBleHByZXNzaW9uU3RhY2tbZXhwcmVzc2lvblN0
YWNrT2Zmc2V0ICsgaV0sICIgYnV0IGJyYW5jaCB0YXJnZXQgZXhwZWN0cyBhIHZhbHVlIHdpdGgg
c3VidHlwZSBvZiAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgIiBhdCBpbmRleCAiLCBp
KTsKLQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZEJyYW5jaChDb250
cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiBz
dGFjaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRCcmFuY2goQ29udHJvbFR5cGUmLCBF
eHByZXNzaW9uVHlwZSwgY29uc3QgU3RhY2smKSAtPiBSZXN1bHQKIHsKLSAgICAvLyBWb2lkIG1l
YW5zIHRoaXMgaXMgYW4gdW5jb25kaXRpb25hbCBicmFuY2guCi0gICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihjb25kaXRpb24gIT0gVm9pZCAmJiBjb25kaXRpb24gIT0gSTMyLCAiY29uZGl0aW9u
YWwgYnJhbmNoIHdpdGggbm9uLWkzMiBjb25kaXRpb24gIiwgY29uZGl0aW9uKTsKLSAgICByZXR1
cm4gY2hlY2tCcmFuY2hUYXJnZXQodGFyZ2V0LCBzdGFjayk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFy
Z2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
LCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gSTMyLCAiYnJfdGFibGUgd2l0aCBub24taTMyIGNv
bmRpdGlvbiAiLCBjb25kaXRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRh
cmdldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byogdGFyZ2V0ID0gdGFyZ2V0c1tpXTsK
LSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdl
dEFyaXR5KCkgIT0gdGFyZ2V0LT5icmFuY2hUYXJnZXRBcml0eSgpLCAiYnJfdGFibGUgdGFyZ2V0
IHR5cGUgc2l6ZSBtaXNtYXRjaC4gRGVmYXVsdCBoYXMgc2l6ZTogIiwgZGVmYXVsdFRhcmdldC5i
cmFuY2hUYXJnZXRBcml0eSgpLCAiYnV0IHRhcmdldDogIiwgaSwgIiBoYXMgc2l6ZTogIiwgdGFy
Z2V0LT5icmFuY2hUYXJnZXRBcml0eSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB0eXBlID0g
MDsgdHlwZSA8IGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKTsgKyt0eXBlKQotICAg
ICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGRlZmF1bHRUYXJnZXQu
YnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpKSwg
ImJyX3RhYmxlIHRhcmdldCB0eXBlIG1pc21hdGNoIGF0IG9mZnNldCAiLCB0eXBlLCAiIGV4cGVj
dGVkOiAiLCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUodHlwZSksICIgYnV0IHNhdzog
IiwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpLCAiIHdoZW4gdGFyZ2V0aW5nIGJsb2Nr
IiwgKnRhcmdldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNoZWNrQnJhbmNoVGFyZ2V0KGRlZmF1
bHRUYXJnZXQsIGV4cHJlc3Npb25TdGFjayk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBW
YWxpZGF0ZTo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRHcm93TWVtb3J5KEV4cHJl
c3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoZGVsdGEgIT0gSTMyLCAiZ3Jvd19tZW1vcnkgd2l0aCBub24taTMyIGRlbHRh
IGFyZ3VtZW50IGhhcyB0eXBlOiAiLCBkZWx0YSk7Ci0gICAgcmVzdWx0ID0gSTMyOwogICAgIHJl
dHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDdXJyZW50TWVtb3J5
KEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gSTMyOwogICAgIHJl
dHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50
cnksIFN0YWNrJiBzdGFjaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBTdGFjayYpIC0+IFJlc3VsdAogewotICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFModW5pZnkoc3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhKSk7CiAgICAgcmV0dXJu
IGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkpOwogfQogCiBhdXRvIFZhbGlkYXRlOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFJlc3VsdAogewogICAgIGF1dG8g
YmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGJsb2NrLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6SWYpOwotCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3Vu
dCgpOyArK2kpCi0gICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChi
bG9jay5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSk7CisgICAgICAgIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChibG9jay5zaWduYXR1cmUoKS0+cmV0
dXJuVHlwZShpKSwgRW1wdHlFeHByZXNzaW9uKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
Y29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpIC0+IFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFyZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZShhcmdzW2ldLCBzaWduYXR1cmUuYXJndW1lbnQoaSkpLCAiYXJndW1lbnQgdHlwZSBt
aXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnc1tpXSwgIiwgZXhwZWN0ZWQgIiwgc2lnbmF0dXJl
LmFyZ3VtZW50KGkpKTsKLQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUu
cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICByZXN1bHRzLmFwcGVuZChzaWduYXR1cmUucmV0
dXJuVHlwZShpKSk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKEVtcHR5RXhwcmVzc2lvbik7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBSZXN1bHQKK2F1
dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCBSZXN1bHRMaXN0JiByZXN1
bHRzKSAtPiBSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZUluZGV4IDwgbV9tb2R1
bGUudGFibGVDb3VudCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX21vZHVsZS50YWJsZXNbdGFi
bGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYpOwotICAgIGNvbnN0
IGF1dG8gYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudCA9PSBhcmdzLnNpemUoKSAtIDEpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZ3NbaV0sIHNpZ25hdHVyZS5hcmd1bWVudChp
KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmdz
W2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJndW1lbnQoaSkpOwotCi0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRihhcmdzLmxhc3QoKSAhPSBJMzIsICJub24taTMyIGNhbGxfaW5kaXJl
Y3QgaW5kZXggIiwgYXJncy5sYXN0KCkpOwotCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKGkpKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoRW1wdHlFeHBy
ZXNzaW9uKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjp1bmlmeShjb25z
dCBTdGFjayYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlwZSYgYmxvY2spIC0+IFJlc3VsdAorYXV0
byBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUmLCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihi
bG9jay5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSAhPSB2YWx1ZXMuc2l6ZSgpLCAiIGJsb2Nr
IHdpdGggdHlwZTogIiwgKmJsb2NrLnNpZ25hdHVyZSgpLCAiIHJldHVybnM6ICIsIGJsb2NrLnNp
Z25hdHVyZSgpLT5yZXR1cm5Db3VudCgpLCAiIGJ1dCBzdGFjayBoYXM6ICIsIHZhbHVlcy5zaXpl
KCksICIgdmFsdWVzIik7CisgICAgcmV0dXJuIHsgfTsKK30KIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodmFsdWVzW2ldLCBibG9jay5zaWdu
YXR1cmUoKS0+cmV0dXJuVHlwZShpKSksICJjb250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhw
ZWN0ZWQgdHlwZS4gIiwgdmFsdWVzW2ldLCAiIGlzIG5vdCBhIHN1YnR5cGUgb2YgIiwgYmxvY2su
c2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSkpOworYXV0byBWYWxpZGF0ZTo6c3RvcmUoU3RvcmVP
cFR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgdWludDMyX3QpIC0+IFJlc3Vs
dAoreworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPE9wVHlwZT4KK2F1dG8gVmFsaWRh
dGU6OmFkZE9wKEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAorewor
ICAgIHJldHVybiB7IH07Cit9CiAKLSAgICAvLyBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVl
cy5zaXplKCkgIT0gMSwgImJsb2NrIHdpdGggdHlwZTogIiwgbWFrZVN0cmluZygqYmxvY2suc2ln
bmF0dXJlKCkpLCAiIGVuZHMgd2l0aCBhIHN0YWNrIGNvbnRhaW5pbmcgbW9yZSB0aGFuIG9uZSB2
YWx1ZSIpOwordGVtcGxhdGU8T3BUeXBlPgorYXV0byBWYWxpZGF0ZTo6YWRkT3AoRXhwcmVzc2lv
blR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAorewogICAg
IHJldHVybiB7IH07CiB9CiAKQEAgLTQ5MCwxMCArMzY4LDEwIEBAIHN0YXRpYyB2b2lkIGR1bXBF
eHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgVmFsaWRhdGU6
OlN0YWNrCiB7CiAgICAgZGF0YUxvZyhjb21tYSwgIiBFeHByZXNzaW9uU3RhY2s6Iik7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAgICBk
YXRhTG9nKGNvbW1hLCBtYWtlU3RyaW5nKGV4cHJlc3Npb24pKTsKKyAgICAgICAgZGF0YUxvZyhj
b21tYSwgbWFrZVN0cmluZyhleHByZXNzaW9uLnR5cGUoKSkpOwogfQogCi12b2lkIFZhbGlkYXRl
OjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0
YWNrKiBleHByZXNzaW9uU3RhY2spCit2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IENvbnRyb2xT
dGFjayYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKQogewogICAg
IGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGRh
dGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhKTsKQEAgLTUwNyw3ICszODUs
NyBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250
cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZQogCiBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZh
bGlkYXRlRnVuY3Rpb24oY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGUpCiB7Ci0gICAg
VmFsaWRhdGUgY29udGV4dChtb2R1bGUpOworICAgIFZhbGlkYXRlIGNvbnRleHQ7CiAgICAgRnVu
Y3Rpb25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRvcihjb250ZXh0LCBmdW5jdGlvbi5kYXRhLmRh
dGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbW9kdWxlKTsKICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHZhbGlkYXRvci5wYXJzZSgpKTsKICAgICByZXR1cm4geyB9
OwpAQCAtNTE1LDYgKzM5Myw0IEBAIEV4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5j
dGlvbihjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduCiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCiAKLSNpbmNsdWRlICJXYXNtVmFsaWRhdGVJbmxpbmVzLmgiCi0K
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVdvcmtsaXN0LmNwcAppbmRleCBkZjhiM2U4OWNiYTZmNmQxMjc5NDUwZWY0YmQ0YmQw
NDM3OTg5M2YwLi5mYTcxNmUyMjViZTkxMmMwMzc2YjQ4ZDEyMjBmZWFkYWI2OGZjNWM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTE1Miw4ICsx
NTIsMTIgQEAgdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWY8UGxhbj4gcGxhbikKICAgICB9CiAK
ICAgICBkYXRhTG9nTG5JZihXYXNtV29ya2xpc3RJbnRlcm5hbDo6dmVyYm9zZSwgIkVucXVldWlu
ZyBwbGFuIik7Ci0gICAgbV9xdWV1ZS5lbnF1ZXVlKHsgUHJpb3JpdHk6OlByZXBhcmF0aW9uLCBu
ZXh0VGlja2V0KCksICBXVEZNb3ZlKHBsYW4pIH0pOwotICAgIG1fcGxhbkVucXVldWVkLT5ub3Rp
ZnlPbmUobG9ja2VyKTsKKyAgICBib29sIG11bHRpVGhyZWFkZWQgPSBwbGFuLT5tdWx0aVRocmVh
ZGVkKCk7CisgICAgbV9xdWV1ZS5lbnF1ZXVlKHsgbXVsdGlUaHJlYWRlZCA/IFByaW9yaXR5OjpD
b21waWxhdGlvbiA6IFByaW9yaXR5OjpQcmVwYXJhdGlvbiwgbmV4dFRpY2tldCgpLCAgV1RGTW92
ZShwbGFuKSB9KTsKKyAgICBpZiAobXVsdGlUaHJlYWRlZCkKKyAgICAgICAgbV9wbGFuRW5xdWV1
ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIGVsc2UKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQt
Pm5vdGlmeU9uZShsb2NrZXIpOwogfQogCiB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5j
aHJvbm91c2x5KFBsYW4mIHBsYW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKaW5kZXggYjEzYTVlMjRjNGY0NjJhNDE1ZTUwODk4
YzM4MmE4MGRiODA4NjQ0Ny4uY2IwMjgxYjlhYzUzYmQ5YWRkZTg2YzJjOGIzNGJlM2E3ZDhlZjcz
OCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9w
c0hlYWRlci5weQpAQCAtNDAsMTAgKzQwLDE2IEBAIG9wY29kZXMgPSB3YXNtLm9wY29kZXMKIHdh
c21PcHNIRmlsZSA9IG9wZW4oYXJnc1syXSwgInciKQogCiAKLWRlZiBjcHBNYWNybyh3YXNtT3Bj
b2RlLCB2YWx1ZSwgYjMsIGluYyk6Ci0gICAgcmV0dXJuICIgXFxcbiAgICBtYWNybygiICsgd2Fz
bS50b0NwcCh3YXNtT3Bjb2RlKSArICIsICIgKyBoZXgoaW50KHZhbHVlKSkgKyAiLCAiICsgYjMg
KyAiLCAiICsgc3RyKGluYykgKyAiKSIKK2RlZiBjcHBUeXBlKHR5cGUpOgorICAgIGlmIHR5cGUg
PT0gImJvb2wiOgorICAgICAgICByZXR1cm4gIkkzMiIKKyAgICByZXR1cm4gdHlwZS5jYXBpdGFs
aXplKCkKIAogCitkZWYgY3BwTWFjcm8od2FzbU9wY29kZSwgdmFsdWUsIGIzLCBpbmMsICpleHRy
YUFyZ3MpOgorICAgIGV4dHJhQXJnc1N0ciA9ICIsICIgKyAiLCAiLmpvaW4oZXh0cmFBcmdzKSBp
ZiBsZW4oZXh0cmFBcmdzKSBlbHNlICIiCisgICAgcmV0dXJuICIgXFxcbiAgICBtYWNybygiICsg
d2FzbS50b0NwcCh3YXNtT3Bjb2RlKSArICIsICIgKyBoZXgoaW50KHZhbHVlKSkgKyAiLCAiICsg
YjMgKyAiLCAiICsgc3RyKGluYykgKyBleHRyYUFyZ3NTdHIgKyAiKSIKKwogZGVmIHR5cGVNYWNy
b2l6ZXIoKToKICAgICBpbmMgPSAwCiAgICAgZm9yIHR5IGluIHdhc20udHlwZXM6CkBAIC01NSwz
MyArNjEsNTUgQEAgdHlwZV9kZWZpbml0aW9ucy5leHRlbmQoW3QgZm9yIHQgaW4gdHlwZU1hY3Jv
aXplcigpXSkKIHR5cGVfZGVmaW5pdGlvbnMgPSAiIi5qb2luKHR5cGVfZGVmaW5pdGlvbnMpCiAK
IAotZGVmIG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG9wY29kZUZpZWxkPSJ2YWx1ZSIpOgorZGVm
IG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG9wY29kZUZpZWxkPSJ2YWx1ZSIsIG1vZGlmaWVyPU5v
bmUpOgogICAgIGluYyA9IDAKICAgICBmb3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihmaWx0
ZXIpOgogICAgICAgICBiM29wID0gIk9vcHMiCiAgICAgICAgIGlmIGlzU2ltcGxlKG9wWyJvcGNv
ZGUiXSk6CiAgICAgICAgICAgICBiM29wID0gb3BbIm9wY29kZSJdWyJiM29wIl0KLSAgICAgICAg
eWllbGQgY3BwTWFjcm8ob3BbIm5hbWUiXSwgb3BbIm9wY29kZSJdW29wY29kZUZpZWxkXSwgYjNv
cCwgaW5jKQorICAgICAgICBleHRyYUFyZ3MgPSBbXQorICAgICAgICBpZiBtb2RpZmllcjoKKyAg
ICAgICAgICAgIGV4dHJhQXJncyA9IG1vZGlmaWVyKG9wWyJvcGNvZGUiXSkKKyAgICAgICAgeWll
bGQgY3BwTWFjcm8ob3BbIm5hbWUiXSwgb3BbIm9wY29kZSJdW29wY29kZUZpZWxkXSwgYjNvcCwg
aW5jLCAqZXh0cmFBcmdzKQogICAgICAgICBpbmMgKz0gMQogCisKK2RlZiBvcGNvZGVXaXRoVHlw
ZXNNYWNyb2l6ZXIoZmlsdGVyKToKKyAgICBkZWYgbW9kaWZpZXIob3ApOgorICAgICAgICByZXR1
cm4gW2NwcFR5cGUodHlwZSkgZm9yIHR5cGUgaW4gb3BbInBhcmFtZXRlciJdICsgb3BbInJldHVy
biJdXQorICAgIHJldHVybiBvcGNvZGVNYWNyb2l6ZXIoZmlsdGVyLCBtb2RpZmllcj1tb2RpZmll
cikKKworCitkZWYgbWVtb3J5TG9hZE1hY3JvaXplcigpOgorICAgIGRlZiBtb2RpZmllcihvcCk6
CisgICAgICAgIHJldHVybiBbY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pXQorICAgIHJldHVybiBv
cGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiAob3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5k
IGxlbihvcFsicmV0dXJuIl0pID09IDEpLCBtb2RpZmllcj1tb2RpZmllcikKKworCitkZWYgbWVt
b3J5U3RvcmVNYWNyb2l6ZXIoKToKKyAgICBkZWYgbW9kaWZpZXIob3ApOgorICAgICAgICByZXR1
cm4gW2NwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKV0KKyAgICByZXR1cm4gb3Bjb2RlTWFjcm9p
emVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIGFuZCBsZW4ob3BbInJl
dHVybiJdKSA9PSAwKSwgbW9kaWZpZXI9bW9kaWZpZXIpCisKKwogZGVmaW5lcyA9IFsiI2RlZmlu
ZSBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1AobWFjcm8pIl0KIGRlZmluZXMuZXh0ZW5kKFtvcCBm
b3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogbm90IChpc1VuYXJ5KG9wKSBvciBp
c0JpbmFyeShvcCkgb3Igb3BbImNhdGVnb3J5Il0gPT0gImNvbnRyb2wiIG9yIG9wWyJjYXRlZ29y
eSJdID09ICJtZW1vcnkiIG9yIG9wWyJjYXRlZ29yeSJdID09ICJleHR0YWJsZSIpKV0pCiBkZWZp
bmVzLmFwcGVuZCgiXG5cbiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AobWFj
cm8pIikKIGRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJk
YSBvcDogb3BbImNhdGVnb3J5Il0gPT0gImNvbnRyb2wiKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5c
biNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TSU1QTEVfVU5BUllfT1AobWFjcm8pIikKLWRlZmluZXMu
ZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogaXNVbmFyeShv
cCkgYW5kIGlzU2ltcGxlKG9wKSldKQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNv
ZGVXaXRoVHlwZXNNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc1VuYXJ5KG9wKSBhbmQgaXNTaW1wbGUo
b3ApKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9VTkFSWV9P
UChtYWNybykgXFxcbiAgICBGT1JfRUFDSF9XQVNNX1NJTVBMRV9VTkFSWV9PUChtYWNybykiKQot
ZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBp
c1VuYXJ5KG9wKSBhbmQgbm90IChpc1NpbXBsZShvcCkpKV0pCitkZWZpbmVzLmV4dGVuZChbb3Ag
Zm9yIG9wIGluIG9wY29kZVdpdGhUeXBlc01hY3JvaXplcihsYW1iZGEgb3A6IGlzVW5hcnkob3Ap
IGFuZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBG
T1JfRUFDSF9XQVNNX1NJTVBMRV9CSU5BUllfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtv
cCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnkob3ApIGFuZCBp
c1NpbXBsZShvcCkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlV2l0aFR5
cGVzTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnkob3ApIGFuZCBpc1NpbXBsZShvcCkpXSkK
IGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNy
bykgXFxcbiAgICBGT1JfRUFDSF9XQVNNX1NJTVBMRV9CSU5BUllfT1AobWFjcm8pIikKLWRlZmlu
ZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5h
cnkob3ApIGFuZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Ig
b3AgaW4gb3Bjb2RlV2l0aFR5cGVzTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnkob3ApIGFu
ZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1Jf
RUFDSF9XQVNNX01FTU9SWV9MT0FEX09QKG1hY3JvKSIpCi1kZWZpbmVzLmV4dGVuZChbb3AgZm9y
IG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAibWVt
b3J5IiBhbmQgbGVuKG9wWyJyZXR1cm4iXSkgPT0gMSkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBm
b3Igb3AgaW4gbWVtb3J5TG9hZE1hY3JvaXplcigpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2Rl
ZmluZSBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChtYWNybykiKQotZGVmaW5lcy5leHRl
bmQoW29wIGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiAob3BbImNhdGVnb3J5
Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJuIl0pID09IDApKV0pCitkZWZpbmVzLmV4
dGVuZChbb3AgZm9yIG9wIGluIG1lbW9yeVN0b3JlTWFjcm9pemVyKCldKQogZGVmaW5lcy5hcHBl
bmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fRVhUX1RBQkxFX09QKG1hY3JvKSIpCi1kZWZp
bmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsi
Y2F0ZWdvcnkiXSA9PSAiZXh0dGFibGUiKSwgImV4dGVuZGVkT3AiKV0pCitkZWZpbmVzLmV4dGVu
ZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnki
XSA9PSAiZXh0dGFibGUiKSwgb3Bjb2RlRmllbGQ9ImV4dGVuZGVkT3AiKV0pCiBkZWZpbmVzLmFw
cGVuZCgiXG5cbiIpCiAKIGRlZmluZXMgPSAiIi5qb2luKGRlZmluZXMpCkBAIC0xMzMsMTMgKzE2
MSwxMyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGV4cGVjdGVkVmVyc2lvbk51bWJlciA9
ICIiIiArIHdhc20uZXhwZWN0ZWRWZXJzaW9uTnVtYgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBudW1UeXBlcyA9ICIiIiArIHN0cihsZW4odHlwZXMpKSArICIiIjsKIAogIiIiICsgdHlwZV9k
ZWZpbml0aW9ucyArICIiIgotI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgYjN0
eXBlLCBpbmMpIG5hbWUgPSBpZCwKKyNkZWZpbmUgQ1JFQVRFX0VOVU1fVkFMVUUobmFtZSwgaWQs
IC4uLikgbmFtZSA9IGlkLAogZW51bSBUeXBlIDogaW50OF90IHsKICAgICBGT1JfRUFDSF9XQVNN
X1RZUEUoQ1JFQVRFX0VOVU1fVkFMVUUpCiB9OwogI3VuZGVmIENSRUFURV9FTlVNX1ZBTFVFCiAK
LSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgaW5jKSBjYXNlIGlkOiByZXR1
cm4gdHJ1ZTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIC4uLikgY2FzZSBpZDogcmV0
dXJuIHRydWU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50PgogaW5saW5lIGJvb2wgaXNWYWxpZFR5
cGUoSW50IGkpCiB7CkBAIC0xNTIsNyArMTgwLDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFR5cGUo
SW50IGkpCiB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1l
LCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJuIGIzdHlwZTsKKyNkZWZpbmUgQ1JF
QVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgLi4uKSBjYXNlIG5hbWU6IHJldHVybiBiM3R5cGU7
CiBpbmxpbmUgQjM6OlR5cGUgdG9CM1R5cGUoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewpAQCAtMTYzLDcgKzE5MSw3IEBAIGlubGluZSBCMzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5
cGUpCiB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBp
ZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOworI2RlZmluZSBDUkVBVEVf
Q0FTRShuYW1lLCAuLi4pIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOwogaW5saW5lIGNvbnN0IGNo
YXIqIG1ha2VTdHJpbmcoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTc0
LDcgKzIwMiw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKFR5cGUgdHlwZSkKIH0K
ICN1bmRlZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5
cGUsIGluYykgY2FzZSBpZDogcmV0dXJuIGluYzsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwg
aWQsIGIzdHlwZSwgaW5jLCAuLi4pIGNhc2UgaWQ6IHJldHVybiBpbmM7CiBpbmxpbmUgaW50IGxp
bmVhcml6ZVR5cGUoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTg1LDcg
KzIxMyw3IEBAIGlubGluZSBpbnQgbGluZWFyaXplVHlwZShUeXBlIHR5cGUpCiB9CiAjdW5kZWYg
Q1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMp
IGNhc2UgaW5jOiByZXR1cm4gbmFtZTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIz
dHlwZSwgaW5jLCAuLi4pIGNhc2UgaW5jOiByZXR1cm4gbmFtZTsKIGlubGluZSBUeXBlIGxpbmVh
cml6ZWRUb1R5cGUoaW50IGkpCiB7CiAgICAgc3dpdGNoIChpKSB7CkBAIC0yMDcsNyArMjM1LDcg
QEAgaW5saW5lIFR5cGUgbGluZWFyaXplZFRvVHlwZShpbnQgaSkKICAgICBGT1JfRUFDSF9XQVNN
X01FTU9SWV9TVE9SRV9PUChtYWNybykgXFwKICAgICBtYWNybyhFeHRUYWJsZSwgMHhGQywgT29w
cywgMCkKIAotI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBu
YW1lID0gaWQsCisjZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkLCAuLi4pIG5hbWUg
PSBpZCwKIAogZW51bSBPcFR5cGUgOiB1aW50OF90IHsKICAgICBGT1JfRUFDSF9XQVNNX09QKENS
RUFURV9FTlVNX1ZBTFVFKQpAQCAtMjQ2LDcgKzI3NCw3IEBAIGVudW0gY2xhc3MgRXh0VGFibGVP
cFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBib29sIGlzQ29udHJvbE9wKE9wVHlwZSBvcCkKIHsK
ICAgICBzd2l0Y2ggKG9wKSB7Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBp
bmMpIGNhc2UgT3BUeXBlOjpuYW1lOgorI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNh
c2UgT3BUeXBlOjpuYW1lOgogICAgIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKENSRUFU
RV9DQVNFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjU5
LDcgKzI4Nyw3IEBAIGlubGluZSBib29sIGlzQ29udHJvbE9wKE9wVHlwZSBvcCkKIGlubGluZSBi
b29sIGlzU2ltcGxlKFVuYXJ5T3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAob3ApIHsKLSNkZWZp
bmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBVbmFyeU9wVHlwZTo6bmFt
ZToKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgLi4uKSBjYXNlIFVuYXJ5T3BUeXBlOjpuYW1l
OgogICAgIEZPUl9FQUNIX1dBU01fU0lNUExFX1VOQVJZX09QKENSRUFURV9DQVNFKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjcyLDcgKzMwMCw3IEBAIGlu
bGluZSBib29sIGlzU2ltcGxlKFVuYXJ5T3BUeXBlIG9wKQogaW5saW5lIGJvb2wgaXNTaW1wbGUo
QmluYXJ5T3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAob3ApIHsKLSNkZWZpbmUgQ1JFQVRFX0NB
U0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBCaW5hcnlPcFR5cGU6Om5hbWU6CisjZGVmaW5l
IENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBCaW5hcnlPcFR5cGU6Om5hbWU6CiAgICAgRk9S
X0VBQ0hfV0FTTV9TSU1QTEVfQklOQVJZX09QKENSRUFURV9DQVNFKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjk0LDcgKzMyMiw3IEBAIGlubGluZSB1aW50
MzJfdCBtZW1vcnlMb2cyQWxpZ25tZW50KE9wVHlwZSBvcCkKICAgICByZXR1cm4gMDsKIH0KIAot
I2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0
dXJuICNuYW1lOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgbmFtZTogcmV0
dXJuICNuYW1lOwogaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoT3BUeXBlIG9wKQogewog
ICAgIHN3aXRjaCAob3ApIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggNzg2ZDA5NmI2NmU2ODJkZDY1NzdkMmRlMjY1MDgyYjcyMTE1
NmJjYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
Ci0KLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0jIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0j
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIFRoaXMgdG9vbCBoYXMg
YSBjb3VwbGUgb2YgaGVscGZ1bCBtYWNyb3MgdG8gcHJvY2VzcyBXYXNtIGZpbGVzIGZyb20gdGhl
IHdhc20uanNvbi4KLQotZnJvbSBnZW5lcmF0ZVdhc20gaW1wb3J0ICoKLWltcG9ydCBvcHRwYXJz
ZQotaW1wb3J0IHN5cwotCi1wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVz
YWdlOiAlcHJvZyA8d2FzbS5qc29uPiA8V2FzbU9wcy5oPiIpCi0ob3B0aW9ucywgYXJncykgPSBw
YXJzZXIucGFyc2VfYXJncyhzeXMuYXJndlswOl0pCi1pZiBsZW4oYXJncykgIT0gMzoKLSAgICBw
YXJzZXIuZXJyb3IocGFyc2VyLnVzYWdlKQotCi13YXNtID0gV2FzbShhcmdzWzBdLCBhcmdzWzFd
KQotb3Bjb2RlcyA9IHdhc20ub3Bjb2Rlcwotd2FzbVZhbGlkYXRlSW5saW5lc0hGaWxlID0gb3Bl
bihhcmdzWzJdLCAidyIpCi0KLQotZGVmIGNwcFR5cGUobmFtZSk6Ci0gICAgcmVzdWx0ID0gewot
ICAgICAgICAiYm9vbCI6ICJJMzIiLAotICAgICAgICAiYWRkciI6ICJJMzIiLAotICAgICAgICAi
aTMyIjogIkkzMiIsCi0gICAgICAgICJpNjQiOiAiSTY0IiwKLSAgICAgICAgImYzMiI6ICJGMzIi
LAotICAgICAgICAiZjY0IjogIkY2NCIsCi0gICAgfS5nZXQobmFtZSwgTm9uZSkKLSAgICBpZiBy
ZXN1bHQgPT0gTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biB0eXBlIG5h
bWU6ICIgKyBuYW1lKQotICAgIHJldHVybiByZXN1bHQKLQotCi1kZWYgdG9DcHAobmFtZSk6Ci0g
ICAgcmV0dXJuIHdhc20udG9DcHAobmFtZSkKLQotCi1kZWYgdW5hcnlNYWNybyhuYW1lKToKLSAg
ICBvcCA9IG9wY29kZXNbbmFtZV0KLSAgICByZXR1cm4gIiIiCi10ZW1wbGF0ZTw+IGF1dG8gVmFs
aWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25U
eXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIi
KSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRh
dGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwotCi0g
ICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJl
dHVybiB7IH07Ci19Ci0iIiIKLQotCi1kZWYgYmluYXJ5TWFjcm8obmFtZSk6Ci0gICAgb3AgPSBv
cGNvZGVzW25hbWVdCi0gICAgcmV0dXJuICIiIgotdGVtcGxhdGU8PiBhdXRvIFZhbGlkYXRlOjph
ZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0
Ci17Ci0gICAgaWYgKFVOTElLRUxZKGxlZnQgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVy
Il1bMF0pICsgIiIiKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90
eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgbGVmdCB2YWx1ZSB0eXBl
IG1pc21hdGNoIik7Ci0KLSAgICBpZiAoVU5MSUtFTFkocmlnaHQgIT0gIiIiICsgY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVz
dWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgcmln
aHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwotCi0gICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShv
cFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVybiB7IH07Ci19Ci0iIiIKLQotZGVmIGxv
YWRNYWNybyhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0KLSAgICByZXR1cm4gIiIiCi0g
ICAgY2FzZSBMb2FkT3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAgICAgICBp
ZiAoVU5MSUtFTFkocG9pbnRlciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkg
KyAiIiIpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBl
PigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgcG9pbnRlciB0eXBlIG1pc21h
dGNoIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0p
ICsgIiIiOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0iIiIKLQotCi1kZWYgc3RvcmVNYWNy
byhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0KLSAgICByZXR1cm4gIiIiCi0gICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI6IHsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIi
KSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFJlc3VsdDo6ZXJyb3JfdHlwZT4oInZh
bGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIp
OwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2YWx1ZSAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJh
bWV0ZXIiXVsxXSkgKyAiIiIpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0
OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUg
dHlwZSBtaXNtYXRjaCIpOwotCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfSIiIgotCi0KLXVu
YXJ5U3BlY2lhbGl6YXRpb25zID0gIiIuam9pbihbb3AgZm9yIG9wIGluIHdhc20ub3Bjb2RlSXRl
cmF0b3IoaXNVbmFyeSwgdW5hcnlNYWNybyldKQotYmluYXJ5U3BlY2lhbGl6YXRpb25zID0gIiIu
am9pbihbb3AgZm9yIG9wIGluIHdhc20ub3Bjb2RlSXRlcmF0b3IoaXNCaW5hcnksIGJpbmFyeU1h
Y3JvKV0pCi1sb2FkQ2FzZXMgPSAiIi5qb2luKFtvcCBmb3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVy
YXRvcihsYW1iZGEgb3A6IG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIGFuZCBsZW4ob3BbInJl
dHVybiJdKSA9PSAxLCBsb2FkTWFjcm8pXSkKLXN0b3JlQ2FzZXMgPSAiIi5qb2luKFtvcCBmb3Ig
b3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihsYW1iZGEgb3A6IG9wWyJjYXRlZ29yeSJdID09ICJt
ZW1vcnkiIGFuZCBsZW4ob3BbInJldHVybiJdKSA9PSAwLCBzdG9yZU1hY3JvKV0pCi0KLWNvbnRl
bnRzID0gd2FzbS5oZWFkZXIgKyAiIiIKLS8vIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBp
bmxpbmVkIGJ5IFdhc21WYWxpZGF0ZS5jcHAgb25seSEgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCBlbHNld2hlcmUuCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1J
R05PUkVfUkVUVVJOX1RZUEVfV0FSTklOR1NfQkVHSU4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewotCi0iIiIgKyB1bmFyeVNwZWNpYWxpemF0aW9ucyArIGJpbmFy
eVNwZWNpYWxpemF0aW9ucyArICIiIgotCi1hdXRvIFZhbGlkYXRlOjpsb2FkKExvYWRPcFR5cGUg
b3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQz
Ml90KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoVU5MSUtFTFkoIWhhc01lbW9yeSgpKSkKLSAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWls
ZWQ6IGxvYWQgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsKLQotICAgIHN3aXRjaCAob3Ap
IHsKLSIiIiArIGxvYWRDYXNlcyArICIiIgotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotYXV0byBWYWxpZGF0ZTo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCkgLT4gUmVzdWx0Ci17
Ci0gICAgaWYgKFVOTElLRUxZKCFoYXNNZW1vcnkoKSkpCi0gICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPFJlc3VsdDo6ZXJyb3JfdHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBzdG9yZSBpbnN0cnVj
dGlvbiB3aXRob3V0IG1lbW9yeSIpOwotCi0gICAgc3dpdGNoIChvcCkgewotIiIiICsgc3RvcmVD
YXNlcyArICIiIgotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KLQotI2lmIEFTU0VSVF9ESVNBQkxFRAotSUdOT1JFX1JFVFVS
Tl9UWVBFX1dBUk5JTkdTX0VORAotI2VuZGlmCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0KLSIiIgotCi13YXNtVmFsaWRhdGVJbmxpbmVzSEZpbGUud3JpdGUoY29udGVudHMpCi13
YXNtVmFsaWRhdGVJbmxpbmVzSEZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAppbmRleCAxMDkwODgzMWJiMjZkZGEyM2E4NjQ2
ZDc0MTBhZjYwY2Y3YWJiMDRiLi42YzBiN2Y4NjRmYThjZTIyZWRiN2ZmNTI2YjliYWE3ZWIxNDMz
OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmNwcApAQCAtMjI4LDcgKzIyOCw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlCiAgICAgICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBpbnN0
YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGNvZGVCbG9jay5yZWxlYXNlTm9uTnVsbCgpLCBy
ZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlKTsKICAgICAgICAgfSk7Ci0gICAgfSksICZXYXNtOjpj
cmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbik7
CisgICAgfSkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UsIGNvbnN0
IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QsIFJlc29sdmUgcmVzb2x2ZUtpbmQsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1v
ZGUpCkBAIC0zMjgsMTIgKzMyOCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBhdXRvIFtiYXNlLCBieXRlU2l6ZV0gPSBnZXRXYXNtQnVmZmVy
RnJvbVZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBw
bGFuKCZ2bS53YXNtQ29udGV4dCwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNl
cHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShi
YXNlLCBieXRlU2l6ZSkpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291
cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2
bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih2YWxpZGF0aW9uUmVzdWx0Lmhhc192YWx1ZSgpKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlU3RyZWFtaW5nSW50ZXJu
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA0MDBjZWMwNzRhY2ViNzdhMjE4Mjgz
YzE2NWM0M2QxNGI2YmU1YzY2Li5kOTM3MTA0NThmMmYyYTVhYTE3NWI5NDZiOGYwNDhlYTQ0MzJl
OWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eUluc3RhbmNlKEpTR2xvYmFsT2JqZWMKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVQcml2YXRlTW9kdWxlS2V5KCksIG1vZHVsZSwgaW1w
b3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSwgUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5t
b2R1bGUoKSksIFdhc206OkNyZWF0aW9uTW9kZTo6RnJvbUpTKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCwgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlU3luYygmdm0ud2FzbUNvbnRl
eHQsIGluc3RhbmNlLT5tZW1vcnlNb2RlKCksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIs
ICZXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiksIGltcG9ydE9iamVjdCwgV2FzbTo6
Q3JlYXRpb25Nb2RlOjpGcm9tSlMpOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoJnZtLndhc21Db250
ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSwgaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlv
bk1vZGU6OkZyb21KUyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384229</attachid>
            <date>2019-11-22 20:50:15 -0800</date>
            <delta_ts>2019-11-23 08:39:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204474-20191122205011.patch</filename>
            <type>text/plain</type>
            <size>220938</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ODA5ZDNjZGEyNWY2MTRjYjZjNzNhZDc0YmU2NTQxYjU2MjQxN2YyLi44NTczNmFkZTg5M2Y1NThl
ODZkNjYyZDY5ZGI3ZGI5ZDZiZjJiYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMzAgQEAKKzIwMTktMTEtMjIgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBWYWxpZGF0ZSBhbmQgZ2VuZXJhdGUgYnl0ZWNv
ZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNDQ3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSwgd2UgdHJhdmVyc2UgdGhlIFdlYkFzc2VtYmx5IGNvZGUgdHdpY2U6
CisgICAgICAgIC0gYSBmaXJzdCBzZXJpYWwgcGFzcyB0aGF0IHZhbGlkYXRlcyBhbGwgZnVuY3Rp
b25zCisgICAgICAgIC0gYSBzZWNvbmQgY29uY3VycmVudCBwYXNzIHRoYXQgY29tcGlsZXMgYWxs
IGZ1bmN0aW9ucy4KKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgbW92ZSB0aGUgdmFsaWRhdGlv
biBpbnRvIHRoZSBwYXJzZXIgYW5kIHVwZGF0ZSB0aGUgTExJbnRQbGFuIHNvIHRoYXQgd2Ugbm8g
bG9uZ2VyIGhhdmUKKyAgICAgICAgdGhlIGZpcnN0IHBhc3MuIEluc3RlYWQsIHdlIG5vdyB2YWxp
ZGF0ZSBjb25jdXJyZW50bHkgYXQgdGhlIHNhbWUgdGltZSB3ZSBnZW5lcmF0ZSBieXRlY29kZS4K
KyAgICAgICAgVGhpcyBpcyBhIDEuNXggc3BlZWR1cCB3aGVuIGNvbXBpbGluZyB0aGUgWmVuR2Fy
ZGVuIGRlbW8uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIHdh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OkNvbnRyb2xEYXRhOjpDb250cm9sRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNJZik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0QXJpdHkgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5j
aFRhcmdldFR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVt
aXRDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjp0
bXBzRm9yU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVt
aXRQYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkFpcklS
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFJlZklz
TnVsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdldCk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZVNldCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdyb3cpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2spOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRSZXR1
cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNo
YWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjp1bmlmeSk6CisgICAgICAgIChKU0M6Oldh
c206OmR1bXBFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUFpcik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
VUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRUcnVuY1VGMzI+KToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNJZik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc1RvcExldmVsKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnNpZ25hdHVyZSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpoYXNOb25W
b2lkcmVzdWx0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OmJyYW5jaFRhcmdldEFyaXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRUYWJsZVNldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRMb29w
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
RW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OmR1bXBFeHByZXNzaW9uU3Rh
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OkJCUVBsYW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3
b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCQlFQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKToKKyAgICAgICAgKiB3
YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6
CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21FbnRyeVBsYW4uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpFbnRyeVBsYW46OkVudHJ5UGxhbik6CisgICAgICAgIChKU0M6
Oldhc206OkVudHJ5UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkVudHJ5UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OkVudHJ5UGxh
bjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OkVudHJ5UGxhbjo6Y29t
cGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbUVudHJ5UGxhbi5oOgorICAgICAgICAqIHdhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OnNwbGl0U3RhY2spOgor
ICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6VHlwZWRFeHByZXNzaW9uOjpUeXBl
ZEV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6VHlwZWRF
eHByZXNzaW9uOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJz
ZXI6OlR5cGVkRXhwcmVzc2lvbjo6dmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjo6VHlwZWRFeHByZXNzaW9uOjpvcGVyYXRvciBFeHByZXNzaW9uVHlwZSBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpUeXBlZEV4cHJlc3Np
b246Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjo6Y29udHJvbFN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnZh
bGlkYXRpb25GYWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OmJpbmFyeUNhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6dW5hcnlDYXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OmxvYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6Y2hlY2tCcmFuY2hUYXJnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKToKKyAgICAgICAgKiB3
YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6dG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omxvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6c2lnbmF0dXJlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpicmFu
Y2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpnZXREcm9wS2VlcENvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6Om1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OnNwbGl0U3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFu
ZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpM
TEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5o
OgorICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50UGxhbjo6TExJbnRQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpj
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmRpZENvbXBs
ZXRlQ29tcGlsYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OndvcmspOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmRpZFJlY2VpdmVGdW5jdGlvbkRhdGEpOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVs
ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6TW9kdWxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6bWFrZVZhbGlkYXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtl
VmFsaWRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0
ZVN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1Bs
YW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3
YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAg
ICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpkb250Rmlu
YWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pOgorICAgICAgICAqIHdhc20v
V2FzbVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdh
c21UaHVua0dlbmVyYXRvcik6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAg
ICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
Q29udHJvbERhdGE6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJv
bERhdGE6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJv
bERhdGE6OmJsb2NrVHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpD
b250cm9sRGF0YTo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlZhbGlkYXRlOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpW
YWxpZGF0ZTo6VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlR2V0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlU2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlk
YXRlOjphZGRUYWJsZUdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkVGFi
bGVGaWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFJlZklzTnVsbCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZWZGdW5jKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6
OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OnNldExvY2FsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmdldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldh
c206OlZhbGlkYXRlOjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkTG9vcCk6CisgICAg
ICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxz
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZXR1cm4pOgorICAgICAgICAoSlND
OjpXYXNtOjpWYWxpZGF0ZTo6YWRkQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OmFkZFN3aXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRHcm93TWVt
b3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEN1cnJlbnRNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpX
YXNtOjpWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206
OlZhbGlkYXRlOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZENh
bGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpsb2FkKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFs
aWRhdGU6OmFkZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZHVtcEV4cHJlc3Npb25TdGFjayk6
CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6dmFsaWRhdGVGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgICogd2FzbS9n
ZW5lcmF0ZVdhc21PcHNIZWFkZXIucHk6CisgICAgICAgIChjcHBUeXBlKToKKyAgICAgICAgKGNw
cE1hY3JvKToKKyAgICAgICAgKG9wY29kZU1hY3JvaXplcik6CisgICAgICAgIChvcGNvZGVXaXRo
VHlwZXNNYWNyb2l6ZXIpOgorICAgICAgICAob3Bjb2RlV2l0aFR5cGVzTWFjcm9pemVyLm1vZGlm
aWVyKToKKyAgICAgICAgKG1lbW9yeUxvYWRNYWNyb2l6ZXIpOgorICAgICAgICAobWVtb3J5TG9h
ZE1hY3JvaXplci5tb2RpZmllcik6CisgICAgICAgIChtZW1vcnlTdG9yZU1hY3JvaXplcik6Cisg
ICAgICAgIChtZW1vcnlTdG9yZU1hY3JvaXplci5tb2RpZmllcik6CisgICAgICAgICogd2FzbS9n
ZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHk6IFJlbW92ZWQuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorCiAyMDE5LTExLTIyICBQZXIgQXJuZSBWb2xs
YW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggY29tcGlsZSBlcnJvciBpbiBy
ZWxlYXNlIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5k
ZXggZjU5MjEyZmYwMWNjOWQ4MmEyMTAwNWIyMTI4NTcxZTdkMjMwM2U3NC4uMzBkZDI1OGE0MGVk
YzYyNDcwZDg5MzAwZGQ4ZWEwNzM0YzMzYjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKQEAgLTYwLDcgKzYwLDYgQEAgYWxsIDogXAogICAgIFVuaWNvZGVQ
YXR0ZXJuVGFibGVzLmggXAogICAgIHlhcnIvWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUuY3BwIFwK
ICAgICBXYXNtT3BzLmggXAotICAgIFdhc21WYWxpZGF0ZUlubGluZXMuaCBcCiAgICAgV2FzbUIz
SVJHZW5lcmF0b3JJbmxpbmVzLmggXAogIwogCkBAIC0zNTIsOSArMzUxLDYgQEAgSW50bENhbm9u
aWNhbGl6ZUxhbmd1YWdlLmg6ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMvZ2VuZXJhdGVJbnRs
Q2Fub25pY2FsaXplTGEKIFdhc21PcHMuaDogJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0
ZVdhc21PcHNIZWFkZXIucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc20ucHkg
JChKYXZhU2NyaXB0Q29yZSkvd2FzbS93YXNtLmpzb24KIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0
Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgJChKYXZhU2NyaXB0Q29yZSkvd2Fz
bS93YXNtLmpzb24gLi9XYXNtT3BzLmgKIAotV2FzbVZhbGlkYXRlSW5saW5lcy5oOiAkKEphdmFT
Y3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAkKEph
dmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2FzbS5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNt
L3dhc20uanNvbgotCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2Fz
bVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL3dhc20uanNv
biAuL1dhc21WYWxpZGF0ZUlubGluZXMuaAotCiBXYXNtQjNJUkdlbmVyYXRvcklubGluZXMuaDog
JChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hl
YWRlci5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2FzbS5weSAkKEphdmFTY3Jp
cHRDb3JlKS93YXNtL3dhc20uanNvbgogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlKS93YXNt
L2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzSGVhZGVyLnB5ICQoSmF2YVNjcmlwdENv
cmUpL3dhc20vd2FzbS5qc29uIC4vV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzLmgKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5kZXgg
NjNjNjY4ZmFmYTQwNzY1NTMzMDE1YzAxNWJkYzMyN2IxZmVhODNhOC4uMjU0ZjU1OWM4ZWY2OWVj
Njk0MzE1MDU5ZTQ3NGRkNzBiZTFkOGU1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBAIC0xMjksMTIgKzEyOSwxMyBAQCBwcml2
YXRlOgogICAgIFR5cGUgbV90eXBlOwogfTsKIAotdXNpbmcgVHlwZWRUbXBzID0gVmVjdG9yPFR5
cGVkVG1wLCAxPjsKLQogY2xhc3MgQWlySVJHZW5lcmF0b3IgewogcHVibGljOgorICAgIHVzaW5n
IEV4cHJlc3Npb25UeXBlID0gVHlwZWRUbXA7CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3Rv
cjxFeHByZXNzaW9uVHlwZSwgOD47CisKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAg
ICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBU
eXBlZFRtcHMgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCisgICAgICAgIENvbnRyb2xEYXRh
KEIzOjpPcmlnaW4gb3JpZ2luLCBCbG9ja1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3QgcmVz
dWx0VG1wcywgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNC
bG9jayogc3BlY2lhbCA9IG51bGxwdHIpCiAgICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUo
dHlwZSkKICAgICAgICAgICAgICwgY29udGludWF0aW9uKGNvbnRpbnVhdGlvbikKICAgICAgICAg
ICAgICwgc3BlY2lhbChzcGVjaWFsKQpAQCAtMTQ4LDYgKzE0OSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgewogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEm
IGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BM
ZXZlbDsgfQorCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrVHlwZSgpKSB7CkBAIC0xOTQsMzEgKzE5
OCw0NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAg
fQogCisgICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9v
cCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+YXJndW1lbnRDb3VudCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGUtPnJldHVybkNvdW50KCk7CisgICAgICAgIH0K
KworICAgICAgICBUeXBlIGJyYW5jaFRhcmdldFR5cGUodW5zaWduZWQgaSkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBicmFuY2hUYXJnZXRBcml0eSgpKTsKKyAgICAg
ICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldHVyblR5cGUtPmFyZ3VtZW50KGkpOworICAgICAgICAgICAgcmV0dXJuIHJl
dHVyblR5cGUtPnJldHVyblR5cGUoaSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdlbmVyYXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRy
b2xCbG9ja1R5cGU7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKICAgICAgICAg
QmFzaWNCbG9jayogc3BlY2lhbDsKLSAgICAgICAgVHlwZWRUbXBzIHJlc3VsdHM7CisgICAgICAg
IFJlc3VsdExpc3QgcmVzdWx0czsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZTsK
ICAgICB9OwogCi0gICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBUeXBlZFRtcDsKICAgICB1c2lu
ZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwotICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0g
VmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKLSAgICB1c2luZyBTdGFjayA9IEV4cHJlc3Npb25M
aXN0OwotICAgIHVzaW5nIFJlc3VsdExpc3QgPSBUeXBlZFRtcHM7Ci0gICAgdXNpbmcgQ29udHJv
bEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CiAK
LSAgICBzdGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4geyB9
OyB9OwotICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkgeyByZXR1cm4gU3RhY2soKTsgfQotICAgIGJv
b2wgaXNDb250cm9sVHlwZUlmKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBj
b250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KKyAgICB1c2luZyBDb250cm9s
RW50cnkgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKyAg
ICB1c2luZyBDb250cm9sU3RhY2sgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNv
bnRyb2xTdGFjazsKKyAgICB1c2luZyBTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJh
dG9yPjo6U3RhY2s7CisgICAgdXNpbmcgVHlwZWRFeHByZXNzaW9uID0gRnVuY3Rpb25QYXJzZXI8
QWlySVJHZW5lcmF0b3I+OjpUeXBlZEV4cHJlc3Npb247CiAKICAgICB1c2luZyBFcnJvclR5cGUg
PSBTdHJpbmc7CiAgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPjsKICAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT47CiAgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVj
dGVkPHZvaWQsIEVycm9yVHlwZT47CiAKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92
PFJlc3VsdExpc3QsIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6UmVzdWx0TGlzdD4p
OworCisgICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJu
IHsgfTsgfTsKKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5FVkVSX0lO
TElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJn
cykgY29uc3QKICAgICB7CkBAIC0yMzEsNyArMjUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkK
IAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2Nl
ZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIFRocm93
V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgQWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbios
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJl
Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwg
dWludDMyX3QpOwpAQCAtMjQwLDE1ICsyNTksMTUgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25U
eXBlIGFkZEJvdHRvbShCYXNpY0Jsb2NrKiwgVHlwZSk7CiAKICAgICAvLyBSZWZlcmVuY2VzCi0g
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmSXNOdWxsKEV4cHJlc3Np
b25UeXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
IAogICAgIC8vIFRhYmxlcwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFRhYmxlR2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxl
U2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1
ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5z
aWduZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwg
RXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNpemUodW5zaWduZWQsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBl
JiBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVGFibGVGaWxsKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgb2Zm
c2V0LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwcmVzc2lvblR5cGUmIGNvdW50KTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdyb3codW5zaWduZWQsIEV4
cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZp
bGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwg
RXhwcmVzc2lvblR5cGUgY291bnQpOwogCiAgICAgLy8gTG9jYWxzCiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOwpAQCAtMjc5LDcgKzI5OCw3IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2sm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNo
YWJsZShDb250cm9sRGF0YSYpOwogCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJl
dHVyblZhbHVlcyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0
dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwg
RXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJv
bERhdGEmIGRlZmF1bHRUYXJnZXRzLCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkm
LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTI4OCwyOSArMzA3LDIxIEBAIHB1YmxpYzoK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1Np
Z25hdHVyZSwgY29uc3QgU3RhY2smKSB7IHJldHVybiB7IH07IH0KIAogICAgIC8vIENhbGxzCi0g
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxs
ZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
VmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZSwgMT4mIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0
YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRVbnJlYWNoYWJsZSgpOwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5V
U0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVy
ZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJlc3VsdHMsIGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4mJiBleHRyYUFyZ3MgPSB7
IH0pOworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2Fs
bFBhdGNocG9pbnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExp
c3QmIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJh
aW5lZFRtcD4mJiBleHRyYUFyZ3MgPSB7IH0pOwogCiAgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlm
dChUeXBlLCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBh
ZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNz
aW9uVHlwZSByaHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQg
YWRkRmxvYXRpbmdQb2ludEFicyhCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVl
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5n
UG9pbnRCaW5PcChUeXBlLCBCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhw
cmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAotICAgIHZvaWQgZHVt
cChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayog
ZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29u
c3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25Q
YXJzZXI8QWlySVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAg
ICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CiAgICAgdm9pZCBkaWRQb3BWYWx1
ZUZyb21TdGFjaygpIHsgfQogCi0gICAgc3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9yKGNv
bnN0IFZlY3RvcjxUeXBlZFRtcD4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxUbXA+
IHJlc3VsdDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogdmVjdG9yKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnRtcCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KICAgICBjb25zdCBCYWc8QjM6OlBhdGNocG9pbnRWYWx1ZSo+JiBwYXRjaHBvaW50
cygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9wYXRjaHBvaW50czsKQEAgLTQwMSw5
ICs0MTIsOSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgVHlwZWRUbXBzIHRt
cHNGb3JTaWduYXR1cmUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQorICAgIFJlc3VsdExpc3Qg
dG1wc0ZvclNpZ25hdHVyZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCiAgICAgewotICAgICAg
ICBUeXBlZFRtcHMgcmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgICAgIFJl
c3VsdExpc3QgcmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKICAgICAg
ICAgICAgIHJlc3VsdFtpXSA9IHRtcEZvclR5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQyNiwxNiArNDM3LDE2IEBAIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChC
YXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJl
c3VsdCwgQXJncy4uLiB0aGVBcmdzKQogICAgIHsKLSAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFz
aWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDE+IHsgcmVzdWx0IH0sIFZlY3RvcjxDb25zdHJh
aW5lZFRtcCwgc2l6ZW9mLi4uKEFyZ3MpPjo6ZnJvbSh0aGVBcmdzLi4uKSk7CisgICAgICAgIGVt
aXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9
LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNpemVvZi4uLihBcmdzKT46OmZyb20odGhlQXJncy4u
LikpOwogICAgIH0KIAogICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNC
bG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQpCiAgICAgewotICAg
ICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgMT4geyBy
ZXN1bHQgfSwgVmVjdG9yPENvbnN0cmFpbmVkVG1wPigpKTsKKyAgICAgICAgZW1pdFBhdGNocG9p
bnQoYmFzaWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDg+IHsgcmVzdWx0IH0sIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4oKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3Vs
dFRtcFR5cGUsIHNpemVfdCBpbmxpbmVTaXplPgotICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFz
aWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZl
Y3RvcjxSZXN1bHRUbXBUeXBlLCAxPiYgIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwg
aW5saW5lU2l6ZT4mJiBhcmdzKQorICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayog
YmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1
bHRUbXBUeXBlLCA4PiYgIHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6
ZT4mJiBhcmdzKQogICAgIHsKICAgICAgICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFsKQogICAg
ICAgICAgICAgbV9wYXRjaHBvaW50U3BlY2lhbCA9IHN0YXRpY19jYXN0PEIzOjpQYXRjaHBvaW50
U3BlY2lhbCo+KG1fY29kZS5hZGRTcGVjaWFsKG1ha2VVbmlxdWU8QjM6OlBhdGNocG9pbnRTcGVj
aWFsPigpKSk7CkBAIC02MzMsNyArNjQ0LDcgQEAgcHJpdmF0ZToKICAgICBFeHByZXNzaW9uVHlw
ZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CiAgICAgdm9pZCBlbWl0U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5
cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKLSAg
ICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25U
eXBlJiBzb3VyY2UpOworICAgIHZvaWQgdW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgZHN0LCBj
b25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpOwogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxv
Y2soY29uc3QgU3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFjayk7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KQEAgLTc0Myw3ICs3NTQsNyBAQCB2b2lk
IEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBi
bG9jaywgVHlwZWRUbXAgaW5zdAogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50
LCBUbXAoKSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwg
SW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCitBaXJJUkdlbmVy
YXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9y
eU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1f
bW9kZShtb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC03NzEs
OSArNzgyLDYgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm8KICAgICAgICAgbV9jb2RlLnBpblJl
Z2lzdGVyKG1fbWVtb3J5U2l6ZUdQUik7CiAgICAgfQogCi0gICAgaWYgKHRocm93V2FzbUV4Y2Vw
dGlvbikKLSAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24o
dGhyb3dXYXNtRXhjZXB0aW9uKTsKLQogICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBz
d2l0Y2ggKG1fbW9kZSkgewogICAgICAgICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
OgpAQCAtMTA0NSw3ICsxMDUzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRz
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25U
eXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHZhbHVl
LnRtcCgpKTsKICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKFR5cGU6OkkzMik7CkBAIC0xMDY2LDcg
KzEwNzQsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aQogICAgIHJldHVybiB7IH07CiB9CiAK
LWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFibGVJbmRl
eCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgQVNTRVJUKGluZGV4LnRt
cCgpKTsKQEAgLTEwODMsNyArMTA5MSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxl
R2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWdu
ZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFs
dWUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVu
c2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5l
IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICBB
U1NFUlQoaW5kZXgudG1wKCkpOwpAQCAtMTExMiw3ICsxMTIwLDcgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRU
YWJsZUdyb3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJl
c3Npb25UeXBlJiBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKGZpbGwudG1wKCkpOwog
ICAgIEFTU0VSVChpc1N1YnR5cGUoZmlsbC50eXBlKCksIG1faW5mby50YWJsZXNbdGFibGVJbmRl
eF0ud2FzbVR5cGUoKSkpOwpAQCAtMTEyNSw3ICsxMTMzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBmaWxs
LCBFeHAKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJs
ZUZpbGwodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVz
c2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUg
Y291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZmlsbC50bXAoKSk7CiAgICAg
QVNTRVJUKGlzU3VidHlwZShmaWxsLnR5cGUoKSwgbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53
YXNtVHlwZSgpKSk7CkBAIC0xNzE0LDkgKzE3MjIsOSBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpl
bWl0TG9vcFRpZXJVcENoZWNrKHVpbnQzMl90IGxvb3BJbmRleCkKICAgICBmb3IgKGF1dG8mIGxv
Y2FsIDogbV9sb2NhbHMpCiAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAo
bG9jYWwsIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJv
bEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUo
KTsgKytjb250cm9sSW5kZXgpIHsKLSAgICAgICAgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25T
dGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOwotICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogZXhwcmVzc2lvblN0YWNr
KQotICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh2YWx1ZSwgQjM6
OlZhbHVlUmVwOjpDb2xkQW55KSk7CisgICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBt
X3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjazsKKyAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBleHByZXNzaW9uU3Rh
Y2spCisgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLnZh
bHVlKCksIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOwogICAgIH0KIAogICAgIFRpZXJVcENvdW50
OjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVudHJ5VHJpZ2dlciA9ICYobV90aWVyVXAtPm9zckVudHJ5
VHJpZ2dlcnMoKS5sYXN0KCkpOwpAQCAtMTc0NSw3ICsxNzUzLDcgQEAgdm9pZCBBaXJJUkdlbmVy
YXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpCiAgICAgICAgIH0p
OwogICAgIH0pOwogCi0gICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBW
ZWN0b3I8VG1wLCAxPigpLCBXVEZNb3ZlKHBhdGNoQXJncykpOworICAgIGVtaXRQYXRjaHBvaW50
KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgUmVzdWx0TGlzdCB7IH0sIFdURk1vdmUocGF0Y2hBcmdz
KSk7CiB9CiAKIEFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRk
VG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQpAQCAtMTc1OCw4ICsxNzY2LDEyIEBA
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5h
ZGRCbG9jaygpOwogICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9j
aygpOwogCi0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3Rh
Y2spOwotICAgIGJsb2NrID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgbmV3U3Rh
Y2ssIEJsb2NrVHlwZTo6TG9vcCwgY29udGludWF0aW9uLCBib2R5KTsKKyAgICBzcGxpdFN0YWNr
KHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKKyAgICBSZXN1bHRMaXN0IHJl
c3VsdHM7CisgICAgcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5ld1N0YWNrLnNpemUo
KSk7CisgICAgZm9yIChhdXRvIGl0ZW0gOiBuZXdTdGFjaykKKyAgICAgICAgcmVzdWx0cy51bmNo
ZWNrZWRBcHBlbmQoaXRlbSk7CisgICAgYmxvY2sgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2ln
bmF0dXJlLCBXVEZNb3ZlKHJlc3VsdHMpLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwg
Ym9keSk7CiAKICAgICBhcHBlbmQoSnVtcCk7CiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nl
c3NvcnMoYm9keSk7CkBAIC0xNzcyLDcgKzE3ODQsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBD
bwogCiBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYg
bmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2so
c2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVu
Y2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgbmV3QmxvY2sgPSBDb250cm9sRGF0YShvcmln
aW4oKSwgc2lnbmF0dXJlLCB0bXBzRm9yU2lnbmF0dXJlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6
QmxvY2ssIG1fY29kZS5hZGRCbG9jaygpKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTc4OCw3
ICsxODAwLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBtX2N1cnJlbnRCbG9jay0+
c2V0U3VjY2Vzc29ycyh0YWtlbiwgbm90VGFrZW4pOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0
YWtlbjsKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFj
ayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7
CiAgICAgcmVzdWx0ID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNp
Z25hdHVyZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2Vu
KTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTgwOSw3ICsxODIxLDcgQEAgYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRp
YWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVy
bihjb25zdCBDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKmRhdGEuc2lnbmF0dXJlKCks
IENhbGxSb2xlOjpDYWxsZWUpOwogICAgIGlmICghd2FzbUNhbGxJbmZvLnJlc3VsdHMuc2l6ZSgp
KSB7CkBAIC0xODQ3LDcgKzE4NTksNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4o
Y29uc3QgQ29udHJvbERhdGEmIGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZQogICAgICAg
ICByZXR1cm5Db25zdHJhaW50cy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodG1wLCB3YXNtQ2FsbElu
Zm8ucmVzdWx0c1tpXSkpOwogICAgIH0KIAotICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJs
b2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgMT4oKSwgV1RGTW92ZShyZXR1cm5Db25zdHJhaW50cykp
OworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgUmVzdWx0TGlzdCB7
IH0sIFdURk1vdmUocmV0dXJuQ29uc3RyYWludHMpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBA
IC0xOTYyLDEyICsxOTc0LDE0IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyAr
K2kpIHsKICAgICAgICAgICAgIGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKICAgICAg
ICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lv
blN0YWNrW2ldKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoYWRkQm90dG9tKG1fY3VycmVudEJsb2NrLCBkYXRh
LnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBUeXBlIHR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOwor
ICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZCh0eXBlLCBhZGRCb3R0b20obV9jdXJyZW50QmxvY2ssIHR5cGUpKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYg
cmVzdWx0IDogZGF0YS5yZXN1bHRzKQotICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBlbnRy
eS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1
cmUoKS0+cmV0dXJuVHlwZShpKSwgZGF0YS5yZXN1bHRzW2ldKTsKICAgICB9CiAKICAgICAvLyBU
b3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBt
YWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBoZXJlLgpAQCAtMTk3Nyw3ICsxOTkxLDcgQEAgYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5
LCBjb25zdCBTdGFjayYgZXhwcmUKICAgICByZXR1cm4geyB9OwogfQogCi1CMzo6UGF0Y2hwb2lu
dFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJs
b2NrLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25U
eXBlLCAxPiYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENv
bnN0cmFpbmVkVG1wPiYmIHBhdGNoQXJncykKK0IzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklSR2Vu
ZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8
VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgcGF0Y2hBcmdzKQogewog
ICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNSZXN1bHRUeXBlKCZzaWdu
YXR1cmUpKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBA
IC0yMDAyLDcgKzIwMTYsNyBAQCBCMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6
ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdAogICAgIHJldHVybiBw
YXRjaHBvaW50OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+JiByZXN1bHRzKSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNT
RVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCkBAIC0yMDky
LDcgKzIxMDYsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVz
c2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwpAQCAtMjI0OCw3ICsyMjYyLDcg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEFp
cklSR2VuZXJhdG9yOjp1bmlmeShjb25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHBy
ZXNzaW9uVHlwZSYgc291cmNlKQordm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhw
cmVzc2lvblR5cGUgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCiB7CiAgICAgQVNT
RVJUKGlzU3VidHlwZShzb3VyY2UudHlwZSgpLCBkc3QudHlwZSgpKSk7CiAgICAgYXBwZW5kKG1v
dmVPcEZvclZhbHVlVHlwZShkc3QudHlwZSgpKSwgc291cmNlLCBkc3QpOwpAQCAtMjI2NiwxMCAr
MjI4MCwxMCBAQCBzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJp
bnRlciYgY29tbWEsIGNvbnN0IEFpcklSR2VuZXJhdG9yOgogewogICAgIGRhdGFMb2coY29tbWEs
ICJFeHByZXNzaW9uU3RhY2s6Iik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDog
ZXhwcmVzc2lvblN0YWNrKQotICAgICAgICBkYXRhTG9nKGNvbW1hLCBleHByZXNzaW9uKTsKKyAg
ICAgICAgZGF0YUxvZyhjb21tYSwgZXhwcmVzc2lvbi52YWx1ZSgpKTsKIH0KIAotdm9pZCBBaXJJ
UkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNr
LCBjb25zdCBTdGFjayogc3RhY2spCit2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IENv
bnRyb2xTdGFjayYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogc3RhY2spCiB7CiAgICAgZGF0
YUxvZ0xuKCJQcm9jZXNzaW5nIEdyYXBoOiIpOwogICAgIGRhdGFMb2cobV9jb2RlKTsKQEAgLTIy
OTEsNyArMjMwNSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmln
aW4KICAgICByZXR1cm4gQjM6Ok9yaWdpbigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0
aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1
bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQogewogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogCkBAIC0yMzE0LDcgKzIzMjgsNyBAQCBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aQogICAgIAogICAgIHByb2NlZHVyZS5zZXRPcHRMZXZlbChPcHRpb25z
Ojp3ZWJBc3NlbWJseUJCUUFpck9wdGltaXphdGlvbkxldmVsKCkpOwogCi0gICAgQWlySVJHZW5l
cmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4
Y2VwdGlvbiwgc2lnbmF0dXJlKTsKKyAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZv
LCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUs
IGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNlcjxB
aXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwg
ZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTI5MDMsNyArMjkxNyw3IEBAIGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UCiAgICAgfSk7CiAKICAgICByZXN1bHQgPSBnNjQoKTsKLSAg
ICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgVmVjdG9yPFRtcCwg
MT4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdzKSk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJy
ZW50QmxvY2ssIHBhdGNocG9pbnQsIFZlY3RvcjxUeXBlZFRtcCwgOD4geyByZXN1bHQgfSwgV1RG
TW92ZShhcmdzKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjk3OCw3ICsyOTkyLDcgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Np
b25UeXBlIGFyZywgRXhwcmVzc2lvblQKICAgICB9KTsKIAogICAgIHJlc3VsdCA9IGc2NCgpOwot
ICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCBWZWN0b3I8VG1w
LCAxPiB7IHJlc3VsdCB9LCBXVEZNb3ZlKGFyZ3MpKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1
cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgVmVjdG9yPFR5cGVkVG1wLCA4PiB7IHJlc3VsdCB9LCBX
VEZNb3ZlKGFyZ3MpKTsKIAogICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCmluZGV4IDMzMWI0YjBhZDMxM2U2MjNj
YTdmZjRiZDhkZThhMTU4NmZjN2Q1MDUuLjFjM2Y1YmFmMDkxNmQ0Y2E3OGM1ZmJiNGIzZTYyN2M3
MjM4NDVmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rp
b25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxs
cHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25E
YXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCmluZGV4IDkwNGQ2OTRjNWFlNmRkYjdmMjcxMGU3NDE0ZWI5MmY1NTUyMzFlZmMuLmJkMzI4
ZWI0YmI0OTM1M2Y0NmZmOGRiYzUxMDI0NzNiNDNkMjJjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTg2LDEyICs4NiwxMyBA
QCBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiBjbGFzcyBCM0lSR2Vu
ZXJhdG9yIHsKIHB1YmxpYzoKLSAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFZhbHVlKiwg
MT47IC8vIFZhbHVlIG11c3QgYmUgYSBQaGkKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFZh
bHVlKjsKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsK
IAogICAgIHN0cnVjdCBDb250cm9sRGF0YSB7CiAgICAgICAgIENvbnRyb2xEYXRhKFByb2NlZHVy
ZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9ja1R5
cGUgdHlwZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0g
bnVsbHB0cikKICAgICAgICAgICAgIDogY29udHJvbEJsb2NrVHlwZSh0eXBlKQotICAgICAgICAg
ICAgLCBzaWduYXR1cmUoc2lnbmF0dXJlKQorICAgICAgICAgICAgLCBtX3NpZ25hdHVyZShzaWdu
YXR1cmUpCiAgICAgICAgICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCiAgICAgICAg
ICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKICAgICAgICAgewpAQCAtMTA4LDYgKzEwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihj
b25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3Qg
Q29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpUb3BMZXZlbDsgfQorCiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrVHlwZSgpKSB7CkBA
IC0xMzMsNyArMTM3LDkgQEAgcHVibGljOgogCiAgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUo
KSBjb25zdCB7IHJldHVybiBjb250cm9sQmxvY2tUeXBlOyB9CiAKLSAgICAgICAgYm9vbCBoYXNO
b25Wb2lkcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gc2lnbmF0dXJlLT5yZXR1cm5zVm9pZCgpOyB9
CisgICAgICAgIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2ln
bmF0dXJlOyB9CisKKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyByZXR1
cm4gbV9zaWduYXR1cmUtPnJldHVybnNWb2lkKCk7IH0KIAogICAgICAgICBCYXNpY0Jsb2NrKiB0
YXJnZXRCbG9ja0ZvckJyYW5jaCgpCiAgICAgICAgIHsKQEAgLTE0OSwyOSArMTU1LDQ3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOwogICAgICAgICB9CiAKKyAgICAg
ICAgU2lnbmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAg
ICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOworICAgICAgICB9CisKKyAgICAg
ICAgVHlwZSBicmFuY2hUYXJnZXRUeXBlKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpIDwgYnJhbmNoVGFyZ2V0QXJpdHkoKSk7CisgICAgICAgICAgICBp
ZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVy
biBtX3NpZ25hdHVyZS0+YXJndW1lbnQoaSk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1
cmUtPnJldHVyblR5cGUoaSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBCM0lSR2VuZXJhdG9yOwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2Nr
VHlwZTsKLSAgICAgICAgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlOworICAgICAgICBCbG9ja1Np
Z25hdHVyZSBtX3NpZ25hdHVyZTsKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uOwog
ICAgICAgICBCYXNpY0Jsb2NrKiBzcGVjaWFsOwogICAgICAgICBSZXN1bHRMaXN0IHBoaXM7CiAg
ICAgfTsKIAotICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmFsdWUqOworICAgIHVzaW5nIENv
bnRyb2xUeXBlID0gQ29udHJvbERhdGE7CiAgICAgdXNpbmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0
b3I8RXhwcmVzc2lvblR5cGUsIDE+OwotICAgIHVzaW5nIFN0YWNrID0gRXhwcmVzc2lvbkxpc3Q7
CiAKLSAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwogICAgIHVzaW5nIENvbnRy
b2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7Cisg
ICAgdXNpbmcgQ29udHJvbFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OkNv
bnRyb2xTdGFjazsKKyAgICB1c2luZyBTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0
b3I+OjpTdGFjazsKKyAgICB1c2luZyBUeXBlZEV4cHJlc3Npb24gPSBGdW5jdGlvblBhcnNlcjxC
M0lSR2VuZXJhdG9yPjo6VHlwZWRFeHByZXNzaW9uOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBF
eHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAg
Ym9vbCBpc0NvbnRyb2xUeXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJu
IGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lX3Y8UmVzdWx0TGlzdCwgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRv
cj46OlJlc3VsdExpc3Q+KTsKIAogICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsKICAgICB0
eXBlZGVmIFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OwogICAgIHR5cGVk
ZWYgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+
IFJlc3VsdDsKICAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJl
c3VsdDsKKworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJl
dHVybiBudWxscHRyOyB9OworCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAg
TkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJn
cy4uLiBhcmdzKSBjb25zdAogICAgIHsKQEAgLTE4MywyMiArMjA3LDIyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0g
d2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBD
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRl
eEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFs
RnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVw
Q291bnQqKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3Vt
ZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29u
c3RhbnQoVHlwZSwgdWludDY0X3QpOwogCiAgICAgLy8gUmVmZXJlbmNlcwotICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFs
dWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVm
RnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICAvLyBU
YWJsZXMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdldCh1
bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
LSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25l
ZCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR2V0KHVuc2lnbmVkLCBFeHBy
ZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25U
eXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVGFibGVTaXplKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdyb3co
dW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFRhYmxlRmlsbCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVz
c2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBjb3VudCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlw
ZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVGaWxsKHVuc2lnbmVk
LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25U
eXBlIGNvdW50KTsKICAgICAvLyBMb2NhbHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKQEAgLTIyOSw3ICsyNTMsNyBAQCBwdWJsaWM6
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0
YSYsIGNvbnN0IFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAotICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4
cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1
cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5j
aChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJl
dHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dp
dGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
IHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJl
c3Npb25TdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxv
Y2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CkBAIC0yNDMsNyArMjY3
LDcgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVu
cmVhY2hhYmxlKCk7CiAgICAgQjM6OlZhbHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Js
b2NrKiwgT3JpZ2luLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9pZChQYXRjaHBvaW50VmFsdWUqKT4mIHBhdGNocG9p
bnRGdW5jdG9yKTsKIAotICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYg
Y29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1
bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CiAg
ICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIHBhcnNlcikg
eyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMo
KSB7IH0KICAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyB9CkBAIC0zNjIsNyArMzg2
LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9j
ZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2MKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUg
Y29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbikKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0
aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50
KiB0aWVyVXApCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwg
bV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQpAQCAtMzkzLDkgKzQxNyw2IEBAIEIz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9y
eVNpemVHUFIpOwogICAgIH0KIAotICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgICAg
IFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2Vw
dGlvbik7Ci0KICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21C
b3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVk
R1BSKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CkBAIC02NjcsMTMgKzY4OCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4
cHJlc3Npb25UeXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFs
dWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICByZXN1
bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwg
b3JpZ2luKCksIHZhbHVlLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwogICAgIHJldHVy
biB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFi
bGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVk
IHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlw
ZShBbnlyZWYpLCBvcmlnaW4oKSwKQEAgLTY5Miw3ICs3MTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRl
eCwgRXhwcgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFi
bGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
VGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVtaXQg
dGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1
MDY+LgogICAgIGF1dG8gc2hvdWxkVGhyb3cgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEND
YWxsVmFsdWU+KG1fcHJvYywgQjM6OkludDMyLCBvcmlnaW4oKSwKQEAgLTczMiw3ICs3NTMsNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRh
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmVzdWx0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBl
KEkzMiksIG9yaWdpbigpLAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oJm9wZXJh
dGlvbldhc21UYWJsZUdyb3csIEIzQ0NhbGxQdHJUYWcpKSwKQEAgLTc0MSw3ICs3NjIsNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgZmlsbCwgRXhwcgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBl
JiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVk
IHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwg
RXhwcmVzc2lvblR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlw
ZShJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZvcGVy
YXRpb25XYXNtVGFibGVGaWxsLCBCM0NDYWxsUHRyVGFnKSksCkBAIC0xMjAyLDEyICsxMjIzLDEy
IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29w
SW5kZXgpCiAKICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IHN0YWNrbWFwOwogICAgIGZvciAo
YXV0byYgbG9jYWwgOiBtX2xvY2FscykgewotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6Okdl
dCwgb3JpZ2luLCBsb2NhbCk7CisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2Nh
bCk7CiAgICAgICAgIHN0YWNrbWFwLmFwcGVuZChyZXN1bHQpOwogICAgIH0KICAgICBmb3IgKHVu
c2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CiAgICAgICAgIGF1dG8mIGV4cHJlc3Np
b25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrOwotICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IGV4cHJlc3Npb25T
dGFjaykKKyAgICAgICAgZm9yIChUeXBlZEV4cHJlc3Npb24gdmFsdWUgOiBleHByZXNzaW9uU3Rh
Y2spCiAgICAgICAgICAgICBzdGFja21hcC5hcHBlbmQodmFsdWUpOwogICAgIH0KIApAQCAtMTI2
NSwxMiArMTI4NiwxMiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbgogICAgIHsKICAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBlbmNs
b3NpbmdTdGFjay5hdChvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2
YWx1ZSA9IGVuY2xvc2luZ1N0YWNrLmF0KG9mZnNldCArIGkpOwogICAgICAgICAgICAgYXV0byog
dXBzaWxvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB2YWx1ZSk7CiAgICAgICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tp
XTsKICAgICAgICAgICAgIGJvZHktPmFwcGVuZChwaGkpOwogICAgICAgICAgICAgdXBzaWxvbi0+
c2V0UGhpKHBoaSk7Ci0gICAgICAgICAgICBuZXdTdGFjay5hcHBlbmQocGhpKTsKKyAgICAgICAg
ICAgIG5ld1N0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh2YWx1ZS50eXBlKCksIHBoaSk7CiAgICAg
ICAgIH0KICAgICAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CiAgICAgfQpAQCAt
MTMwMSw3ICsxMzIyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb24KICAgICAgICAgICAgIHVu
c2lnbmVkIGJsb2NrSW5kZXggPSAwOwogICAgICAgICAgICAgQjM6Okluc2VydGlvblNldCBpbnNl
cnRpb25TZXQobV9wcm9jKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eHByZXNzaW9uU3RhY2suc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvKiB2YWx1
ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsKKyAgICAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24g
dmFsdWUgPSBleHByZXNzaW9uU3RhY2tbaV07CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5p
c0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgKytpbmRleEluQnVmZmVyOwogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEzMjAsNyArMTM0MSw3IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ29uCiAgICAgICAgICAgICAgICAgQVNTRVJUKHNvdXJjZUJsb2NrLT5hdChi
bG9ja0luZGV4IC0gMSkgPT0gdmFsdWUpOwogCiAgICAgICAgICAgICAgICAgYXV0byogcGhpID0g
ZGF0YS5jb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksICB2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCkpOwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb25TdGFj
a1tpXSA9IHBoaTsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBUeXBlZEV4
cHJlc3Npb24geyB2YWx1ZS50eXBlKCksIHBoaSB9OwogICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwg
bG9hZEZyb21TY3JhdGNoQnVmZmVyKHZhbHVlLT50eXBlKCkpLCBwaGkpOwogCiAgICAgICAgICAg
ICAgICAgYXV0byogc291cmNlVXBzaWxvbiA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1
ZS0+b3JpZ2luKCksIHZhbHVlLCBwaGkpOwpAQCAtMTM0OCw3ICsxMzY5LDcgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ28KIHsKICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2Mu
YWRkQmxvY2soKTsKIAotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xv
c2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5l
d1N0YWNrKTsKICAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNp
Z25hdHVyZSwgQmxvY2tUeXBlOjpCbG9jaywgY29udGludWF0aW9uKTsKICAgICByZXR1cm4geyB9
OwogfQpAQCAtMTM2Nyw3ICsxMzg4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3QKICAgICBu
b3RUYWtlbi0+YWRkUHJlZGVjZXNzb3IobV9jdXJyZW50QmxvY2spOwogCiAgICAgbV9jdXJyZW50
QmxvY2sgPSB0YWtlbjsKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNs
b3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBu
ZXdTdGFjayk7CiAgICAgcmVzdWx0ID0gQ29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2ln
bmF0dXJlLCBCbG9ja1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKICAgICByZXR1
cm4geyB9OwogfQpAQCAtMTM4Nyw3ICsxNDA4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRF
bHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlh
bFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEm
LCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2Fs
bEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJ
bmZvcm1hdGlvbkZvcihtX3BhcnNlci0+c2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwog
CkBAIC0xNDU4LDcgKzE0NzksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRy
b2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcgogewogICAgIENv
bnRyb2xEYXRhJiBkYXRhID0gZW50cnkuY29udHJvbERhdGE7CiAKLSAgICBBU1NFUlQoZXhwcmVz
c2lvblN0YWNrLnNpemUoKSA9PSBkYXRhLnNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAg
QVNTRVJUKGV4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJu
Q291bnQoKSk7CiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpMb29wKQog
ICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucGhpcyk7
CiAKQEAgLTE0NzksMTcgKzE1MDAsMjAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKICAgICB9
CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApIHsKLSAgICAg
ICAgZm9yIChWYWx1ZSogcmVzdWx0IDogZGF0YS5waGlzKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAg
ICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBkYXRhLnBoaXNbaV07CiAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1
cm5UeXBlKGkpLCByZXN1bHQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9v
dXRlckxvb3BzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRhdGEuc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgewog
ICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpKQogICAgICAgICAgICAg
ICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChleHByZXNzaW9uU3RhY2tb
aV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrLmFwcGVuZChjb25zdGFudCh0b0IzVHlwZShkYXRhLnNpZ25hdHVyZS0+cmV0
dXJuVHlwZShpKSksIDB4YmJhZGJlZWYpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9IGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7
CisgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0
QW5kQXBwZW5kKHJldHVyblR5cGUsIGNvbnN0YW50KHRvQjNUeXBlKHJldHVyblR5cGUpLCAweGJi
YWRiZWVmKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4MjcsMTQg
KzE4NTEsMTQgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25z
dCBTdGFjayYgcmVzdWx0U3RhY2ssIGNvbnN0IFJlc3VsdEwKICAgICAgICAgdW5pZnkocmVzdWx0
W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0sIHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNpemUo
KSAtIDEgLSBpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3Qg
Q29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3Qm
IGV4cHJlc3Npb25TdGFjaykKK3N0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3Qg
Q29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgQjNJUkdlbmVyYXRvcjo6U3RhY2smIGV4cHJlc3Np
b25TdGFjaykKIHsKICAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOwogICAg
IGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAg
ZGF0YUxvZyhjb21tYSwgKmV4cHJlc3Npb24pOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sq
IGV4cHJlc3Npb25TdGFjaykKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBDb250cm9s
U3RhY2smIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjaykKIHsKICAg
ICBkYXRhTG9nTG4oIkNvbnN0YW50czoiKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnN0YW50
IDogbV9jb25zdGFudFBvb2wpCkBAIC0xODYyLDcgKzE4ODYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihv
cmlnaW4pOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21w
aWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZv
ck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9u
Q29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29t
cGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhG
b3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1h
a2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApAQCAtMTg4Niw3ICsxOTEwLDcgQEAgRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZShDb21waWxhdGlvbkMKICAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUIz
T3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0
aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8s
IHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4
LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAg
IEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCks
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2Rl
LCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0
aWVyVXApOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVy
YXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1
cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApp
bmRleCBlYTU1MDI0MDE4ZDMwZDM4ZmYxZWE3YTdhYmYxYzE2NWJjZjU2N2Y4Li5kMmY4ODFlMWU0
MTI3MzNlODI2ZDliMTQ3ZmNlZjdjMDFiOTY0NTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IENv
bXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1
Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9u
TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50
cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIp
OworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25l
ZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBN
ZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQz
Ml90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCmluZGV4IGFhYzVhOGMyNjUyZTM2MzAxMGRjODFjNzJmM2NkMDY0NGM1Mjlj
YWUuLjE0YTBhZjI4NDJkZmU0ZWQ3NjgwZGI2MDJjOTkwZmVlMDFiYmJjNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5j
bHVkZSAiSlNUb1dhc20uaCIKICNpbmNsdWRlICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCkBAIC01
NCw3ICs1NSw3IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAK
IEJCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiBtb2R1bGVJbmZvcm1hdGlvbiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvbXBsZXRpb25UYXNrJiYgY29tcGxldGlvblRhc2spCi0gICAgOiBFbnRyeVBs
YW4oY29udGV4dCwgV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbiksIFdURk1vdmUoY29tcGxldGlv
blRhc2spKQorICAgIDogRW50cnlQbGFuKGNvbnRleHQsIFdURk1vdmUobW9kdWxlSW5mb3JtYXRp
b24pLCBBc3luY1dvcms6OkZ1bGxDb21waWxlLCBXVEZNb3ZlKGNvbXBsZXRpb25UYXNrKSkKICAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlv
bkluZGV4KQogewpAQCAtNzksNyArODAsMjMgQEAgYm9vbCBCQlFQbGFuOjpwcmVwYXJlSW1wbCgp
CiB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGlm
ICghbV9jb2RlQmxvY2spIHsKLSAgICAgICAgQmFzZTo6d29yayhlZmZvcnQpOworICAgICAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDoKKyAgICAgICAg
ICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKKyAgICAgICAgICAgIGlmICghaGFzV29yaygp
KSB7CisgICAgICAgICAgICAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICAgICAgY2FzZSBTdGF0ZTo6VmFsaWRhdGVkOgorICAgICAgICAgICAgcHJlcGFyZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOgorICAgICAg
ICAgICAgY29tcGlsZUZ1bmN0aW9ucyhlZmZvcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMTUsNyArMTMyLDcgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlv
bkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIExMSW50
Q2FsbGVlJiBsbGludENhbGxlZSA9ICptX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XTsKKyAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29k
ZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9s
b2NrKTsKICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5
UmVmKCkpOwogICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKQEAgLTE1MywxMCArMTcwLDExIEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29k
ZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKLSAg
ICAgICAgICAgIGlmIChMTEludENhbGxlZSogbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9s
bGludENhbGxlZXNbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiBy
ZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAgICAgICAgICAgICAgIExM
SW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1tpXS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9
IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hD
YWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRD
YWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKCkp
CiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRv
V2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChCQlFDYWxs
ZWUqIGJicUNhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbaV0uZ2V0KCkpIHsKQEAg
LTE5MSw3ICsyMDksNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBm
dW5jdGlvbkluZGV4KQogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAg
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAg
ICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2Fz
bUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVkZGVyV3Jh
cHBlcigqbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLmVtYmVkZGVyRW50cnlw
b2ludEpJVCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25z
LmFkZChmdW5jdGlvbkluZGV4LCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoKm1fY29tcGlsYXRpb25D
b250ZXh0c1tmdW5jdGlvbkluZGV4XS5lbWJlZGRlckVudHJ5cG9pbnRKSVQsIHNpZ25hdHVyZSwg
Jm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOwogICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KIH0KQEAgLTIxNSw5ICsyMzMs
OSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1
bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVl
OwogCiAgICAgaWYgKCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkK
LSAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNvbnRl
eHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJv
d1dhc21FeGNlcHRpb24pOworICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFu
ZENvbXBpbGVBaXIoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRl
eCwgdGllclVwKTsKICAgICBlbHNlCi0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBh
cnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgs
IFVJTlQzMl9NQVgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICBwYXJz
ZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNp
Z25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXApOwogCiAgICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKQEAgLTI4MywyMSArMzAxLDQxIEBAIHZvaWQgQkJRUGxhbjo6aW5p
dGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6ZXImIGNhbGxiYWNrKQogICAgIEFT
U0VSVCghZmFpbGVkKCkpOwogICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4
ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6
ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNtOjpD
YWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKKyAgICAgICAgUmVmUHRyPEVtYmVkZGVy
RW50cnlwb2ludENhbGxlZT4gZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogICAgICAgICBpZiAo
YXV0byBlbWJlZGRlclRvV2FzbUZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVu
Y3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICBlbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKKyAgICAgICAg
ICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6
Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVu
Y3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIEludGVybmFsRnVu
Y3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlv
bkluZGV4XS5nZXQoKTsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVy
bmFsRnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291
bnQoKTsKLSAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBX
YXNtOjpCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlv
bkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0
aW9uSW5kZXhdKSk7CisgICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVl
ID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25J
bmRleF0pLCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlv
bkluZGV4XSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rp
b24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2lu
dENhbGxlZS5wdHIoKSkpOwogCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRl
eCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBv
aW50Q2FsbGVlKSk7CiAgICAgfQogfQogCitib29sIEJCUVBsYW46OmRpZFJlY2VpdmVGdW5jdGlv
bkRhdGEodW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlv
bikKK3sKKyAgICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUHJv
Y2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgZnVuY3Rpb24uc3RhcnQsICIgYW5kIGVu
ZGluZyBhdDogIiwgZnVuY3Rpb24uZW5kKTsKKyAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBm
dW5jdGlvbi5lbmQgLSBmdW5jdGlvbi5zdGFydDsKKyAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGgg
PT0gZnVuY3Rpb24uZGF0YS5zaXplKCkpOworICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXNbZnVuY3Rpb25JbmRleF07CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKworICAgIGF1dG8gdmFsaWRh
dGlvblJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSk7CisgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CisgICAg
ICAgIGlmIChXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24uZGF0
YVtpXSkpLCAiLCAiKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAg
ICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVy
cm9yKCksICIsIGluIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9u
SW5kZXgpKSk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhbiBFeHBlY3RlZC4KKyAgICB9CisgICAgcmV0
dXJuICEhdmFsaWRhdGlvblJlc3VsdDsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5oCmluZGV4IGYyMmUxODk2NDcyN2FmM2U1ZTgwNGZlODUzNzhhMTBjOWVm
MDQ3YWQuLjVlMmRmZGZmYzYzMDFhNTYyNzQwY2ZjYzJlNzQxZDRmMzYzYmY4MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtNDQsNyArNDQsOSBAQCBjbGFz
cyBDYWxsTGlua0luZm87CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgQkJRQ2FsbGVlOwog
Y2xhc3MgQ29kZUJsb2NrOworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogCiBjbGFz
cyBCQlFQbGFuIGZpbmFsIDogcHVibGljIEVudHJ5UGxhbiB7CiBwdWJsaWM6CkBAIC01NCw4ICs1
NiwyNCBAQCBwdWJsaWM6CiAKICAgICBCQlFQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb2RlQmxvY2sqLCBDb21wbGV0aW9uVGFz
ayYmKTsKIAorICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAobV9hc3luY1dvcmsgPT0gQXN5bmNXb3JrOjpWYWxpZGF0aW9uKQorICAgICAgICAgICAg
cmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6VmFsaWRhdGVkOworICAgICAgICByZXR1cm4gbV9zdGF0
ZSA8IFN0YXRlOjpDb21waWxlZDsKKyAgICB9CisKICAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25F
ZmZvcnQpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVl
SW5pdGlhbGl6ZXImKSBvdmVycmlkZTsKKworICAgIHVzaW5nIENhbGxlZUluaXRpYWxpemVyID0g
RnVuY3Rpb248dm9pZCh1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4m
JiwgUmVmPEJCUUNhbGxlZT4mJik+OworICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3Qg
Q2FsbGVlSW5pdGlhbGl6ZXImKTsKKworICAgIGJvb2wgZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1
bnNpZ25lZCwgY29uc3QgRnVuY3Rpb25EYXRhJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHBhcnNl
QW5kVmFsaWRhdGVNb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2U6OnBhcnNlQW5k
VmFsaWRhdGVNb2R1bGUobV9zb3VyY2UuZGF0YSgpLCBtX3NvdXJjZS5zaXplKCkpOworICAgIH0K
IAogcHJvdGVjdGVkOgogICAgIGJvb2wgcHJlcGFyZUltcGwoKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggNDAyZTcwYmQ4NGEx
ZjA2ZjE5NjQyMDc5YmIwNmIzYzU1ODM0ZjIxYS4uMTM0ZGE3ZGUwYjNlOTc1NTc0MTZkYzQzMTk1
YmNhZGZlZmU5MjI0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5jcHAKQEAgLTM2LDU4ICszNiw3MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCi1SZWY8Q29kZUJsb2NrPiBDb2RlQmxvY2s6OmNyZWF0ZShDb250ZXh0KiBjb250
ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlv
biwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dh
c21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2Nr
OjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1h
dGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIGxsaW50Q2Fs
bGVlcykKIHsKLSAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6
ZW9mKENvZGVCbG9jaykpKSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRp
b24sIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsK
KyAgICBhdXRvKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKENvZGVC
bG9jaykpKSBDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIGxsaW50
Q2FsbGVlcyk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpyZXN1bHQpOwogfQogCi1Db2RlQmxvY2s6
OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRl
RW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQor
Q29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIGNvbnN0IFJlZjxMTEludENhbGxl
ZT4qIGxsaW50Q2FsbGVlcykKICAgICA6IG1fY2FsbGVlQ291bnQobW9kdWxlSW5mb3JtYXRpb24u
aW50ZXJuYWxGdW5jdGlvbkNvdW50KCkpCiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fbGxp
bnRDYWxsZWVzKGxsaW50Q2FsbGVlcykKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0
ZWRUaGlzID0gdGhpczsKIAotICAgIGF1dG8gdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6
Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldIChQbGFuJikgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0g
ICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgICAgICBzZXRDb21waWxhdGlvbkZp
bmlzaGVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCi0gICAgICAg
IG1fbGxpbnRDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgbV9iYnFDYWxs
ZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKLSAgICAgICAgbV9vbWdDYWxsZWVzLnJlc2l6ZSht
X2NhbGxlZUNvdW50KTsKLSAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMucmVz
aXplKG1fY2FsbGVlQ291bnQpOwotCi0gICAgICAgIG1fcGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMo
WyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPENhbGxlZT4mJiBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUsIFJlZlB0cjxDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnQpIHsKLSAgICAgICAg
ICAgIGlmIChlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fZW1iZWRkZXJDYWxsZWVzLnNldChjYWxsZWVJbmRleCwgV1RGTW92ZShlbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQo
KSkgeworICAgICAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBt
YWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgbV9sbGludENhbGxlZXMsIGNyZWF0ZVNoYXJlZFRh
c2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7CisgICAgICAg
ICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW2NhbGxlZUluZGV4XSA9IHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCk7CiAKLSAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkKLSAgICAgICAgICAgICAgICBtX2xs
aW50Q2FsbGVlc1tjYWxsZWVJbmRleF0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxMTEludENhbGxl
ZSo+KHdhc21FbnRyeXBvaW50LmxlYWtSZWYoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0gPSBhZG9wdFJlZihzdGF0aWNfY2Fz
dDxCQlFDYWxsZWUqPih3YXNtRW50cnlwb2ludC5sZWFrUmVmKCkpKTsKLSAgICAgICAgfSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJR
IGNvZGUuCisgICAgICAgICAgICBtX2JicUNhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwor
ICAgICAgICAgICAgbV9vbWdDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAgICAg
ICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbGVlQ291bnQ7ICsr
aSkKKyAgICAgICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tpXSA9IG1f
bGxpbnRDYWxsZWVzW2ldLT5lbnRyeXBvaW50KCk7CisKKyAgICAgICAgICAgIG1fd2FzbVRvV2Fz
bUV4aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKKyAgICAgICAg
ICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0
ZXMoKTsKKyAgICAgICAgICAgIG1fZW1iZWRkZXJDYWxsZWVzID0gc3RhdGljX2Nhc3Q8TExJbnRQ
bGFuKj4obV9wbGFuLmdldCgpKS0+dGFrZUVtYmVkZGVyQ2FsbGVlcygpOwogCi0gICAgICAgIG1f
d2FzbVRvV2FzbUV4aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsK
LSAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNh
bGxzaXRlcygpOworICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAg
ICB9KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJR
UGxhbihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxs
Q29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9wbGFu
LT5mYWlsZWQoKSkgeworICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5l
cnJvck1lc3NhZ2UoKTsKKyAgICAgICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgIGlmIChP
cHRpb25zOjp1c2VXYXNtTExJbnQoKSkKLSAgICAgICAgICAgIG1fbGxpbnRFbnRyeVRodW5rcyA9
IGJpdHdpc2VfY2FzdDxMTEludFBsYW4qPihtX3BsYW4uZ2V0KCkpLT50YWtlRW50cnlUaHVua3Mo
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZXZlbnR1YWxseSBjb2xsZWN0IHRo
ZSBCQlEgY29kZS4KKyAgICAgICAgICAgIG1fYmJxQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3Vu
dCk7CisgICAgICAgICAgICBtX29tZ0NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAg
ICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMucmVzaXplKG1fY2FsbGVlQ291
bnQpOworCisgICAgICAgICAgICBCQlFQbGFuKiBiYnFQbGFuID0gc3RhdGljX2Nhc3Q8QkJRUGxh
bio+KG1fcGxhbi5nZXQoKSk7CisgICAgICAgICAgICBiYnFQbGFuLT5pbml0aWFsaXplQ2FsbGVl
cyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlPiYmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgUmVmUHRyPEJCUUNhbGxlZT4mJiB3YXNt
RW50cnlwb2ludCkgeworICAgICAgICAgICAgICAgIGlmIChlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVl
cy5zZXQoY2FsbGVlSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2Fs
bEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCk7
CisgICAgICAgICAgICAgICAgbV9iYnFDYWxsZWVzW2NhbGxlZUluZGV4XSA9IGFkb3B0UmVmKHN0
YXRpY19jYXN0PEJCUUNhbGxlZSo+KHdhc21FbnRyeXBvaW50LmxlYWtSZWYoKSkpOworICAgICAg
ICAgICAgfSk7CiAKLSAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwotICAgIH0pOwor
ICAgICAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2FzbVRvV2Fz
bUV4aXRTdHVicygpOworICAgICAgICAgICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFu
LT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZVdhc21M
TEludCgpKQotICAgICAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0
LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29tcGlsZSwgV1RG
TW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNl
cHRpb24pKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxh
bihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29t
cGlsZSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJv
d1dhc21FeGNlcHRpb24pKTsKKyAgICAgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsK
KyAgICAgICAgfSkpKTsKKyAgICB9CiAgICAgbV9wbGFuLT5zZXRNb2RlKG1vZGUpOwogCiAgICAg
YXV0byYgd29ya2xpc3QgPSBXYXNtOjplbnN1cmVXb3JrbGlzdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IDJiZmMxYjI2MDYxNzAyYTc3OTA1MmFk
Yzk3OWM4YjgxOTJmNmM0OTguLjAxNTQ3ZmQ1M2MyZWI5YWZjNzYxYjRmNGEyNTNiNjBmYTM0ZjM1
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2su
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTUz
LDcgKzUzLDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PENvZGVCbG9jaz4gewogcHVibGljOgogICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVm
PENvZGVCbG9jaz4mJik7CiAgICAgdXNpbmcgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVm
UHRyPFdURjo6U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVC
bG9jaz4gY3JlYXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIHN0YXRpYyBS
ZWY8Q29kZUJsb2NrPiBjcmVhdGUoQ29udGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0
aW9uJiwgY29uc3QgUmVmPExMSW50Q2FsbGVlPiopOwogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5p
c2hlZCgpOwogICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9u
Q2FsbGJhY2smJik7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biAqbV9vbWdDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICAgICAgaWYgKG1fYmJxQ2Fs
bGVlc1tjYWxsZWVJbmRleF0pCiAgICAgICAgICAgICByZXR1cm4gKm1fYmJxQ2FsbGVlc1tjYWxs
ZWVJbmRleF0uZ2V0KCk7Ci0gICAgICAgIHJldHVybiAqbV9sbGludENhbGxlZXNbY2FsbGVlSW5k
ZXhdLmdldCgpOworICAgICAgICByZXR1cm4gbV9sbGludENhbGxlZXNbY2FsbGVlSW5kZXhdLmdl
dCgpOwogICAgIH0KIAogICAgIEJCUUNhbGxlZSYgd2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQpAQCAtMTI4LDE1ICsxMjgsMTQg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKICAgICBmcmllbmQgY2xhc3Mg
T01HRm9yT1NSRW50cnlQbGFuOwogCi0gICAgQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2Rl
LCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21F
eGNlcHRpb24pOworICAgIENvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5m
b3JtYXRpb24mLCBjb25zdCBSZWY8TExJbnRDYWxsZWU+Kik7CiAgICAgdm9pZCBzZXRDb21waWxh
dGlvbkZpbmlzaGVkKCk7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKICAgICBNZW1vcnlN
b2RlIG1fbW9kZTsKICAgICBWZWN0b3I8UmVmUHRyPE9NR0NhbGxlZT4+IG1fb21nQ2FsbGVlczsK
ICAgICBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+IG1fYmJxQ2FsbGVlczsKLSAgICBWZWN0b3I8
UmVmUHRyPExMSW50Q2FsbGVlPj4gbV9sbGludENhbGxlZXM7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IG1fbGxpbnRFbnRyeVRodW5rczsKLSAgICBIYXNo
TWFwPHVpbnQzMl90LCBSZWZQdHI8Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMy
X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4g
bV9lbWJlZGRlckNhbGxlZXM7CisgICAgY29uc3QgUmVmPExMSW50Q2FsbGVlPiogbV9sbGludENh
bGxlZXM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENh
bGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwogICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5k
aXJlY3RDYWxsRW50cnlQb2ludHM7CiAgICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcAppbmRleCA1ZDM0NzJiNGFm
NTdlNGQyZTgyMjdlNzM3ODY4NTMxN2MyMTkzYTg5Li43N2QwM2QzMGI2ODJjYTZiYTNkYTBmNDg1
OWRhMjlmZTE2MWQ2NDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50
cnlQbGFuLmNwcApAQCAtNDcsMzMgKzQ3LDE3IEBAIG5hbWVzcGFjZSBXYXNtRW50cnlQbGFuSW50
ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1FbnRyeVBs
YW46OkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGlu
Zm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKLSAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pCitFbnRyeVBsYW46OkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5m
b3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisg
ICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzaykpCiAgICAgLCBt
X3N0cmVhbWluZ1BhcnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKICAgICAs
IG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiB9
CiAKLUVudHJ5UGxhbjo6RW50cnlQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90
PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgIDogQmFzZShjb250ZXh0LCBNb2R1bGVJbmZvcm1h
dGlvbjo6Y3JlYXRlKCksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFw
cGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQotICAgICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2Up
KQotICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgKnRo
aXMpCi0gICAgLCBtX3N0YXRlKFN0YXRlOjpJbml0aWFsKQotICAgICwgbV9hc3luY1dvcmsod29y
aykKLXsKLX0KLQotRW50cnlQbGFuOjpFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1v
ZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiwgQ29tcGxldGlvblRhc2smJiB0YXNr
KQotICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSwgV1RGTW92
ZSh0YXNrKSkKLSAgICAsIG1fc3RyZWFtaW5nUGFyc2VyKG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksICp0aGlzKQotICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlhbCkKLSAgICAsIG1fYXN5bmNX
b3JrKEFzeW5jV29yazo6RnVsbENvbXBpbGUpCi17Ci19Ci0KLUVudHJ5UGxhbjo6RW50cnlQbGFu
KENvbnRleHQqIGNvbnRleHQsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
CitFbnRyeVBsYW46OkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4m
JiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBC
YXNlKGNvbnRleHQsIFdURk1vdmUodGFzaykpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiAgICAgLCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAq
dGhpcykKICAgICAsIG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3
b3JrKQpAQCAtOTksMjYgKzgzLDYgQEAgdm9pZCBFbnRyeVBsYW46Om1vdmVUb1N0YXRlKFN0YXRl
IHN0YXRlKQogICAgIG1fc3RhdGUgPSBzdGF0ZTsKIH0KIAotYm9vbCBFbnRyeVBsYW46OmRpZFJl
Y2VpdmVGdW5jdGlvbkRhdGEodW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgRnVuY3Rpb25E
YXRhJiBmdW5jdGlvbikKLXsKLSAgICBkYXRhTG9nTG5JZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6
OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbi5z
dGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBmdW5jdGlvbi5lbmQpOwotICAgIHNpemVfdCBmdW5j
dGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVuZCAtIGZ1bmN0aW9uLnN0YXJ0OwotICAgIEFTU0VSVChm
dW5jdGlvbkxlbmd0aCA9PSBmdW5jdGlvbi5kYXRhLnNpemUoKSk7Ci0gICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotCi0g
ICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2ln
bmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKTsKLSAgICBpZiAoIXZhbGlkYXRpb25S
ZXN1bHQpIHsKLSAgICAgICAgaWYgKFdhc21FbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSkgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oKTsK
LSAgICAgICAgfQotICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFs
aWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6
Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQu
Ci0gICAgfQotICAgIHJldHVybiAhIXZhbGlkYXRpb25SZXN1bHQ7Ci19Ci0KIGJvb2wgRW50cnlQ
bGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90
IHNvdXJjZUxlbmd0aCkKIHsKICAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKQEAg
LTE0NSw4ICsxMDksNiBAQCBib29sIEVudHJ5UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShj
b25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndAogICAgICAgICBkYXRhTG9n
TG4oIlRvb2sgIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWNyb3NlY29u
ZHMoKSwgIiB1cyB0byB2YWxpZGF0ZSBtb2R1bGUiKTsKIAogICAgIG1vdmVUb1N0YXRlKFN0YXRl
OjpWYWxpZGF0ZWQpOwotICAgIGlmIChtX2FzeW5jV29yayA9PSBWYWxpZGF0aW9uKQotICAgICAg
ICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTU2LDYgKzExOCw3IEBAIHZvaWQgRW50cnlQbGFuOjpwcmVwYXJlKCkKICAgICBkYXRhTG9nTG5J
ZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIp
OwogCiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVu
Y3Rpb25zOworICAgIG1fbnVtYmVyT2ZGdW5jdGlvbnMgPSBmdW5jdGlvbnMuc2l6ZSgpOwogICAg
IGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJB
c3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKICAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBh
Y2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlu
a2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikpCiAgICAgICAgIHJldHVybjsK
QEAgLTIyMywyMCArMTg2LDYgQEAgcHVibGljOgogICAgIEVudHJ5UGxhbiYgbV9wbGFuOwogfTsK
IAotdm9pZCBFbnRyeVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIp
Ci17Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudElu
ZGV4ID49IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCkpOwotICAgIGRhdGFM
b2dMbklmKFdhc21FbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRp
b24iKTsKLQotICAgIGlmICghZmFpbGVkKCkgJiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQp
Ci0gICAgICAgIGRpZENvbXBsZXRlQ29tcGlsYXRpb24obG9ja2VyKTsKLQotICAgIGlmICghaXND
b21wbGV0ZSgpKSB7Ci0gICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOwotICAg
ICAgICBydW5Db21wbGV0aW9uVGFza3MobG9ja2VyKTsKLSAgICB9Ci19Ci0KIAogdm9pZCBFbnRy
eVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewpAQCAt
MjUyLDcgKzIwMSw2IEBAIHZvaWQgRW50cnlQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKICAgICBUaHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMpOwog
CiAgICAgc2l6ZV90IGJ5dGVzQ29tcGlsZWQgPSAwOwotICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9u
cyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICBpZiAoZWZmb3J0ID09IFBhcnRpYWwgJiYgYnl0ZXNDb21waWxlZCA+PSBPcHRpb25z
Ojp3ZWJBc3NlbWJseVBhcnRpYWxDb21waWxlTGltaXQoKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTI2MCw3ICsyMDgsNyBAQCB2b2lkIEVudHJ5UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAg
ICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9udW1iZXJPZkZ1bmN0aW9ucykgewogICAg
ICAgICAgICAgICAgIGlmIChoYXNXb3JrKCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVUb1N0
YXRlKFN0YXRlOjpDb21waWxlZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjcwLDMx
ICsyMTgsMjUgQEAgdm9pZCBFbnRyeVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQogICAgICAgICB9CiAKICAgICAgICAgY29tcGlsZUZ1bmN0aW9uKGZ1bmN0
aW9uSW5kZXgpOwotICAgICAgICBieXRlc0NvbXBpbGVkICs9IGZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS5kYXRhLnNpemUoKTsKKyAgICAgICAgYnl0ZXNDb21waWxlZCArPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZGF0YS5zaXplKCk7CiAgICAgfQogfQog
Ci12b2lkIEVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCit2b2lkIEVu
dHJ5UGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIFN0YXRlOjpJbml0aWFsOgotICAgICAgICBwYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKLSAg
ICAgICAgaWYgKCFoYXNXb3JrKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0NvbXBsZXRlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0g
ICAgY2FzZSBTdGF0ZTo6VmFsaWRhdGVkOgotICAgICAgICBwcmVwYXJlKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOgotICAgICAgICBjb21waWxlRnVuY3Rpb25z
KGVmZm9ydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwor
ICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+
PSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBkYXRhTG9nTG5J
ZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7
CisKKyAgICBpZiAoIWZhaWxlZCgpICYmIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKQorICAg
ICAgICBkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGxvY2tlcik7CisKKyAgICBpZiAoIWlzQ29tcGxl
dGUoKSkgeworICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKKyAgICAgICAg
cnVuQ29tcGxldGlvblRhc2tzKGxvY2tlcik7CiAgICAgfQogfQogCisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmgKaW5kZXggMjQ4MzYyOGJjY2Q1MzAwMGE5
ZDZiYTA1NTU3NDYwNTdhMjU1OTA4Zi4uYjQ5ZGMyYjE1OTEyZGU5NjZjZDg4NmE2NDc0OGYwMWJj
N2MyZjQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5
UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbnRyeVBsYW4uaApA
QCAtNDcsMzYgKzQ3LDE1IEBAIHB1YmxpYzoKICAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3Qg
eyBGdWxsQ29tcGlsZSwgVmFsaWRhdGlvbiB9OwogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRh
c2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVy
ZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIEVudHJ5UGxhbihDb250ZXh0KiwgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVF
bWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBFbnRyeVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENv
bXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRp
b24pOwotICAgIEVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29t
cGxldGlvblRhc2smJik7Ci0gICAgRW50cnlQbGFuKENvbnRleHQqLCBBc3luY1dvcmssIENvbXBs
ZXRpb25UYXNrJiYpOworICAgIEVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0
aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBFbnRyeVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBs
ZXRpb25UYXNrJiYpOwogCiAgICAgdmlydHVhbCB+RW50cnlQbGFuKCkgPSBkZWZhdWx0OwogCi0g
ICAgdXNpbmcgQ2FsbGVlSW5pdGlhbGl6ZXIgPSBGdW5jdGlvbjx2b2lkKHVpbnQzMl90LCBSZWZQ
dHI8Q2FsbGVlPiYmLCBSZWY8Q2FsbGVlPiYmKT47Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxp
emVDYWxsZWVzKGNvbnN0IENhbGxlZUluaXRpYWxpemVyJikgPSAwOwotCi0gICAgYm9vbCBwYXJz
ZUFuZFZhbGlkYXRlTW9kdWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKLSAgICB9Ci0gICAg
Ym9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAg
IHZvaWQgcHJlcGFyZSgpOwogCiAgICAgdm9pZCBjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9u
RWZmb3J0KTsKIAotICAgIFZlY3RvcjxFeHBvcnQ+JiBleHBvcnRzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAg
cmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7Ci0gICAgfQotCi0gICAgc2l6ZV90
IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uQ291bnQoKTsKLSAgICB9Ci0KICAgICBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+JiYgdGFrZU1vZHVsZUluZm9ybWF0aW9uKCkKICAgICB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKQEAgLTEwMywzOSArODIs
MjcgQEAgcHVibGljOgogICAgICAgICBDb21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0
byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhvbGRpbmcgdGhlIGxvY2suCiAgICAgfTsKIAotICAgIGJv
b2wgaGFzV29yaygpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAobV9hc3luY1dv
cmsgPT0gQXN5bmNXb3JrOjpWYWxpZGF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGUg
PCBTdGF0ZTo6VmFsaWRhdGVkOwotICAgICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpDb21w
aWxlZDsKLSAgICB9Ci0KLSAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92ZXJyaWRl
OwotICAgIGJvb2wgaGFzQmVlblByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBT
dGF0ZTo6UHJlcGFyZWQ7IH0KLSAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBoYXNCZWVuUHJlcGFyZWQoKTsgfQotCi0gICAgYm9vbCBkaWRSZWNlaXZlRnVu
Y3Rpb25EYXRhKHVuc2lnbmVkLCBjb25zdCBGdW5jdGlvbkRhdGEmKSBvdmVycmlkZTsKKyAgICBi
b29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID49IFN0
YXRlOjpQcmVwYXJlZDsgfQogCiBwcml2YXRlOgogICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVy
OwogICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKIAotICAgIHZvaWQgcHJlcGFy
ZSgpOwotICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU3RhdGU6OkNvbXBsZXRlZDsgfQotICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKSBvdmVycmlkZTsKLQotICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRl
KTsKLQogcHJvdGVjdGVkOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNu
J3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCiAgICAgdXNpbmcgQmFzZTo6bV9sb2NrOwog
CisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Qp
OworCisgICAgY29uc3QgY2hhciogc3RhdGVTdHJpbmcoU3RhdGUpOworICAgIHZvaWQgbW92ZVRv
U3RhdGUoU3RhdGUpOworICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZDsgfQorICAgIHZvaWQgY29tcGxldGUoY29u
c3QgQWJzdHJhY3RMb2NrZXImKSBvdmVycmlkZTsKKwogICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJl
SW1wbCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVDb21waWxhdGlv
bihjb25zdCBBYnN0cmFjdExvY2tlciYpID0gMDsKIAotICAgIHZvaWQgbW92ZVRvU3RhdGUoU3Rh
dGUpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBib29sIHRyeVJlc2VydmVDYXBh
Y2l0eShWZWN0b3I8VD4mIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpCiAg
ICAgewpAQCAtMTU3LDYgKzEyNCw3IEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBBc3luY1dvcmsg
bV9hc3luY1dvcms7CiAgICAgdWludDhfdCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsK
ICAgICB1aW50MzJfdCBtX2N1cnJlbnRJbmRleCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX251bWJl
ck9mRnVuY3Rpb25zIHsgMCB9OwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCmluZGV4IGNjZmExODU0MzU0OTk5ZjgyYThhYTQyOGU4
ZDQ4ZTVjNDFmNDc4N2QuLmQyMTQwOTc0MWMzZWY2YTAzMzM1MzQ2OGIxNDIwNGRjZmY1YmM5Yjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5o
CkBAIC00MCwzMSArNDAsNTAgQEAgZW51bSBjbGFzcyBCbG9ja1R5cGUgewogICAgIFRvcExldmVs
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdGFjaz4KLVN0YWNrIHNwbGl0U3RhY2soQmxvY2tT
aWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgc3RhY2spCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNs
b3NpbmdTdGFjaywgdHlwZW5hbWUgTmV3U3RhY2s+Cit2b2lkIHNwbGl0U3RhY2soQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBFbmNsb3NpbmdTdGFjayYgZW5jbG9zaW5nU3RhY2ssIE5ld1N0YWNr
JiBuZXdTdGFjaykKIHsKLSAgICBTdGFjayByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwotICAgIEFTU0VSVChzdGFj
ay5zaXplKCkgPj0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwotICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHN0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgIG5l
d1N0YWNrLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkp
OworICAgIEFTU0VSVChlbmNsb3NpbmdTdGFjay5zaXplKCkgPj0gc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAt
IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKHN0YWNrLmF0KGkgKyBvZmZzZXQpKTsKLSAgICBzdGFjay5zaHJpbmsob2Zmc2V0
KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBuZXdTdGFjay51bmNoZWNrZWRBcHBlbmQo
ZW5jbG9zaW5nU3RhY2suYXQoaSArIG9mZnNldCkpOworICAgIGVuY2xvc2luZ1N0YWNrLnNocmlu
ayhvZmZzZXQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogY2xhc3MgRnVuY3Rp
b25QYXJzZXIgOiBwdWJsaWMgUGFyc2VyPHZvaWQ+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBFeHBy
ZXNzaW9uVHlwZSA9IHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25UeXBlOworICAgIHN0cnVj
dCBDb250cm9sRW50cnk7CisKICAgICB1c2luZyBDb250cm9sVHlwZSA9IHR5cGVuYW1lIENvbnRl
eHQ6OkNvbnRyb2xUeXBlOwotICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gdHlwZW5hbWUgQ29u
dGV4dDo6RXhwcmVzc2lvbkxpc3Q7Ci0gICAgdXNpbmcgU3RhY2sgPSB0eXBlbmFtZSBDb250ZXh0
OjpTdGFjazsKLSAgICB1c2luZyBSZXN1bHRMaXN0ID0gdHlwZW5hbWUgQ29udGV4dDo6UmVzdWx0
TGlzdDsKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IHR5cGVuYW1lIENvbnRleHQ6OkV4cHJl
c3Npb25UeXBlOwogCi0gICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3Qq
IGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKKyAgICBjbGFzcyBUeXBlZEV4cHJlc3Npb24gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uKCkgPSBkZWZhdWx0OwogCi0gICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOworICAgICAgICBUeXBlZEV4cHJlc3Np
b24oVHlwZSB0eXBlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKKyAgICAgICAgICAgIDogbV90eXBl
KHR5cGUpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAg
ICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAg
ICAgICBvcGVyYXRvciBFeHByZXNzaW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
KworICAgICAgICBFeHByZXNzaW9uVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIEV4
cHJlc3Npb25UeXBlIG1fdmFsdWU7CisgICAgfTsKKworICAgIHVzaW5nIENvbnRyb2xTdGFjayA9
IFZlY3RvcjxDb250cm9sRW50cnksIDE2PjsKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9y
PEV4cHJlc3Npb25UeXBlLCA4PjsKKyAgICB1c2luZyBTdGFjayA9IFZlY3RvcjxUeXBlZEV4cHJl
c3Npb24sIDE2LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz47CiAKICAgICBzdHJ1Y3QgQ29udHJvbEVu
dHJ5IHsKICAgICAgICAgU3RhY2sgZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CkBAIC03MiwxMSAr
OTEsMTUgQEAgcHVibGljOgogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKICAgICB9
OwogCisgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9u
U3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mKTsKKworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2Uo
KTsKKwogICAgIE9wVHlwZSBjdXJyZW50T3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
T3Bjb2RlOyB9CiAgICAgc2l6ZV90IGN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0OyB9CiAgICAgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCi0gICAg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0
YWNrOyB9CisgICAgQ29udHJvbFN0YWNrJiBjb250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRy
b2xTdGFjazsgfQogICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2soKSB7IHJldHVybiBtX2V4cHJl
c3Npb25TdGFjazsgfQogCiBwcml2YXRlOgpAQCAtODYsNiArMTA5LDggQEAgcHJpdmF0ZToKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVz
c2lvbigpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJv
bChWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgdW5zaWduZWQgbGV2ZWwpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGNoZWNrQnJhbmNoVGFyZ2V0KGNvbnN0IENvbnRyb2xU
eXBlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnkoY29uc3Qg
Q29udHJvbFR5cGUmKTsKIAogI2RlZmluZSBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19J
TlRPKHJlc3VsdCwgd2hhdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAi
Y2FuJ3QgcG9wIGVtcHR5IHN0YWNrIGluICIgd2hhdCk7IFwKQEAgLTk0LDE4ICsxMTksMzggQEAg
cHJpdmF0ZToKICAgICB9IHdoaWxlICgwKQogCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuYXJ5Q2FzZSgpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuYXJ5Q2FzZShUeXBlIHJldHVyblR5cGUsIFR5cGUg
b3BlcmFuZFR5cGUpOwogCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGJpbmFyeUNhc2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBiaW5hcnlDYXNlKFR5cGUgcmV0dXJuVHlwZSwgVHlwZSBsaHNUeXBlLCBU
eXBlIHJoc1R5cGUpOworCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3Rv
cmUoVHlwZSBtZW1vcnlUeXBlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBsb2FkKFR5cGUgbWVtb3J5VHlwZSk7CiAKICNkZWZpbmUgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQoYWRkX2V4cHJlc3Npb24pIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMobV9jb250ZXh0LmFk
ZF9leHByZXNzaW9uKQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVW
RVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHZhbGlkYXRpb25G
YWlsKGNvbnN0IEFyZ3MmLi4uIGFyZ3MpIGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1l
c3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8gU2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4K
KyAgICAgICAgaWYgKFVOTElLRUxZKCFBU1NFUlRfRElTQUJMRUQgJiYgT3B0aW9uczo6Y3Jhc2hP
bkZhaWxlZFdlYkFzc2VtYmx5VmFsaWRhdGUoKSkpCisgICAgICAgICAgICBXVEZCcmVha3BvaW50
VHJhcCgpOworCisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgb3V0LnBy
aW50KCJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCB2YWxpZGF0ZTogIl9zLCBhcmdzLi4uKTsK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQob3V0LnRvU3RyaW5nKCkpOworICAgIH0K
KyNkZWZpbmUgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisg
ICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24pKSAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25GYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAg
ICBcCisgICAgfSB3aGlsZSAoMCkKKwogICAgIC8vIEZJWE1FIGFkZCBhIG1hY3JvIGFzIGFib3Zl
IGZvciBXQVNNX1RSWV9BUFBFTkRfVE9fQ09OVFJPTF9TVEFDSyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODYyCiAKICAgICBDb250ZXh0JiBtX2NvbnRleHQ7CiAg
ICAgU3RhY2sgbV9leHByZXNzaW9uU3RhY2s7Ci0gICAgVmVjdG9yPENvbnRyb2xFbnRyeT4gbV9j
b250cm9sU3RhY2s7CisgICAgQ29udHJvbFN0YWNrIG1fY29udHJvbFN0YWNrOworICAgIFZlY3Rv
cjxUeXBlLCAxNj4gbV9sb2NhbHM7CiAgICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsK
ICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogCkBAIC0xMzYsNiArMTgxLDEw
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZSks
ICJjYW4ndCBhZGQgIiwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyB0
byBGdW5jdGlvbiIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGxv
Y2FsR3JvdXBzQ291bnQpLCAiY2FuJ3QgZ2V0IGxvY2FsIGdyb3VwcyBjb3VudCIpOwogCisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBm
dW5jdGlvbidzICIsIG1fc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
OyArK2kpCisgICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFwcGVuZChtX3NpZ25hdHVyZS5hcmd1
bWVudChpKSk7CisKICAgICB1aW50NjRfdCB0b3RhbE51bWJlck9mTG9jYWxzID0gbV9zaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsb2NhbEdy
b3Vwc0NvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMb2NhbHM7CkBAIC0x
NDUsNiArMTk0LDExIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4g
UmVzdWx0CiAgICAgICAgIHRvdGFsTnVtYmVyT2ZMb2NhbHMgKz0gbnVtYmVyT2ZMb2NhbHM7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodG90YWxOdW1iZXJPZkxvY2FscyA+IG1heEZ1bmN0
aW9uTG9jYWxzLCAiRnVuY3Rpb24ncyBudW1iZXIgb2YgbG9jYWxzIGlzIHRvbyBiaWcgIiwgdG90
YWxOdW1iZXJPZkxvY2FscywgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9uTG9jYWxzKTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUodHlwZU9mTG9jYWwpLCAiY2Fu
J3QgZ2V0IEZ1bmN0aW9uIGxvY2FsJ3MgdHlwZSBpbiBncm91cCAiLCBpKTsKKworICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxOdW1i
ZXJPZkxvY2FscyksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBmdW5jdGlvbidz
ICIsIHRvdGFsTnVtYmVyT2ZMb2NhbHMsICIgbG9jYWxzIik7CisgICAgICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkxvY2FsczsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHMu
dW5jaGVja2VkQXBwZW5kKHR5cGVPZkxvY2FsKTsKKwogICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRMb2NhbCh0eXBlT2ZMb2NhbCwgbnVtYmVyT2ZMb2NhbHMpKTsKICAgICB9CiAK
QEAgLTE4NiwzMSArMjQwLDEwNCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJz
ZUJvZHkoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiB0
ZW1wbGF0ZTxPcFR5cGUgb3A+Ci1hdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlD
YXNlKCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6Ymlu
YXJ5Q2FzZShUeXBlIHJldHVyblR5cGUsIFR5cGUgbGhzVHlwZSwgVHlwZSByaHNUeXBlKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgRXhwcmVzc2lvblR5cGUgcmlnaHQ7Ci0gICAgRXhwcmVzc2lv
blR5cGUgbGVmdDsKLSAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgVHlwZWRFeHByZXNz
aW9uIHJpZ2h0OworICAgIFR5cGVkRXhwcmVzc2lvbiBsZWZ0OwogCiAgICAgV0FTTV9UUllfUE9Q
X0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyaWdodCwgImJpbmFyeSByaWdodCIpOwogICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8obGVmdCwgImJpbmFyeSBsZWZ0Iik7Ci0gICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCBy
ZXN1bHQpKTsKIAotICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYobGVmdC50eXBlKCkgIT0gbGhzVHlwZSwgb3AsICIgbGVmdCB2
YWx1ZSB0eXBlIG1pc21hdGNoIik7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihyaWdodC50
eXBlKCkgIT0gcmhzVHlwZSwgb3AsICIgcmlnaHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OworICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRl
bXBsYXRlIGFkZE9wPG9wPihsZWZ0LCByaWdodCwgcmVzdWx0KSk7CisgICAgbV9leHByZXNzaW9u
U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIHJlc3VsdCk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIHRlbXBsYXRlPE9wVHlwZSBv
cD4KLWF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZSgpIC0+IFBhcnRpYWxS
ZXN1bHQKK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuYXJ5Q2FzZShUeXBlIHJldHVy
blR5cGUsIFR5cGUgb3BlcmFuZFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNz
aW9uVHlwZSB2YWx1ZTsKLSAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0KKyAgICBUeXBlZEV4
cHJlc3Npb24gdmFsdWU7CiAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2
YWx1ZSwgInVuYXJ5Iik7CisKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVlLnR5cGUo
KSAhPSBvcGVyYW5kVHlwZSwgb3AsICIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisgICAgRXhw
cmVzc2lvblR5cGUgcmVzdWx0OwogICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRl
IGFkZE9wPG9wPih2YWx1ZSwgcmVzdWx0KSk7CisgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3Ry
dWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OmxvYWQoVHlwZSBtZW1vcnlUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRighbV9pbmZvLm1lbW9yeSwgImxvYWQgaW5zdHJ1Y3Rpb24gd2l0aG91dCBt
ZW1vcnkiKTsKKworICAgIHVpbnQzMl90IGFsaWdubWVudDsKKyAgICB1aW50MzJfdCBvZmZzZXQ7
CisgICAgVHlwZWRFeHByZXNzaW9uIHBvaW50ZXI7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBsb2FkIGFsaWdubWVudCIpOwor
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYWxpZ25tZW50ID4gbWVtb3J5TG9nMkFsaWdubWVudCht
X2N1cnJlbnRPcGNvZGUpLCAiYnl0ZSBhbGlnbm1lbnQgIiwgMXVsbCA8PCBhbGlnbm1lbnQsICIg
ZXhjZWVkcyBsb2FkJ3MgbmF0dXJhbCBhbGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cyQWxp
Z25tZW50KG1fY3VycmVudE9wY29kZSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsKKyAgICBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJsb2FkIHBvaW50ZXIiKTsKKwor
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYocG9pbnRlci50eXBlKCkgIT0gSTMyLCBtX2N1cnJl
bnRPcGNvZGUsICIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7CisKKyAgICBFeHByZXNzaW9uVHlw
ZSByZXN1bHQ7CisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxM
b2FkT3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpOwor
ICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChtZW1vcnlUeXBlLCByZXN1
bHQpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Cith
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpzdG9yZShUeXBlIG1lbW9yeVR5cGUpIC0+IFBh
cnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFtX2luZm8ubWVtb3J5
LCAic3RvcmUgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsKKworICAgIHVpbnQzMl90IGFs
aWdubWVudDsKKyAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVl
OworICAgIFR5cGVkRXhwcmVzc2lvbiBwb2ludGVyOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGFsaWdubWVudCksICJjYW4ndCBnZXQgc3RvcmUgYWxpZ25tZW50Iik7
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50
KG1fY3VycmVudE9wY29kZSksICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwg
IiBleGNlZWRzIHN0b3JlJ3MgbmF0dXJhbCBhbGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cy
QWxpZ25tZW50KG1fY3VycmVudE9wY29kZSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgc3RvcmUgb2Zmc2V0Iik7CisgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInN0b3JlIHZhbHVlIik7Cisg
ICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9p
bnRlciIpOworCisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihwb2ludGVyLnR5cGUoKSAhPSBJ
MzIsIG1fY3VycmVudE9wY29kZSwgIiBwb2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKKyAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVlLnR5cGUoKSAhPSBtZW1vcnlUeXBlLCBtX2N1cnJlbnRP
cGNvZGUsICIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+KG1fY3VycmVudE9wY29kZSksIHBv
aW50ZXIsIHZhbHVlLCBvZmZzZXQpKTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6Y2hlY2tCcmFu
Y2hUYXJnZXQoY29uc3QgQ29udHJvbFR5cGUmIHRhcmdldCkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIGlmICghdGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8
IHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpLCBDb250cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJn
ZXQpID8gImJyYW5jaCBvdXQgb2YgZnVuY3Rpb24iIDogImJyYW5jaCB0byBibG9jayIsICIgb24g
ZXhwcmVzc2lvbiBzdGFjayBvZiBzaXplICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiwg
YnV0IGJsb2NrLCAiLCB0YXJnZXQuc2lnbmF0dXJlKCktPnRvU3RyaW5nKCkgLCAiIGV4cGVjdHMg
IiwgdGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCksICIgdmFsdWVzIik7CisKKworICAgIHVuc2ln
bmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIHRhcmdldC5icmFuY2hUYXJn
ZXRBcml0eSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQuYnJhbmNoVGFy
Z2V0QXJpdHkoKTsgKytpKQorICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5
cGUodGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUoaSksIG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCAr
IGldLnR5cGUoKSksICJicmFuY2gncyBzdGFjayB0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb2YgYmxv
Y2sncyB0eXBlIGJyYW5jaCB0YXJnZXQgdHlwZS4gU3RhY2sgdmFsdWUgaGFzIHR5cGUiLCBtX2V4
cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCksICIgYnV0IGJyYW5jaCB0YXJnZXQgZXhw
ZWN0cyBhIHZhbHVlIHdpdGggc3VidHlwZSBvZiAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShp
KSwgIiBhdCBpbmRleCAiLCBpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnRleHQ+CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmlmeShjb25z
dCBDb250cm9sVHlwZSYgY29udHJvbERhdGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgp
ICE9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiBibG9jayB3aXRoIHR5cGU6ICIsIGNvbnRy
b2xEYXRhLnNpZ25hdHVyZSgpLT50b1N0cmluZygpLCAiIHJldHVybnM6ICIsIGNvbnRyb2xEYXRh
LnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpLCAiIGJ1dCBzdGFjayBoYXM6ICIsIG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY29udHJvbERhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5
cGUoKSwgY29udHJvbERhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSkpLCAiY29udHJvbCBm
bG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUuICIsIG1fZXhwcmVzc2lvblN0YWNrW2ld
LnR5cGUoKSwgIiBpcyBub3QgYSBzdWJ0eXBlIG9mICIsIGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgp
LT5yZXR1cm5UeXBlKGkpKTsKIAotICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQp
OwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTIxOCw4NSArMzQ1LDY2IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENvbnRleHQ+CiBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJl
c3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgc3dpdGNoIChtX2N1cnJlbnRPcGNvZGUp
IHsKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5cGU6
Om5hbWU6IHJldHVybiBiaW5hcnlDYXNlPE9wVHlwZTo6bmFtZT4oKTsKKyNkZWZpbmUgQ1JFQVRF
X0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYywgbGhzVHlwZSwgcmhzVHlwZSwgcmV0dXJuVHlwZSkg
Y2FzZSBPcFR5cGU6Om5hbWU6IHJldHVybiBiaW5hcnlDYXNlPE9wVHlwZTo6bmFtZT4ocmV0dXJu
VHlwZSwgbGhzVHlwZSwgcmhzVHlwZSk7CiAgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JF
QVRFX0NBU0UpCiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1l
LCBpZCwgYjNvcCwgaW5jKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIHVuYXJ5Q2FzZTxPcFR5
cGU6Om5hbWU+KCk7CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMsIG9w
ZXJhbmRUeXBlLCByZXR1cm5UeXBlKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIHVuYXJ5Q2Fz
ZTxPcFR5cGU6Om5hbWU+KHJldHVyblR5cGUsIG9wZXJhbmRUeXBlKTsKICAgICBGT1JfRUFDSF9X
QVNNX1VOQVJZX09QKENSRUFURV9DQVNFKQogI3VuZGVmIENSRUFURV9DQVNFCiAKICAgICBjYXNl
IFNlbGVjdDogewotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247Ci0gICAgICAgIEV4
cHJlc3Npb25UeXBlIHplcm87Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIG5vblplcm87CisgICAg
ICAgIFR5cGVkRXhwcmVzc2lvbiBjb25kaXRpb247CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB6
ZXJvOworICAgICAgICBUeXBlZEV4cHJlc3Npb24gbm9uWmVybzsKIAogICAgICAgICBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgInNlbGVjdCBjb25kaXRpb24i
KTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh6ZXJvLCAic2Vs
ZWN0IHplcm8iKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhu
b25aZXJvLCAic2VsZWN0IG5vbi16ZXJvIik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihjb25kaXRpb24udHlwZSgpICE9IEkzMiwgInNlbGVjdCBjb25kaXRpb24gbXVzdCBiZSBp
MzIsIGdvdCAiLCBjb25kaXRpb24udHlwZSgpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihub25aZXJvLnR5cGUoKSAhPSB6ZXJvLnR5cGUoKSwgInNlbGVjdCByZXN1bHQgdHlwZXMg
bXVzdCBtYXRjaCwgZ290ICIsIG5vblplcm8udHlwZSgpLCAiIGFuZCAiLCB6ZXJvLnR5cGUoKSk7
CisKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRTZWxlY3QoY29uZGl0aW9uLCBub25aZXJvLCB6ZXJvLCByZXN1bHQpKTsK
IAotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHplcm8udHlwZSgpLCByZXN1bHQpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBp
ZCwgYjNvcCwgaW5jKSBjYXNlIE9wVHlwZTo6bmFtZToKLSAgICBGT1JfRUFDSF9XQVNNX01FTU9S
WV9MT0FEX09QKENSRUFURV9DQVNFKSB7Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAg
ICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgICAgICBFeHByZXNzaW9uVHlwZSBwb2ludGVyOwot
ICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCksICJjYW4ndCBnZXQgbG9hZCBhbGlnbm1lbnQi
KTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxp
Z25tZW50KG1fY3VycmVudE9wY29kZSksICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdu
bWVudCwgIiBleGNlZWRzIGxvYWQncyBuYXR1cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8IG1lbW9y
eUxvZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bjb2RlKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsK
LSAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAibG9h
ZCBwb2ludGVyIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGxvYWQoc3RhdGlj
X2Nhc3Q8TG9hZE9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZz
ZXQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQorI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwg
aW5jLCBtZW1vcnlUeXBlKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIGxvYWQobWVtb3J5VHlw
ZSk7CitGT1JfRUFDSF9XQVNNX01FTU9SWV9MT0FEX09QKENSRUFURV9DQVNFKQorI3VuZGVmIENS
RUFURV9DQVNFCiAKLSAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FT
RSkgewotICAgICAgICB1aW50MzJfdCBhbGlnbm1lbnQ7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNl
dDsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXI7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFs
aWdubWVudCksICJjYW4ndCBnZXQgc3RvcmUgYWxpZ25tZW50Iik7Ci0gICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoYWxpZ25tZW50ID4gbWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNv
ZGUpLCAiYnl0ZSBhbGlnbm1lbnQgIiwgMXVsbCA8PCBhbGlnbm1lbnQsICIgZXhjZWVkcyBzdG9y
ZSdzIG5hdHVyYWwgYWxpZ25tZW50ICIsIDF1bGwgPDwgbWVtb3J5TG9nMkFsaWdubWVudChtX2N1
cnJlbnRPcGNvZGUpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIob2Zmc2V0KSwgImNhbid0IGdldCBzdG9yZSBvZmZzZXQiKTsKLSAgICAgICAgV0FTTV9UUllf
UE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInN0b3JlIHZhbHVlIik7Ci0gICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgInN0b3JlIHBvaW50
ZXIiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc3RvcmUoc3RhdGljX2Nhc3Q8
U3RvcmVPcFR5cGU+KG1fY3VycmVudE9wY29kZSksIHBvaW50ZXIsIHZhbHVlLCBvZmZzZXQpKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlk
LCBiM29wLCBpbmMsIG1lbW9yeVR5cGUpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gc3RvcmUo
bWVtb3J5VHlwZSk7CitGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkK
ICN1bmRlZiBDUkVBVEVfQ0FTRQogCiAgICAgY2FzZSBGMzJDb25zdDogewogICAgICAgICB1aW50
MzJfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIo
Y29uc3RhbnQpLCAiY2FuJ3QgcGFyc2UgMzItYml0IGZsb2F0aW5nLXBvaW50IGNvbnN0YW50Iik7
Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQo
RjMyLCBjb25zdGFudCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRB
cHBlbmQoRjMyLCBtX2NvbnRleHQuYWRkQ29uc3RhbnQoRjMyLCBjb25zdGFudCkpOwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgSTMyQ29uc3Q6IHsKICAgICAgICAgaW50
MzJfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQz
Mihjb25zdGFudCksICJjYW4ndCBwYXJzZSAzMi1iaXQgY29uc3RhbnQiKTsKLSAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJMzIsIGNvbnN0YW50
KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJMzIsIG1f
Y29udGV4dC5hZGRDb25zdGFudChJMzIsIGNvbnN0YW50KSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgY2FzZSBGNjRDb25zdDogewogICAgICAgICB1aW50NjRfdCBjb25zdGFu
dDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAi
Y2FuJ3QgcGFyc2UgNjQtYml0IGZsb2F0aW5nLXBvaW50IGNvbnN0YW50Iik7Ci0gICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoRjY0LCBjb25zdGFu
dCkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRjY0LCBt
X2NvbnRleHQuYWRkQ29uc3RhbnQoRjY0LCBjb25zdGFudCkpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIGNhc2UgSTY0Q29uc3Q6IHsKICAgICAgICAgaW50NjRfdCBjb25zdGFu
dDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25zdGFudCks
ICJjYW4ndCBwYXJzZSA2NC1iaXQgY29uc3RhbnQiKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChJNjQsIGNvbnN0YW50KSk7CisgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJNjQsIG1fY29udGV4dC5hZGRD
b25zdGFudChJNjQsIGNvbnN0YW50KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBA
IC0zMDQsMTAgKzQxMiwxNiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVmZXJlbmNlcyBhcmUgbm90
IGVuYWJsZWQiKTsKICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleDsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBwYXJzZSB0
YWJsZSBpbmRleCIpOwotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQsIGluZGV4OworICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9pbmZvLnRhYmxlQ291
bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMg
IiwgbV9pbmZvLnRhYmxlQ291bnQoKSk7CisKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGluZGV4
OwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGluZGV4LCAidGFi
bGUuZ2V0Iik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoSTMyICE9IGluZGV4LnR5
cGUoKSwgInRhYmxlLmdldCBpbmRleCB0byB0eXBlICIsIGluZGV4LnR5cGUoKSwgIiBleHBlY3Rl
ZCAiLCBJMzIpOworCisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVGFibGVHZXQodGFibGVJbmRleCwgaW5kZXgsIHJlc3Vs
dCkpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAg
VHlwZSByZXN1bHRUeXBlID0gbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmVzdWx0VHlwZSwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTMxNSwxMCArNDI5LDE1
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2Vi
QXNzZW1ibHlSZWZlcmVuY2VzKCksICJyZWZlcmVuY2VzIGFyZSBub3QgZW5hYmxlZCIpOwogICAg
ICAgICB1bnNpZ25lZCB0YWJsZUluZGV4OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IHBhcnNlIHRhYmxlIGluZGV4Iik7Ci0g
ICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbCwgaW5kZXg7Ci0gICAgICAgIFdBU01fVFJZX1BPUF9F
WFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsLCAidGFibGUuc2V0Iik7CisgICAgICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX2luZm8udGFibGVDb3VudCgpLCAidGFibGUg
aW5kZXggIiwgdGFibGVJbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8udGFi
bGVDb3VudCgpKTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlLCBpbmRleDsKKyAgICAg
ICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInRhYmxlLnNldCIp
OwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGluZGV4LCAidGFi
bGUuc2V0Iik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlU2V0KHRh
YmxlSW5kZXgsIGluZGV4LCB2YWwpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihJ
MzIgIT0gaW5kZXgudHlwZSgpLCAidGFibGUuc2V0IGluZGV4IHRvIHR5cGUgIiwgaW5kZXgudHlw
ZSgpLCAiIGV4cGVjdGVkICIsIEkzMik7CisgICAgICAgIFR5cGUgdHlwZSA9IG1faW5mby50YWJs
ZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RighaXNTdWJ0eXBlKHZhbHVlLnR5cGUoKSwgdHlwZSksICJ0YWJsZS5zZXQgdmFsdWUgdG8gdHlw
ZSAiLCB2YWx1ZS50eXBlKCksICIgZXhwZWN0ZWQgIiwgdHlwZSk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5
cGU6OkFueXJlZiB8fCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVs
ZW1lbnRUeXBlOjpGdW5jcmVmKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
VGFibGVTZXQodGFibGVJbmRleCwgaW5kZXgsIHZhbHVlKSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCkBAIC0zMjgsMjcgKzQ0NywzOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoZXh0T3ApLCAiY2FuJ3QgcGFyc2UgdGFibGUgZXh0ZW5k
ZWQgb3Bjb2RlIik7CiAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXg7CiAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgcGFyc2Ug
dGFibGUgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4
ID49IG1faW5mby50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlz
IGludmFsaWQsIGxpbWl0IGlzICIsIG1faW5mby50YWJsZUNvdW50KCkpOwogCiAgICAgICAgIHN3
aXRjaCAoc3RhdGljX2Nhc3Q8RXh0VGFibGVPcFR5cGU+KGV4dE9wKSkgewogICAgICAgICBjYXNl
IEV4dFRhYmxlT3BUeXBlOjpUYWJsZVNpemU6IHsKICAgICAgICAgICAgIEV4cHJlc3Npb25UeXBl
IHJlc3VsdDsKICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlU2l6
ZSh0YWJsZUluZGV4LCByZXN1bHQpKTsKLSAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFw
cGVuZChyZXN1bHQpOworICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5k
QXBwZW5kKEkzMiwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRXh0VGFibGVPcFR5cGU6OlRhYmxlR3JvdzogewotICAgICAgICAgICAgRXhwcmVz
c2lvblR5cGUgZmlsbCwgZGVsdGEsIHJlc3VsdDsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lv
biBmaWxsOworICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGRlbHRhOwogICAgICAgICAgICAg
V0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhkZWx0YSwgInRhYmxlLmdyb3ciKTsK
ICAgICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oZmlsbCwgInRh
YmxlLmdyb3ciKTsKKworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0
eXBlKGZpbGwudHlwZSgpLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkpLCAi
dGFibGUuZ3JvdyBleHBlY3RzIGZpbGwgdmFsdWUgb2YgdHlwZSAiLCBtX2luZm8udGFibGVzW3Rh
YmxlSW5kZXhdLndhc21UeXBlKCksICIgZ290ICIsIGZpbGwudHlwZSgpKTsKKyAgICAgICAgICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoSTMyICE9IGRlbHRhLnR5cGUoKSwgInRhYmxlLmdyb3cg
ZXhwZWN0cyBhbiBpMzIgZGVsdGEgdmFsdWUsIGdvdCAiLCBkZWx0YS50eXBlKCkpOworCisgICAg
ICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRUYWJsZUdyb3codGFibGVJbmRleCwgZmlsbCwgZGVsdGEsIHJlc3VsdCkp
OwotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRUYWJsZU9wVHlw
ZTo6VGFibGVGaWxsOiB7Ci0gICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIGZpbGws
IGNvdW50OworICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIG9mZnNldCwgZmlsbCwgY291bnQ7
CiAgICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvdW50LCAi
dGFibGUuZmlsbCIpOwogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyhmaWxsLCAidGFibGUuZmlsbCIpOwogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJF
U1NJT05fU1RBQ0tfSU5UTyhvZmZzZXQsICJ0YWJsZS5maWxsIik7CisKKyAgICAgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShmaWxsLnR5cGUoKSwgbV9pbmZvLnRhYmxl
c1t0YWJsZUluZGV4XS53YXNtVHlwZSgpKSwgInRhYmxlLmZpbGwgZXhwZWN0cyBmaWxsIHZhbHVl
IG9mIHR5cGUgIiwgbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpLCAiIGdvdCAi
LCBmaWxsLnR5cGUoKSk7CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKEkzMiAh
PSBvZmZzZXQudHlwZSgpLCAidGFibGUuZmlsbCBleHBlY3RzIGFuIGkzMiBvZmZzZXQgdmFsdWUs
IGdvdCAiLCBvZmZzZXQudHlwZSgpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoSTMyICE9IGNvdW50LnR5cGUoKSwgInRhYmxlLmZpbGwgZXhwZWN0cyBhbiBpMzIgY291bnQg
dmFsdWUsIGdvdCAiLCBjb3VudC50eXBlKCkpOworCiAgICAgICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRUYWJsZUZpbGwodGFibGVJbmRleCwgb2Zmc2V0LCBmaWxsLCBjb3VudCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM2MSwxNiArNDkyLDE4IEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKIAogICAgIGNhc2UgUmVmTnVsbDogewogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMoKSwgInJlZmVyZW5jZXMgYXJlIG5v
dCBlbmFibGVkIik7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQu
YWRkQ29uc3RhbnQoRnVuY3JlZiwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRnVuY3JlZiwgbV9jb250ZXh0
LmFkZENvbnN0YW50KEZ1bmNyZWYsIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIFJlZklzTnVsbDogewogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMoKSwg
InJlZmVyZW5jZXMgYXJlIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJl
c3VsdCwgdmFsdWU7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInJlZi5pc19udWxsIik7Cisg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZS50eXBlKCksIEFu
eXJlZiksICJyZWYuaXNfbnVsbCB0byB0eXBlICIsIHZhbHVlLnR5cGUoKSwgIiBleHBlY3RlZCAi
LCBBbnlyZWYpOworICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZFJlZklzTnVsbCh2YWx1ZSwgcmVzdWx0KSk7Ci0gICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIApAQCAtMzgwLDggKzUxMywxMCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVmZXJl
bmNlcyBhcmUgbm90IGVuYWJsZWQiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciByZWYuZnVuYyIpOwogCisg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSwgInJlZi5mdW5jIGluZGV4ICIsIGluZGV4LCAiIGlzIHRvbyBsYXJnZSwg
bWF4IGlzICIsIG1faW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOworICAgICAgICBtX2lu
Zm8uYWRkUmVmZXJlbmNlZEZ1bmN0aW9uKGluZGV4KTsKICAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQoYWRkUmVmRnVuYyhpbmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1
Y3RBbmRBcHBlbmQoRnVuY3JlZiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKQEAgLTM4OSwxNiArNTI0LDE4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgdWludDMyX3QgaW5kZXg7
CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciBnZXRfbG9j
YWwiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2xvY2Fscy5z
aXplKCksICJhdHRlbXB0IHRvIHVzZSB1bmtub3duIGxvY2FsICIsIGluZGV4LCAiIGxhc3Qgb25l
IGlzICIsIG1fbG9jYWxzLnNpemUoKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGdldExvY2FsKGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBw
ZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVu
ZChtX2xvY2Fsc1tpbmRleF0sIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAg
RXhwcmVzc2lvblR5cGUgdmFsdWU7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3Qg
Z2V0IGluZGV4IGZvciBzZXRfbG9jYWwiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyh2YWx1ZSwgInNldF9sb2NhbCIpOworICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKCFpc1N1YnR5cGUodmFsdWUudHlwZSgpLCBtX2xvY2Fsc1tpbmRleF0pLCAic2V0
X2xvY2FsIHRvIHR5cGUgIiwgdmFsdWUudHlwZSgpLCAiIGV4cGVjdGVkICIsIG1fbG9jYWxzW2lu
ZGV4XSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCB2
YWx1ZSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTQwNyw3ICs1NDQsOSBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHRlZV9sb2Nh
bCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1w
dHkoKSwgImNhbid0IHRlZV9sb2NhbCBvbiBlbXB0eSBleHByZXNzaW9uIHN0YWNrIik7Ci0gICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCBtX2V4cHJlc3Npb25T
dGFjay5sYXN0KCkpKTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gbV9leHByZXNz
aW9uU3RhY2subGFzdCgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5
cGUodmFsdWUudHlwZSgpLCBtX2xvY2Fsc1tpbmRleF0pLCAic2V0X2xvY2FsIHRvIHR5cGUgIiwg
dmFsdWUudHlwZSgpLCAiIGV4cGVjdGVkICIsIG1fbG9jYWxzW2luZGV4XSk7CisgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCB2YWx1ZSkpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIApAQCAtNDE1LDE2ICs1NTQsMjcgQEAgYXV0byBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAg
ICB1aW50MzJfdCBpbmRleDsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQg
Z2V0X2dsb2JhbCdzIGluZGV4Iik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5k
ZXggPj0gbV9pbmZvLmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1
bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9pbmZvLmdsb2JhbHMuc2l6ZSgpKTsKKyAgICAg
ICAgVHlwZSByZXN1bHRUeXBlID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgICAg
IEFTU0VSVChpc1ZhbHVlVHlwZShyZXN1bHRUeXBlKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGdldEdsb2JhbChpbmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1
Y3RBbmRBcHBlbmQocmVzdWx0VHlwZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKICAgICBjYXNlIFNldEdsb2JhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAg
ICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1
ZTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAi
Y2FuJ3QgZ2V0IHNldF9nbG9iYWwncyBpbmRleCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQ
UkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic2V0X2dsb2JhbCB2YWx1ZSIpOworCisgICAgICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmdsb2JhbHMuc2l6ZSgpLCAi
c2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9p
bmZvLmdsb2JhbHMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2lu
Zm8uZ2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSwgInNldF9n
bG9iYWwgIiwgaW5kZXgsICIgaXMgaW1tdXRhYmxlIik7CisKKyAgICAgICAgVHlwZSBnbG9iYWxU
eXBlID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgICAgIEFTU0VSVChpc1ZhbHVl
VHlwZShnbG9iYWxUeXBlKSk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZ2xvYmFs
VHlwZSAhPSB2YWx1ZS50eXBlKCksICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIHdpdGggdHlwZSAi
LCBnbG9iYWxUeXBlLCAiIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlICIsIHZhbHVlLnR5cGUoKSk7
CisKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0R2xvYmFsKGluZGV4LCB2YWx1
ZSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTQ0MiwxNSArNTkyLDIyIEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwn
cyAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1f
ZXhwcmVzc2lvblN0YWNrLmF0KGkpKTsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcg
PSBtX2V4cHJlc3Npb25TdGFjay5hdChpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZShhcmcudHlwZSgpLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAt
IGZpcnN0QXJndW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBn
b3QgIiwgYXJnLnR5cGUoKSwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50
KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpKTsKKyAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBw
ZW5kKGFyZyk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsK
ICAgICAgICAgfQogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVu
dEluZGV4KTsKIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVTaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKwogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7
CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwg
Y2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CiAKLSAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suYXBwZW5kVmVjdG9yKHJlc3VsdHMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
ZWVTaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxlZVNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyAr
K2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoY2Fs
bGVlU2lnbmF0dXJlLnJldHVyblR5cGUoaSksIHJlc3VsdHNbaV0pOwogCiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQpAQCAtNDY5LDE4ICs2MjYsMjcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBzaXpl
X3QgYXJndW1lbnRDb3VudCA9IGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxOyAv
LyBBZGQgdGhlIGNhbGxlZSdzIGluZGV4LgogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFy
Z3VtZW50Q291bnQgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsX2luZGlyZWN0IGV4
cGVjdHMgIiwgYXJndW1lbnRDb3VudCwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBz
dGFjayBjdXJyZW50bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVl
cyIpOwogCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2su
bGFzdCgpLnR5cGUoKSAhPSBJMzIsICJub24taTMyIGNhbGxfaW5kaXJlY3QgaW5kZXggIiwgbV9l
eHByZXNzaW9uU3RhY2subGFzdCgpLnR5cGUoKSk7CisKICAgICAgICAgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiBhcmdzOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2Vy
dmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGFyZ3VtZW50Q291bnQsICIgY2FsbF9pbmRpcmVjdCBhcmd1bWVudHMiKTsKICAgICAg
ICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAt
IGFyZ3VtZW50Q291bnQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5k
ZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXJn
cy51bmNoZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2suYXQoaSkpOworICAgICAgICAgICAg
VHlwZWRFeHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpOworICAgICAgICAg
ICAgaWYgKGkgPCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKQorICAgICAgICAgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShhcmcudHlwZSgpLCBjYWxsZWVT
aWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlw
ZSBtaXNtYXRjaCBpbiBjYWxsX2luZGlyZWN0LCBnb3QgIiwgYXJnLnR5cGUoKSwgIiwgZXhwZWN0
ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpKTsK
KyAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGFyZyk7CiAgICAgICAgICAgICBtX2Nv
bnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAgICAgICAgfQogICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAorCisKICAgICAgICAgUmVz
dWx0TGlzdCByZXN1bHRzOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxs
SW5kaXJlY3QodGFibGVJbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7Ci0g
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZFZlY3RvcihyZXN1bHRzKTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCk7
ICsraSkKKyAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChj
YWxsZWVTaWduYXR1cmUucmV0dXJuVHlwZShpKSwgcmVzdWx0c1tpXSk7CiAKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CkBAIC00ODksNiArNjU1LDEzIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgQmxv
Y2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdl
dCBibG9jaydzIHNpZ25hdHVyZSIpOwogCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksICJUb28gZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgYmxvY2suIEJsb2NrIGV4cGVjdHMgIiwg
aW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIEJsb2NrIGhhcyBpbmxpbmVTaWduYXR1
cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgVHlwZSB0eXBlID0gbV9l
eHByZXNzaW9uU3RhY2suYXQob2Zmc2V0ICsgaSkudHlwZSgpOworICAgICAgICAgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHR5cGUsIGlubGluZVNpZ25hdHVyZS0+YXJndW1l
bnQoaSkpLCAiQmxvY2sgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJl
IGEgc3VidHlwZSBvZiAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1
bWVudCBoYXMgdHlwZSAiLCB0eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludDY0X3Qgb2xk
U2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7
CiAgICAgICAgIENvbnRyb2xUeXBlIGJsb2NrOwpAQCAtNTA1LDYgKzY3OCwxMyBAQCBhdXRvIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVy
ZSksICJjYW4ndCBnZXQgbG9vcCdzIHNpZ25hdHVyZSIpOwogCisgICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCksICJUb28gZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgbG9vcCBibG9jay4g
TG9vcCBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQg
b25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBMb29wIGhh
cyBpbmxpbmVTaWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
VHlwZSB0eXBlID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zmc2V0ICsgaSkudHlwZSgpOworICAg
ICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHR5cGUsIGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnQoaSkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRl
eCIsIGksICIgdG8gYmUgYSBzdWJ0eXBlIG9mICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQo
aSksICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIHR5cGUpOworICAgICAgICB9CisKICAgICAg
ICAgaW50NjRfdCBvbGRTaXplID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAgICAgICBT
dGFjayBuZXdTdGFjazsKICAgICAgICAgQ29udHJvbFR5cGUgbG9vcDsKQEAgLTUxOSwxMCArNjk5
LDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+
IFBhcnRpYWxSZXN1bHQKIAogICAgIGNhc2UgSWY6IHsKICAgICAgICAgQmxvY2tTaWduYXR1cmUg
aW5saW5lU2lnbmF0dXJlOwotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247CisgICAg
ICAgIFR5cGVkRXhwcmVzc2lvbiBjb25kaXRpb247CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlQmxvY2tTaWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3Qg
Z2V0IGlmJ3Mgc2lnbmF0dXJlIik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NU
QUNLX0lOVE8oY29uZGl0aW9uLCAiaWYgY29uZGl0aW9uIik7CiAKKyAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihjb25kaXRpb24udHlwZSgpICE9IEkzMiwgImlmIGNvbmRpdGlvbiBtdXN0
IGJlIGkzMiwgZ290ICIsIGNvbmRpdGlvbi50eXBlKCkpOworICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIGlmIGJsb2NrLiBJ
ZiBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25s
eSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBJZiBibG9jayBo
YXMgc2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkpOworICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlu
bGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUobV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0ICsgaV0u
dHlwZSgpLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUg
YXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlIGEgc3VidHlwZSBvZiAiLCBpbmxpbmVTaWdu
YXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Np
b25TdGFja1tpXS50eXBlKCkpOworCiAgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7CiAgICAgICAgIENvbnRy
b2xUeXBlIGNvbnRyb2w7CkBAIC01MzcsMzIgKzcyMyw0MCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBjYXNl
IEVsc2U6IHsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXpl
KCkgPT0gMSwgImNhbid0IHVzZSBlbHNlIGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5j
dGlvbiIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlKG1fY29udHJv
bFN0YWNrLmxhc3QoKS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKLSAgICAgICAg
bV9leHByZXNzaW9uU3RhY2sgPSBXVEZNb3ZlKG1fY29udHJvbFN0YWNrLmxhc3QoKS5lbHNlQmxv
Y2tTdGFjayk7CisKKyAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRy
b2xTdGFjay5sYXN0KCk7CisKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlm
eShjb250cm9sRW50cnkuY29udHJvbERhdGEpKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRFbHNlKGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3Rh
Y2spKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBXVEZNb3ZlKGNvbnRyb2xFbnRyeS5l
bHNlQmxvY2tTdGFjayk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBC
cjoKICAgICBjYXNlIEJySWY6IHsKICAgICAgICAgdWludDMyX3QgdGFyZ2V0OwotICAgICAgICBF
eHByZXNzaW9uVHlwZSBjb25kaXRpb24gPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24oKTsKKyAg
ICAgICAgVHlwZWRFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIodGFyZ2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFy
Z2V0Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0
YWNrLnNpemUoKSwgImJyIC8gYnJfaWYncyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29u
dHJvbCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0YWNrLnNpemUoKSk7Ci0gICAgICAgIGlmICht
X2N1cnJlbnRPcGNvZGUgPT0gQnJJZikKKyAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9PSBC
cklmKSB7CiAgICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNv
bmRpdGlvbiwgImJyIC8gYnJfaWYgY29uZGl0aW9uIik7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uLnR5cGUoKSAhPSBJMzIsICJjb25k
aXRpb25hbCBicmFuY2ggd2l0aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25kaXRpb24udHlwZSgp
KTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAx
OworICAgICAgICAgICAgY29uZGl0aW9uID0gVHlwZWRFeHByZXNzaW9uIHsgVm9pZCwgQ29udGV4
dDo6ZW1wdHlFeHByZXNzaW9uKCkgfTsKKyAgICAgICAgfQogCiAgICAgICAgIENvbnRyb2xUeXBl
JiBkYXRhID0gbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdl
dF0uY29udHJvbERhdGE7Ci0KKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhjaGVj
a0JyYW5jaFRhcmdldChkYXRhKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFk
ZEJyYW5jaChkYXRhLCBjb25kaXRpb24sIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBCclRhYmxlOiB7CiAgICAgICAgIHVpbnQzMl90
IG51bWJlck9mVGFyZ2V0czsKLSAgICAgICAgdWludDMyX3QgZGVmYXVsdFRhcmdldDsKLSAgICAg
ICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uOworICAgICAgICB1aW50MzJfdCBkZWZhdWx0VGFy
Z2V0SW5kZXg7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBjb25kaXRpb247CiAgICAgICAgIFZl
Y3RvcjxDb250cm9sVHlwZSo+IHRhcmdldHM7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIobnVtYmVyT2ZUYXJnZXRzKSwgImNhbid0IGdldCB0aGUgbnVtYmVy
IG9mIHRhcmdldHMgZm9yIGJyX3RhYmxlIik7CkBAIC01NzYsMTcgKzc3MCwyOSBAQCBhdXRvIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0
CiAgICAgICAgICAgICB0YXJnZXRzLnVuY2hlY2tlZEFwcGVuZCgmbV9jb250cm9sU3RhY2tbbV9j
b250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGEpOwogICAgICAgICB9
CiAKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGVmYXVsdFRh
cmdldCksICJjYW4ndCBnZXQgZGVmYXVsdCB0YXJnZXQgZm9yIGJyX3RhYmxlIik7Ci0gICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoZGVmYXVsdFRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXpl
KCksICJicl90YWJsZSdzIGRlZmF1bHQgdGFyZ2V0ICIsIGRlZmF1bHRUYXJnZXQsICIgZXhjZWVk
cyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGVmYXVsdFRhcmdldEluZGV4KSwg
ImNhbid0IGdldCBkZWZhdWx0IHRhcmdldCBmb3IgYnJfdGFibGUiKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihkZWZhdWx0VGFyZ2V0SW5kZXggPj0gbV9jb250cm9sU3RhY2suc2l6ZSgp
LCAiYnJfdGFibGUncyBkZWZhdWx0IHRhcmdldCAiLCBkZWZhdWx0VGFyZ2V0SW5kZXgsICIgZXhj
ZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAg
ICAgQ29udHJvbFR5cGUmIGRlZmF1bHRUYXJnZXQgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xT
dGFjay5zaXplKCkgLSAxIC0gZGVmYXVsdFRhcmdldEluZGV4XS5jb250cm9sRGF0YTsKIAogICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJyX3Rh
YmxlIGNvbmRpdGlvbiIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRTd2l0
Y2goY29uZGl0aW9uLCB0YXJnZXRzLCBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXpl
KCkgLSAxIC0gZGVmYXVsdFRhcmdldF0uY29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7
CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uLnR5cGUoKSAhPSBJMzIs
ICJicl90YWJsZSB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNvbmRpdGlvbi50eXBlKCkpOwor
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBDb250cm9sVHlwZSogdGFyZ2V0ID0gdGFyZ2V0c1tpXTsKKyAgICAgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0
eSgpICE9IHRhcmdldC0+YnJhbmNoVGFyZ2V0QXJpdHkoKSwgImJyX3RhYmxlIHRhcmdldCB0eXBl
IHNpemUgbWlzbWF0Y2guIERlZmF1bHQgaGFzIHNpemU6ICIsIGRlZmF1bHRUYXJnZXQuYnJhbmNo
VGFyZ2V0QXJpdHkoKSwgImJ1dCB0YXJnZXQ6ICIsIGksICIgaGFzIHNpemU6ICIsIHRhcmdldC0+
YnJhbmNoVGFyZ2V0QXJpdHkoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAw
OyB0eXBlIDwgZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOyArK3R5cGUpCisgICAg
ICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGRlZmF1bHRUYXJn
ZXQuYnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUp
KSwgImJyX3RhYmxlIHRhcmdldCB0eXBlIG1pc21hdGNoIGF0IG9mZnNldCAiLCB0eXBlLCAiIGV4
cGVjdGVkOiAiLCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUodHlwZSksICIgYnV0IHNh
dzogIiwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpLCAiIHdoZW4gdGFyZ2V0aW5nIGJs
b2NrOiAiLCB0YXJnZXQtPnNpZ25hdHVyZSgpLT50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVs
dFRhcmdldCkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRTd2l0Y2goY29u
ZGl0aW9uLCB0YXJnZXRzLCBkZWZhdWx0VGFyZ2V0LCBtX2V4cHJlc3Npb25TdGFjaykpOwogCiAg
ICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAogICAgIGNhc2UgUmV0dXJuOiB7CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJ
TFMoY2hlY2tCcmFuY2hUYXJnZXQobV9jb250cm9sU3RhY2tbMF0uY29udHJvbERhdGEpKTsKICAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkUmV0dXJuKG1fY29udHJvbFN0YWNrWzBd
LmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICBtX3VucmVhY2hhYmxl
QmxvY2tzID0gMTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTU5NCwxMyArODAwLDE1IEBAIGF1
dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKIAogICAgIGNhc2UgRW5kOiB7CiAgICAgICAgIENvbnRyb2xFbnRyeSBkYXRhID0gbV9j
b250cm9sU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC5pc0NvbnRyb2xU
eXBlSWYoZGF0YS5jb250cm9sRGF0YSkpIHsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0lm
KGRhdGEuY29udHJvbERhdGEpKSB7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHVuaWZ5KGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZEVsc2UoZGF0YS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsK
ICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShkYXRhLmVsc2VCbG9ja1N0
YWNrKTsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGxpdHRsZSB3ZWly
ZCBpbiB0aGF0IGl0IHdpbGwgbW9kaWZ5IHRoZSBleHByZXNzaW9uU3RhY2sgZm9yIHRoZSByZXN1
bHQgb2YgdGhlIGJsb2NrLgogICAgICAgICAvLyBUaGF0J3MgYSBsaXR0bGUgdG9vIGVmZmVjdGZ1
bCBmb3IgbWUgYnV0IEkgZG9uJ3QgaGF2ZSBhIGJldHRlciBBUEkgcmlnaHQgbm93LgogICAgICAg
ICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTMK
KyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShkYXRhLmNvbnRyb2xEYXRh
KSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGVuZEJsb2NrKGRhdGEsIG1fZXhw
cmVzc2lvblN0YWNrKSk7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjayk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC02MzAsMTIgKzgz
OCwxMyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDEocmVzZXJ2ZWQpLCAiY2FuJ3QgcGFyc2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVt
b3J5Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2Vy
dmVkIHZhclVpbnQxIGZvciBncm93X21lbW9yeSBtdXN0IGJlIHplcm8iKTsKIAotICAgICAgICBF
eHByZXNzaW9uVHlwZSBkZWx0YTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGRlbHRhOwogICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGRlbHRhLCAiZXhwZWN0IGFu
IGkzMiBhcmd1bWVudCB0byBncm93X21lbW9yeSBvbiB0aGUgc3RhY2siKTsKKyAgICAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihkZWx0YS50eXBlKCkgIT0gSTMyLCAiZ3Jvd19tZW1vcnkgd2l0
aCBub24taTMyIGRlbHRhIGFyZ3VtZW50IGhhcyB0eXBlOiAiLCBkZWx0YS50eXBlKCkpOwogCiAg
ICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkR3Jvd01lbW9yeShkZWx0YSwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1
Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpA
QCAtNjQ5LDcgKzg1OCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhw
cmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1
bHQ7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEN1cnJlbnRNZW1vcnkocmVz
dWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNjY0LDcgKzg3Myw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENvbnRleHQ+CiBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVh
Y2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV91bnJl
YWNoYWJsZUJsb2Nrcyk7Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMp
IGNhc2UgT3BUeXBlOjpuYW1lOgorI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2Ug
T3BUeXBlOjpuYW1lOgogICAgIHN3aXRjaCAobV9jdXJyZW50T3Bjb2RlKSB7CiAgICAgY2FzZSBF
bHNlOiB7CiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID4gMSkKQEAgLTY4MCw5ICs4
ODksMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYg
KG1fdW5yZWFjaGFibGVCbG9ja3MgPT0gMSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRh
dGEgPSBtX2NvbnRyb2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICAgICAgaWYgKG1fY29udGV4
dC5pc0NvbnRyb2xUeXBlSWYoZGF0YS5jb250cm9sRGF0YSkpIHsKKyAgICAgICAgICAgIGlmIChD
b250cm9sVHlwZTo6aXNJZihkYXRhLmNvbnRyb2xEYXRhKSkgewogICAgICAgICAgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERh
dGEpKTsKICAgICAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IFdURk1vdmUoZGF0YS5l
bHNlQmxvY2tTdGFjayk7CisgICAgICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlM
Uyh1bmlmeShkYXRhLmNvbnRyb2xEYXRhKSk7CiAgICAgICAgICAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoZW5kQmxvY2soZGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVu
ZFRvVW5yZWFjaGFibGUoZGF0YSkpOwpAQCAtODE0LDQgKzEwMjQsOCBAQCBhdXRvIEZ1bmN0aW9u
UGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxS
ZXN1bHQKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAorI3VuZGVmIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8KKyN1bmRlZiBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVAor
I3VuZGVmIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYKKwogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuY3BwCmluZGV4IDlhNTNiMzM5ZDQ2NDU0ZmY1OWY0Yjg2MGM4MjQyNzEwYWZkMTc4Y2EuLmFl
M2E3ZjFmMTRmMTljYmMyZmFkMTUxNTcxOTM4NGI3ZDY1OTFmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDgsOCArNDgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogY2xhc3MgTExJbnRHZW5lcmF0
b3IgOiBwdWJsaWMgQnl0ZWNvZGVHZW5lcmF0b3JCYXNlPEdlbmVyYXRvclRyYWl0cz4gewogcHVi
bGljOgogICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVmlydHVhbFJlZ2lzdGVyOwotICAgIHVz
aW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKLSAgICB1c2lu
ZyBTdGFjayA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMTYsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PjsKIAogICAgIHN0cnVjdCBDb250cm9sTG9vcCAgewogICAgICAgICBSZWY8TGFiZWw+IG1fYm9k
eTsKQEAgLTczLDE0ICs3MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBsb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
dW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgYm9keSwgUmVmUHRyPExhYmVsPiYmIGNv
bnRpbnVhdGlvbikKKyAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRvcExldmVsKEJsb2NrU2ln
bmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29u
dGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2ln
bmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShj
b250aW51YXRpb24pLCBDb250cm9sTG9vcCB7IFdURk1vdmUoYm9keSkgfSk7CisgICAgICAgICAg
ICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUsIFdURk1vdmUoY29udGlu
dWF0aW9uKSwgQ29udHJvbFRvcExldmVsIHsgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgQ29udHJvbFR5cGUgdG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25l
ZCBzdGFja1NpemUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRp
YyBDb250cm9sVHlwZSBsb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3Rh
Y2tTaXplLCBSZWY8TGFiZWw+JiYgYm9keSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3Rh
Y2tTaXplLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOworICAg
ICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3Ag
eyBXVEZNb3ZlKGJvZHkpIH0pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIENvbnRyb2xU
eXBlIGJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBS
ZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uKQpAQCAtOTMsNiArOTEsMTIgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElm
IHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJv
b2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlz
VG9wTGV2ZWwoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29udHJvbFRvcExldmVsPihjb250cm9sKTsgfQorCisgICAgICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTaXplOyB9CisgICAgICAgIEJs
b2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CisK
ICAgICAgICAgUmVmUHRyPExhYmVsPiB0YXJnZXRMYWJlbEZvckJyYW5jaCgpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29w
PigqdGhpcykpCkBAIC0xMDAsMTQgKzEwNCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gbV9jb250aW51YXRpb247CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCB0YXJnZXRB
cml0eSgpIGNvbnN0CisgICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5
KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q29udHJvbExvb3A+KCp0aGlzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0
dXJuQ291bnQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhY2tTaXplOyB9CisgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlw
ZSh1bnNpZ25lZCBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJy
YW5jaFRhcmdldEFyaXR5KCkpOworICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q29udHJvbExvb3A+KCp0aGlzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1
cmUtPmFyZ3VtZW50KGkpOworICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5U
eXBlKGkpOworICAgICAgICB9CiAKICAgICAgICAgQmxvY2tTaWduYXR1cmUgbV9zaWduYXR1cmU7
CiAgICAgICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwpAQCAtMTI2LDE0ICsxMzYsMTUgQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgRXJyb3JUeXBlID0gU3RyaW5nOwogICAgIHVzaW5nIFBhcnRpYWxS
ZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+OwotICAgIHVzaW5nIFJlc3VsdExpc3Qg
PSBFeHByZXNzaW9uTGlzdDsKICAgICB1c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBlY3Rl
ZDxFcnJvclR5cGU+OwogCiAgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8
TExJbnRHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisgICAgdXNpbmcgQ29udHJvbFN0YWNrID0g
RnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+OjpDb250cm9sU3RhY2s7CisgICAgdXNpbmcg
UmVzdWx0TGlzdCA9IEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPjo6UmVzdWx0TGlzdDsK
KyAgICB1c2luZyBTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPjo6U3RhY2s7
CisgICAgdXNpbmcgVHlwZWRFeHByZXNzaW9uID0gRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0
b3I+OjpUeXBlZEV4cHJlc3Npb247CiAKLSAgICBMTEludEdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiwg
Y29uc3QgU2lnbmF0dXJlJik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IGZpbmFsaXplKCk7CisgICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lv
bigpIHsgcmV0dXJuIHsgfTsgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgog
ICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWls
KEFyZ3MuLi4gYXJncykgY29uc3QKQEAgLTE0Miw2ICsxNTMsMTAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZFJlc3VsdChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5Nb2R1bGUg
ZmFpbGVkIGNvbXBpbGluZzogIl9zLCBtYWtlU3RyaW5nKGFyZ3MpLi4uKSk7CiAgICAgfQogCisg
ICAgTExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbkNvZGVCbG9jaz4gZmluYWxpemUoKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4cHJl
c3Npb25MaXN0QSwgdHlwZW5hbWUgRXhwcmVzc2lvbkxpc3RCPgogICAgIHZvaWQgdW5pZnlWYWx1
ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3RBJiBkZXN0aW5hdGlvbnMsIGNvbnN0IEV4
cHJlc3Npb25MaXN0QiYgdmFsdWVzKQogICAgIHsKQEAgLTE2NiwxMCArMTgxLDYgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgLS1tX3N0YWNrU2l6ZTsgfQog
Ci0gICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZp
cnR1YWxSZWdpc3RlciB7IH07IH07Ci0gICAgU3RhY2sgY3JlYXRlU3RhY2soKSB7IHJldHVybiBT
dGFjaygpOyB9Ci0gICAgYm9vbCBpc0NvbnRyb2xUeXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNv
bnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9s
KTsgfQotCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRz
KGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFu
dChUeXBlLCBpbnQ2NF90KTsKQEAgLTIyMiwxNSArMjMzLDE1IEBAIHB1YmxpYzoKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwg
Y29uc3QgU3RhY2smKTsKIAogICAgIC8vIENhbGxzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMp
OwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1
bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0
cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAKICAgICB2b2lkIGRpZEZpbmlzaFBh
cnNpbmdMb2NhbHMoKTsKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50
R2VuZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBk
dW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiwgY29uc3QgU3RhY2sqKSB7IH0KKyAgICB2
b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgR2VuZXJpY0xhYmVsPFdhc206OkdlbmVyYXRvclRyYWl0cz47CkBAIC0y
MzgsOCArMjQ5LDggQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgTExJbnRDYWxsSW5mb3JtYXRpb24g
ewogICAgICAgICB1bnNpZ25lZCBzdGFja09mZnNldDsKICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZTdGFja0FyZ3VtZW50czsKLSAgICAgICAgRXhwcmVzc2lvbkxpc3QgYXJndW1lbnRzOwotICAg
ICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cHJlc3Npb25MaXN0Jik+IGNvbW1pdFJlc3Vs
dHM7CisgICAgICAgIFJlc3VsdExpc3QgYXJndW1lbnRzOworICAgICAgICBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFJlc3VsdExpc3QmKT4gY29tbWl0UmVzdWx0czsKICAgICB9OwogCiAgICAgTExJ
bnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVy
ZSYpOwpAQCAtMjgxLDggKzI5Miw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXREcm9wS2VlcENv
dW50KGNvbnN0IENvbnRyb2xUeXBlJiB0YXJnZXQsIHVuc2lnbmVkJiBzdGFydE9mZnNldCwgdW5z
aWduZWQmIGRyb3AsIHVuc2lnbmVkJiBrZWVwKQogICAgIHsKICAgICAgICAgc3RhcnRPZmZzZXQg
PSB0YXJnZXQuc3RhY2tTaXplKCkgKyAxOwotICAgICAgICBrZWVwID0gdGFyZ2V0LnRhcmdldEFy
aXR5KCk7Ci0gICAgICAgIGRyb3AgPSBtX3N0YWNrU2l6ZSAtIHRhcmdldC5zdGFja1NpemUoKSAt
IHRhcmdldC50YXJnZXRBcml0eSgpOworICAgICAgICBrZWVwID0gdGFyZ2V0LmJyYW5jaFRhcmdl
dEFyaXR5KCk7CisgICAgICAgIGRyb3AgPSBtX3N0YWNrU2l6ZSAtIHRhcmdldC5zdGFja1NpemUo
KSAtIHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOwogICAgIH0KIAogICAgIHZvaWQgZHJvcEtl
ZXAoU3RhY2smIHZhbHVlcywgY29uc3QgQ29udHJvbFR5cGUmIHRhcmdldCwgYm9vbCBkcm9wVmFs
dWVzKQpAQCAtMzUxLDMyICszNjIsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3Rh
Y2soZXhwcmVzc2lvblN0YWNrLCBbJl0oVmlydHVhbFJlZ2lzdGVyJiBleHByZXNzaW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgc2xvdCkgewotICAgICAgICAgICAgQVNTRVJUKGV4cHJlc3Npb24gPT0gc2xv
dCB8fCBleHByZXNzaW9uLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9uLmlzQXJndW1lbnQoKSB8
fCBleHByZXNzaW9uLnRvTG9jYWwoKSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnMpOwotICAgICAg
ICAgICAgaWYgKGV4cHJlc3Npb24gPT0gc2xvdCkKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFj
ayhleHByZXNzaW9uU3RhY2ssIFsmXShUeXBlZEV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFZpcnR1
YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgICAgICBBU1NFUlQoZXhwcmVzc2lvbi52YWx1ZSgp
ID09IHNsb3QgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9u
LnZhbHVlKCkuaXNBcmd1bWVudCgpIHx8IGV4cHJlc3Npb24udmFsdWUoKS50b0xvY2FsKCkgPCBt
X2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnZhbHVl
KCkgPT0gc2xvdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBXYXNtTW92
OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOwotICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHNsb3Q7CisgICAgICAgICAgICBleHByZXNzaW9uID0gVHlwZWRFeHByZXNzaW9uIHsgZXhwcmVz
c2lvbi50eXBlKCksIHNsb3QgfTsKICAgICAgICAgfSk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICB9CiAKLSAgICBTdGFjayBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgU3RhY2smIHN0YWNrKQorICAgIHZvaWQgc3BsaXRTdGFjayhCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgU3RhY2smIG5ld1N0YWNrKQogICAgIHsK
LSAgICAgICAgU3RhY2sgcmVzdWx0ID0gSlNDOjpXYXNtOjpzcGxpdFN0YWNrKHNpZ25hdHVyZSwg
c3RhY2spOworICAgICAgICBKU0M6Oldhc206OnNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3Np
bmdTdGFjaywgbmV3U3RhY2spOwogCi0gICAgICAgIG1fc3RhY2tTaXplIC09IHJlc3VsdC5zaXpl
KCk7CisgICAgICAgIG1fc3RhY2tTaXplIC09IG5ld1N0YWNrLnNpemUoKTsKICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKHN0YWNrLCBbJl0o
VmlydHVhbFJlZ2lzdGVyJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewotICAg
ICAgICAgICAgQVNTRVJUKGV4cHJlc3Npb24gPT0gc2xvdCB8fCBleHByZXNzaW9uLmlzQ29uc3Rh
bnQoKSB8fCBleHByZXNzaW9uLmlzQXJndW1lbnQoKSB8fCBleHByZXNzaW9uLnRvTG9jYWwoKSA8
IG1fY29kZUJsb2NrLT5tX251bVZhcnMpOwotICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0g
c2xvdCB8fCBleHByZXNzaW9uLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25T
dGFjayhlbmNsb3NpbmdTdGFjaywgWyZdKFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmly
dHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uLnZhbHVl
KCkgPT0gc2xvdCB8fCBleHByZXNzaW9uLnZhbHVlKCkuaXNDb25zdGFudCgpIHx8IGV4cHJlc3Np
b24udmFsdWUoKS5pc0FyZ3VtZW50KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSA8
IG1fY29kZUJsb2NrLT5tX251bVZhcnMpOworICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24udmFs
dWUoKSA9PSBzbG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBl
eHByZXNzaW9uKTsKLSAgICAgICAgICAgIGV4cHJlc3Npb24gPSBzbG90OworICAgICAgICAgICAg
ZXhwcmVzc2lvbiA9IFR5cGVkRXhwcmVzc2lvbiB7IGV4cHJlc3Npb24udHlwZSgpLCBzbG90IH07
CiAgICAgICAgIH0pOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIG1fc3Rh
Y2tTaXplICs9IHJlc3VsdC5zaXplKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IG1fc3RhY2tTaXplICs9IG5ld1N0YWNrLnNpemUoKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgU3dp
dGNoRW50cnkgewpAQCAtMzk3LDIzICs0MDcsMjMgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPExh
YmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5Pj4gbV9zd2l0Y2hlczsKICAgICBFeHByZXNzaW9uVHlw
ZSBtX2pzTnVsbENvbnN0YW50OwogICAgIEV4cHJlc3Npb25UeXBlIG1femVyb0NvbnN0YW50Owot
ICAgIEV4cHJlc3Npb25MaXN0IG1fdW5pdGlhbGl6ZWRMb2NhbHM7CisgICAgUmVzdWx0TGlzdCBt
X3VuaXRpYWxpemVkTG9jYWxzOwogICAgIEhhc2hNYXA8RW5jb2RlZEpTVmFsdWUsIFZpcnR1YWxS
ZWdpc3RlciwgV1RGOjpJbnRIYXNoPEVuY29kZWRKU1ZhbHVlPiwgQ29uc3RhbnRNYXBIYXNoVHJh
aXRzPiBtX2NvbnN0YW50TWFwOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IG1fcmVz
dWx0czsKICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX21h
eFN0YWNrU2l6ZSB7IDAgfTsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlv
bkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhf
dCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewotICAgIExMSW50R2VuZXJhdG9y
IGxsaW50R2VuZXJhdG9yKGluZm8sIGZ1bmN0aW9uSW5kZXgsIHRocm93V2FzbUV4Y2VwdGlvbiwg
c2lnbmF0dXJlKTsKKyAgICBMTEludEdlbmVyYXRvciBsbGludEdlbmVyYXRvcihpbmZvLCBmdW5j
dGlvbkluZGV4LCBzaWduYXR1cmUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9y
PiBwYXJzZXIobGxpbnRHZW5lcmF0b3IsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBh
cnNlKCkpOwogCiAgICAgcmV0dXJuIGxsaW50R2VuZXJhdG9yLmZpbmFsaXplKCk7CiB9CiAKLUxM
SW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJikKK0xMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJikKICAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVl
PEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5jdGlvbkluZGV4KSwgMCkKICAgICAsIG1faW5mbyhpbmZv
KQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC00MjIsOSArNDMyLDYg
QEAgTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkkKICAgICBtX3N0YWNrU2l6ZSA9IG51bWJlck9mTExJ
bnRDYWxsZWVTYXZlUmVnaXN0ZXJzOwogICAgIG1fbWF4U3RhY2tTaXplID0gbnVtYmVyT2ZMTElu
dENhbGxlZVNhdmVSZWdpc3RlcnM7CiAKLSAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQotICAg
ICAgICBUaHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21F
eGNlcHRpb24pOwotCiAgICAgV2FzbUVudGVyOjplbWl0KHRoaXMpOwogfQogCkBAIC01MTcsOCAr
NTI0LDggQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICAgICAgbV9tYXhTdGFja1NpemUg
PSBtX3N0YWNrU2l6ZTsKIAogCi0gICAgRXhwcmVzc2lvbkxpc3QgYXJndW1lbnRzKHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCkpOwotICAgIEV4cHJlc3Npb25MaXN0IHRlbXBvcmFyeVJlc3VsdHMo
c2lnbmF0dXJlLnJldHVybkNvdW50KCkpOworICAgIFJlc3VsdExpc3QgYXJndW1lbnRzKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkpOworICAgIFJlc3VsdExpc3QgdGVtcG9yYXJ5UmVzdWx0cyhz
aWduYXR1cmUucmV0dXJuQ291bnQoKSk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNl
dCA9IG1fc3RhY2tTaXplOwogICAgIGNvbnN0IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAt
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwpAQCAtNTgyLDcgKzU4OSw3IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAKICAgICBtX3N0YWNrU2l6ZSA9IGluaXRpYWxTdGFja1Np
emU7CiAKLSAgICBhdXRvIGNvbW1pdFJlc3VsdHMgPSBbdGhpcywgdGVtcG9yYXJ5UmVzdWx0cyA9
IFdURk1vdmUodGVtcG9yYXJ5UmVzdWx0cyldKEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSB7Cisg
ICAgYXV0byBjb21taXRSZXN1bHRzID0gW3RoaXMsIHRlbXBvcmFyeVJlc3VsdHMgPSBXVEZNb3Zl
KHRlbXBvcmFyeVJlc3VsdHMpXShSZXN1bHRMaXN0JiByZXN1bHRzKSB7CiAgICAgICAgIGZvciAo
YXV0byB0ZW1wb3JhcnlSZXN1bHQgOiB0ZW1wb3JhcnlSZXN1bHRzKSB7CiAgICAgICAgICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQgPSBwdXNoKCk7CiAgICAgICAgICAgICBXYXNtTW92OjplbWl0
KHRoaXMsIHJlc3VsdCwgdGVtcG9yYXJ5UmVzdWx0KTsKQEAgLTY4OCwxNiArNjk1LDE1IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSkgLT4gUGFydGlhbFJlc3VsdAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0
eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIG1fY29kZUJsb2Nr
LT5tX251bVZhcnMgKz0gY291bnQ7Ci0gICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgYXV0
byBsb2NhbCA9IHB1c2goKTsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2Ug
VHlwZTo6QW55cmVmOgotICAgICAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6Ci0gICAgICAgICAgICBt
X3VuaXRpYWxpemVkTG9jYWxzLmFwcGVuZChsb2NhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBUeXBlOjpBbnlyZWY6CisgICAgY2FzZSBUeXBlOjpGdW5jcmVm
OgorICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgIG1fdW5pdGlhbGl6ZWRMb2Nh
bHMuYXBwZW5kKHB1c2goKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IG1fc3RhY2tTaXplICs9IGNvdW50OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJu
IHsgfTsKIH0KQEAgLTc0OSwxMSArNzU1LDExIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OnNldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdldCA9IHZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbChp
bmRleCk7CiAKICAgICAvLyBJZiB0aGlzIGxvY2FsIGlzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2sg
d2UgbmVlZCB0byBtYXRlcmlhbGl6ZSBpdCwgb3RoZXJ3aXNlIGl0J2xsIHNlZSB0aGUgbmV3IHZh
bHVlIGluc3RlYWQgb2YgdGhlIG9sZCBvbmUKLSAgICB3YWxrRXhwcmVzc2lvblN0YWNrKG1fcGFy
c2VyLT5leHByZXNzaW9uU3RhY2soKSwgWyZdKFZpcnR1YWxSZWdpc3RlciYgZXhwcmVzc2lvbiwg
VmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKLSAgICAgICAgaWYgKGV4cHJlc3Npb24gIT0gdGFyZ2V0
KQorICAgIHdhbGtFeHByZXNzaW9uU3RhY2sobV9wYXJzZXItPmV4cHJlc3Npb25TdGFjaygpLCBb
Jl0oVHlwZWRFeHByZXNzaW9uJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewor
ICAgICAgICBpZiAoZXhwcmVzc2lvbi52YWx1ZSgpICE9IHRhcmdldCkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBleHByZXNzaW9uKTsKLSAg
ICAgICAgZXhwcmVzc2lvbiA9IHNsb3Q7CisgICAgICAgIGV4cHJlc3Npb24gPSBUeXBlZEV4cHJl
c3Npb24geyBleHByZXNzaW9uLnR5cGUoKSwgc2xvdCB9OwogICAgIH0pOwogCiAgICAgV2FzbU1v
djo6ZW1pdCh0aGlzLCB0YXJnZXQsIHZhbHVlKTsKQEAgLTc4MCw3ICs3ODYsNyBAQCBhdXRvIExM
SW50R2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKSAtPiBQYXJ0aWFsUgogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2ln
bmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgYmxv
Y2ssIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QgbG9vcEluZGV4KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2sp
OworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwog
ICAgIG1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKG5ld1N0YWNrKTsKIAogICAgIFJlZjxM
YWJlbD4gYm9keSA9IG5ld0VtaXR0ZWRMYWJlbCgpOwpAQCAtNzk5LDcgKzgwNSw3IEBAIGF1dG8g
TExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYg
ZW5jbG9zaW5nU3RhY2ssIENvCiAgICAgICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsg
Y29udHJvbEluZGV4IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9s
SW5kZXgpIHsKICAgICAgICAgU3RhY2smIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwotICAgICAg
ICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGZvciAo
VHlwZWRFeHByZXNzaW9uIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgICAg
ICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4cHJlc3Npb24pOwogICAgIH0KIApAQCAtODE3LDcgKzgy
Myw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSkgLT4gQ29udHJvbFR5cGUKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQmxvY2so
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xU
eXBlJiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAg
bmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNw
bGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIG5ld0Js
b2NrID0gQ29udHJvbFR5cGU6OmJsb2NrKHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIG5ld0xhYmVs
KCkpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC04MjcsNyArODMzLDcgQEAgYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIFMKICAgICBSZWY8TGFiZWw+IGFsdGVybmF0ZSA9IG5ld0xhYmVsKCk7CiAgICAg
UmVmPExhYmVsPiBjb250aW51YXRpb24gPSBuZXdMYWJlbCgpOwogCi0gICAgbmV3U3RhY2sgPSBz
cGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2ln
bmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogCiAgICAgV2FzbUpmYWxzZTo6ZW1p
dCh0aGlzLCBjb25kaXRpb24sIGFsdGVybmF0ZS0+YmluZCh0aGlzKSk7CiAKQEAgLTk0Nyw4ICs5
NTMsMTEgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9s
RW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmUKICAgICAgICAgLy8gc2luY2UgdGhleSBt
aWdodCBub3QgaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIHZhbHVlcyBpbiB0aGUgZXhwcmVzc2lv
biBzdGFjay4KICAgICAgICAgLy8gSW5zdGVhZCwgd2UgZG8gYSBzdHJpY3RlciBjb25zaXN0ZW5j
eSBjaGVjayBiZWxvdy4KICAgICAgICAgYXV0byB0bXAgPSBwdXNoKE5vQ29uc2lzdGVuY3lDaGVj
ayk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZXhwcmVzc2lvblN0YWNrLCB1bnJlYWNoYWJsZSB8
fCB0bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2suYXBwZW5kKHRtcCk7CisgICAgICAgIEFTU0VSVCh1bnJlYWNoYWJsZSB8fCB0
bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ldLnZhbHVlKCkpOworICAgICAgICBpZiAodW5yZWFjaGFi
bGUpCisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RB
bmRBcHBlbmQoZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSwgdG1wKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4
cHJlc3Npb25TdGFja1tpXSk7CiAgICAgfQogCiAgICAgaWYgKG1fbGFzdE9wY29kZUlEID09IHdh
c21fam1wICYmIGRhdGEubV9jb250aW51YXRpb24tPnVucmVzb2x2ZWRKdW1wcygpLnNpemUoKSA9
PSAxICYmIGRhdGEubV9jb250aW51YXRpb24tPnVucmVzb2x2ZWRKdW1wcygpWzBdID09IHN0YXRp
Y19jYXN0PGludD4obV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpKSB7CkBAIC05NzYsNyArOTg1
LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6ZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCBjb25zdCBTdGFjayYgZXhwcmVzc2kKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IExMSW50R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNz
aW9uTGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09
IGFyZ3Muc2l6ZSgpKTsKICAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9y
bWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVyZSk7CkBAIC05OTAsNyArOTk5LDcgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25MaXN0JiBy
ZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5k
aXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxh
c3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0
b3IuaAppbmRleCBlZDUwNzhiZWM5YWIzNDM3NDg5NzJmNDc4MWVmOTkwNDE3Mzc5Y2ZmLi44OWNk
YzcxMGYxOGEyOTUyMDRiNDdiMDE3MjI0MDBlOTU1NGY0NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaApAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9j
azsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBT
aWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShj
b25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3Bw
CmluZGV4IGJjZWViMjg2YmEzY2IzMTk3ZWJmYjgwYjRlNWVmNTE2ZmFiNGQ1OWEuLjgyYWE3NTc1
NGY3ZjFlZWRhZjM0ZWNjMjc2ZWNhYThhZGYxYTgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
QjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlRHVtcGVyLmgiCiAjaW5jbHVkZSAi
Q2FsbGVlQml0cy5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVu
a3MuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpA
QCAtNDQsNiArNDUsMjEgQEAgbmFtZXNwYWNlIFdhc21MTEludFBsYW5JbnRlcm5hbCB7CiBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKK0xMSW50UGxhbjo6TExJbnRQbGFu
KENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShz
b3VyY2UpLCB3b3JrLCBXVEZNb3ZlKHRhc2spKQoreworICAgIGlmIChwYXJzZUFuZFZhbGlkYXRl
TW9kdWxlKG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKSkKKyAgICAgICAgcHJlcGFy
ZSgpOworfQorCitMTEludFBsYW46OkxMSW50UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+IGluZm8sIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIGNhbGxlZXMsIENv
bXBsZXRpb25UYXNrJiYgdGFzaykKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwg
QXN5bmNXb3JrOjpGdWxsQ29tcGlsZSwgV1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fY2FsbGVlcyhj
YWxsZWVzKQoreworICAgIHByZXBhcmUoKTsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCk7Cit9CisKIGJvb2wgTExJbnRQbGFuOjpwcmVw
YXJlSW1wbCgpCiB7CiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zOwpAQCAtNjIsMTAgKzc4LDkgQEAgdm9pZCBMTEludFBsYW46OmNvbXBp
bGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAg
ICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNp
emUoKSArIGZ1bmN0aW9uSW5kZXg7CiAgICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3Bh
Y2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKLSAgICBBU1NFUlQo
dmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpKSk7CiAKICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhd
ID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1
bHQgPSBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rp
b24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgZnVu
Y3Rpb25JbmRleCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9u
LmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIGZ1bmN0
aW9uSW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7
CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTc4LDQxICs5Mywx
NSBAQCB2b2lkIExMSW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpCiAgICAgfQogCiAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0g
PSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwotCi0gICAgaWYgKG1fZXhwb3J0ZWRG
dW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7Ci0g
ICAgICAgIEVtYmVkZXJUb1dhc21GdW5jdGlvbiBlbnRyeTsKLSAgICAgICAgZW50cnkuaml0ID0g
bWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7Ci0gICAgICAgIGVudHJ5LmZ1bmN0aW9uID0gbV9j
cmVhdGVFbWJlZGRlcldyYXBwZXIoKmVudHJ5LmppdCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdh
c21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwg
bV9tb2RlLCBmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwotICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1
bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbnRyeSkpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0KIH0KIAogdm9pZCBM
TEludFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlcikKIHsKLSAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbklu
ZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRl
eCsrKSB7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRl
eF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0KLSAgICAgICAgaWYgKGF1dG8gaXQgPSBtX2Vt
YmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZmluZChmdW5jdGlvbkluZGV4KTsgaXQgIT0g
bV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKml0LT52YWx1ZS5qaXQsIG51bGxwdHIsIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKSkgewotICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtl
U3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBh
dCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXQtPnZhbHVlLmZ1bmN0
aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+
KAotICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlv
blB0clRhZywgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0
aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKLSAgICAgICAg
ICAgICAgICBudWxscHRyKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHVuc2lnbmVkIGZ1bmN0
aW9uQ291bnQgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7Ci0gICAgaWYgKGZ1bmN0
aW9uQ291bnQpIHsKKyAgICBpZiAoIW1fY2FsbGVlcyAmJiBmdW5jdGlvbkNvdW50KSB7CiAgICAg
ICAgIC8vIExMSW50IGVudHJ5cG9pbnQgdGh1bmtzIGdlbmVyYXRpb24KICAgICAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKLSAgICAgICAgbV9jYWxsZWVzLnJlc2l6ZShmdW5jdGlvbkNvdW50KTsKKyAg
ICAgICAgbV9jYWxsZWVzVmVjdG9yLnJlc2l6ZShmdW5jdGlvbkNvdW50KTsKICAgICAgICAgVmVj
dG9yPENDYWxsSGVscGVyczo6TGFiZWw+IGVudHJ5cG9pbnRzKGZ1bmN0aW9uQ291bnQpOwogICAg
ICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpKdW1wPiBqdW1wcyhmdW5jdGlvbkNvdW50KTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAt
MTIxLDcgKzExMCw3IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSkpCiAgICAgICAgICAgICAgICAgQnl0
ZWNvZGVEdW1wZXI6OmR1bXBCbG9jayhtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpXS5nZXQoKSwg
bV9tb2R1bGVJbmZvcm1hdGlvbiwgV1RGOjpkYXRhRmlsZSgpKTsKIAotICAgICAgICAgICAgbV9j
YWxsZWVzW2ldID0gV2FzbTo6TExJbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2ldKSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9u
LT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpOworICAgICAgICAgICAgbV9j
YWxsZWVzVmVjdG9yW2ldID0gTExJbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2ldKSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9u
LT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpOwogICAgICAgICAgICAgZW50
cnlwb2ludHNbaV0gPSBqaXQubGFiZWwoKTsKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZVNsb3QoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDUFVSZWdpc3RlcikpOwpAQCAtMTMwLDcgKzExOSw3IEBA
IHZvaWQgTExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpCiAjZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZS4KICNl
bmRpZgotICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihDYWxsZWVCaXRzOjpib3hXYXNtKG1fY2FsbGVlc1tpXS5wdHIoKSkpLCBjYWxsZWVTbG90KTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoQ2Fs
bGVlQml0czo6Ym94V2FzbShtX2NhbGxlZXNWZWN0b3JbaV0ucHRyKCkpKSwgY2FsbGVlU2xvdCk7
CiAgICAgICAgICAgICBqdW1wc1tpXSA9IGppdC5qdW1wKCk7CiAgICAgICAgIH0KIApAQCAtMTQx
LDE4ICsxMzAsNTEgQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICAgICAgfQogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIG1fY2Fs
bGVlc1tpXS0+c2V0RW50cnlwb2ludChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRy
VGFnPihlbnRyeXBvaW50c1tpXSkpOworICAgICAgICAgICAgbV9jYWxsZWVzVmVjdG9yW2ldLT5z
ZXRFbnRyeXBvaW50KGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGVudHJ5
cG9pbnRzW2ldKSk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbms8SklUVGh1bmtQdHJUYWc+
KGp1bXBzW2ldLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4oTExJbnQ6Ondhc21G
dW5jdGlvbkVudHJ5VGh1bmsoKS5jb2RlKCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZW50
cnlUaHVua3MgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcs
ICJXYXNtIExMSW50IGVudHJ5IHRodW5rcyIpOworICAgICAgICBtX2NhbGxlZXMgPSBtX2NhbGxl
ZXNWZWN0b3IuZGF0YSgpOworICAgIH0KKworICAgIGlmIChtX2FzeW5jV29yayA9PSBBc3luY1dv
cms6OlZhbGlkYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodWludDMyX3QgZnVu
Y3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5j
dGlvbnMuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKKyAgICAgICAgaWYgKG1fZXhwb3J0ZWRG
dW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7Cisg
ICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwor
ICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQ7
CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gZnVuY3Rpb24g
PSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoaml0LCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIGZ1bmN0aW9uSW5kZXgpOworCisgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgaWYgKFVO
TElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICBCYXNlOjpmYWlsKGxvY2tlciwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5
IGluIGZ1bmN0aW9uIGVudHJ5cG9pbnQgYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rp
b25JbmRleCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxC
Mzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgQjNDb21waWxhdGlvblB0clRhZywgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50
WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpKSwKKyAgICAgICAgICAgICAgICBudWxscHRyKTsKKworICAgICAgICAgICAgUmVmPEVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZT4gY2FsbGVlID0gRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCkpOworICAgICAgICAgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGlzIHJlcGF0Y2hQb2ludGVyIC0ganVzdCBwYXNzIGluIHRoZSBjYWxsZWUg
ZGlyZWN0bHkKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjY0NjIKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0
aW9uKQorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5j
dGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIo
KSkpOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJDYWxsZWVzLmFkZChm
dW5jdGlvbkluZGV4LCBXVEZNb3ZlKGNhbGxlZSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZv
ciAoYXV0byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAg
IGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBn
ZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2Vk
IGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY0NjIKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wb3J0cyBjb3VsZCBoYXZl
IGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LiBU
aGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4KKyAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2NDYyCiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21F
eGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmNvZGUoKTsKICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV9jYWxsZWVzW2Nh
bGwuZnVuY3Rpb25JbmRleFNwYWNlIC0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rp
b25Db3VudCgpXS0+ZW50cnlwb2ludCgpOwpAQCAtMTYxLDIxICsxODMsMjUgQEAgdm9pZCBMTElu
dFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
cikKICAgICB9CiB9CiAKLXZvaWQgTExJbnRQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBD
YWxsZWVJbml0aWFsaXplciYgY2FsbGJhY2spCit2b2lkIExMSW50UGxhbjo6d29yayhDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXgg
PCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4
KSB7Ci0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZTsKLSAgICAgICAgaWYgKGF1dG8gaXQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bnMuZmluZChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpOyBpdCAhPSBtX2VtYmVkZGVyVG9XYXNtSW50
ZXJuYWxGdW5jdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZSA9IFdhc206OkVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoaXQt
PnZhbHVlLmZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVl
LmZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24pCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKGl0LT52YWx1ZS5mdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0
aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBX
VEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUobV9jYWxsZWVzW2ludGVy
bmFsRnVuY3Rpb25JbmRleF0pKTsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0
YXRlOjpQcmVwYXJlZDoKKyAgICAgICAgY29tcGlsZUZ1bmN0aW9ucyhlZmZvcnQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFN0YXRlOjpDb21waWxlZDoKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCitib29sIExMSW50UGxhbjo6ZGlk
UmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNpZ25lZCwgY29uc3QgRnVuY3Rpb25EYXRhJikKK3sKKyAg
ICAvLyBWYWxpZGF0aW9uIGlzIGRvbmUgaW5saW5lIGJ5IHRoZSBwYXJzZXIKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludFBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4u
aAppbmRleCA2YzkxZDI3YmYyMzljYzM2Zjc4YzU3NGZkZDFkZmQzM2QwZjlhODdmLi40MmRlODEz
M2I3MmZjNWZlNTE5OWMxOWY2ZTMyM2U5ZTM3YjFjOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50UGxhbi5oCkBAIC0zNywxNCArMzcsMTYgQEAgY2xhc3MgQ2FsbExp
bmtJbmZvOwogbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBMTEludENhbGxlZTsKK2NsYXNzIEVt
YmVkZGVyRW50cnlwb2ludENhbGxlZTsKKwordXNpbmcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
TWFwID0gSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4s
IHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+OwogCiBjbGFzcyBMTEludFBsYW4gZmluYWwgOiBw
dWJsaWMgRW50cnlQbGFuIHsKLXB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gRW50cnlQbGFuOwog
Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29u
c3QgQ2FsbGVlSW5pdGlhbGl6ZXImKSBvdmVycmlkZTsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBMTEludFBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmss
IENvbXBsZXRpb25UYXNrJiYpOworICAgIExMSW50UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUlu
Zm9ybWF0aW9uPiwgY29uc3QgUmVmPExMSW50Q2FsbGVlPiosIENvbXBsZXRpb25UYXNrJiYpOwog
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+JiYgdGFrZUVu
dHJ5VGh1bmtzKCkKICAgICB7CkBAIC01MiwyMCArNTQsMzcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX2VudHJ5VGh1bmtzKTsKICAgICB9CiAKKyAgICBWZWN0b3I8UmVmPExM
SW50Q2FsbGVlPj4mJiB0YWtlQ2FsbGVlcygpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fY2Fs
bGVlc1ZlY3Rvcik7CisgICAgfQorCisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlTWFwJiYg
dGFrZUVtYmVkZGVyQ2FsbGVlcygpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFp
bGVkKCkgJiYgIWhhc1dvcmsoKSk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW1iZWRkZXJD
YWxsZWVzKTsKKyAgICB9CisKKyAgICBib29sIGhhc1dvcmsoKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7CisgICAgfQorCisg
ICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKKworICAgIGJvb2wgZGlk
UmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNpZ25lZCwgY29uc3QgRnVuY3Rpb25EYXRhJikgb3ZlcnJp
ZGU7CisKIHByb3RlY3RlZDoKICAgICBib29sIHByZXBhcmVJbXBsKCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IEVtYmVkZXJUb1dhc21GdW5jdGlvbiB7Ci0g
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGppdDsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGZ1bmN0aW9uOwotICAgIH07Ci0KICAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPj4gbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnM7Ci0gICAgVmVjdG9yPFJlZjxMTEludENhbGxlZT4+IG1fY2FsbGVlczsKLSAgICBIYXNo
TWFwPHVpbnQzMl90LCBFbWJlZGVyVG9XYXNtRnVuY3Rpb24sIHR5cGVuYW1lIERlZmF1bHRIYXNo
PHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBjb25zdCBSZWY8
TExJbnRDYWxsZWU+KiBtX2NhbGxlZXMgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlZjxMTElu
dENhbGxlZT4+IG1fY2FsbGVlc1ZlY3RvcjsKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVN
YXAgbV9lbWJlZGRlckNhbGxlZXM7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGls
YXRpb25QdHJUYWc+IG1fZW50cnlUaHVua3M7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4IDQ0YTI3NDMxOGIxZmZjNjZiN2E2MWMyOTQ3Nzk4NjBj
NDZiMDU4MjYuLjNjODQzMmVjZGE2NmU2ZjcyMjdiYmZiYzA3YjZjMjY5Y2VkZjZiNGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC0yOCwxNCArMjgsMjIg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgi
CiAjaW5jbHVkZSAiV2FzbUxMSW50UGxhbi5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1h
dGlvbi5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1Nb2R1bGU6Ok1vZHVsZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYg
bW9kdWxlSW5mb3JtYXRpb24pCi0gICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9k
dWxlSW5mb3JtYXRpb24pKQorTW9kdWxlOjpNb2R1bGUoTExJbnRQbGFuJiBwbGFuKQorICAgIDog
bV9tb2R1bGVJbmZvcm1hdGlvbihwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpKQorICAgICwg
bV9sbGludENhbGxlZXMocGxhbi50YWtlQ2FsbGVlcygpKQorICAgICwgbV9sbGludEVudHJ5VGh1
bmtzKHBsYW4udGFrZUVudHJ5VGh1bmtzKCkpCit7Cit9CisKK01vZHVsZTo6TW9kdWxlKEJCUVBs
YW4mIHBsYW4pCisgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKHBsYW4udGFrZU1vZHVsZUluZm9y
bWF0aW9uKCkpCiB7CiB9CiAKQEAgLTQ2LDM2ICs1NCw1MCBAQCBXYXNtOjpTaWduYXR1cmVJbmRl
eCBNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBm
dW5jdAogICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKIH0KIAotc3RhdGljIE1vZHVs
ZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChFbnRyeVBsYW4mIHBsYW4p
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQbGFuPgorc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3Vs
dCBtYWtlVmFsaWRhdGlvblJlc3VsdChQbGFuJiBwbGFuKQogewogICAgIEFTU0VSVCghcGxhbi5o
YXNXb3JrKCkpOwogICAgIGlmIChwbGFuLmZhaWxlZCgpKQogICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxTdHJpbmc+KHBsYW4uZXJyb3JNZXNzYWdlKCkpOwotICAgIHJldHVybiBNb2R1bGU6OlZh
bGlkYXRpb25SZXN1bHQoTW9kdWxlOjpjcmVhdGUocGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24o
KSkpOworICAgIHJldHVybiBNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQoTW9kdWxlOjpjcmVhdGUo
cGxhbikpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBQbGFuVD4KIHN0YXRpYyBQbGFuOjpDb21w
bGV0aW9uVGFzayBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9u
Q2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxQbGFu
OjpDYWxsYmFja1R5cGU+KFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoUGxhbiYgcGxh
bikgewogICAgICAgICBBU1NFUlQoIXBsYW4uaGFzV29yaygpKTsKLSAgICAgICAgY2FsbGJhY2st
PnJ1bihtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxMTEludFBsYW4mPihwbGFuKSkp
OworICAgICAgICBjYWxsYmFjay0+cnVuKG1ha2VWYWxpZGF0aW9uUmVzdWx0KHN0YXRpY19jYXN0
PFBsYW5UJj4ocGxhbikpKTsKICAgICB9KTsKIH0KIAogTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0
IE1vZHVsZTo6dmFsaWRhdGVTeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYm
IHNvdXJjZSkKIHsKLSAgICBSZWY8TExJbnRQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBMTElu
dFBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIFBs
YW46OmRvbnRGaW5hbGl6ZSgpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgaWYgKE9wdGlvbnM6
OnVzZVdhc21MTEludCgpKSB7CisgICAgICAgIFJlZjxMTEludFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5UGxhbjo6VmFs
aWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29y
a2xpc3QoKS5lbnF1ZXVlKHBsYW4uZ2V0KCkpOworICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxl
dGlvbigpOworICAgICAgICByZXR1cm4gbWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7
CisgICAgfQorCisgICAgUmVmPEJCUVBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4o
Y29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRv
bnRGaW5hbGl6ZSgpKSk7CiAgICAgcGxhbi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAg
IHJldHVybiBtYWtlVmFsaWRhdGlvblJlc3VsdChwbGFuLmdldCgpKTsKIH0KIAogdm9pZCBNb2R1
bGU6OnZhbGlkYXRlQXN5bmMoQ29udGV4dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291
cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAg
UmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBXVEZNb3Zl
KHNvdXJjZSksIEVudHJ5UGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhX
VEZNb3ZlKGNhbGxiYWNrKSksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBXYXNtOjplbnN1cmVX
b3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVdh
c21MTEludCgpKSB7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBMTElu
dFBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIG1h
a2VWYWxpZGF0aW9uQ2FsbGJhY2s8TExJbnRQbGFuPihXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAg
ICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworICAg
IH0gZWxzZSB7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFu
KGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFs
aWRhdGlvbkNhbGxiYWNrPEJCUVBsYW4+KFdURk1vdmUoY2FsbGJhY2spKSkpOworICAgICAgICBX
YXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92ZShwbGFuKSk7CisgICAgfQogfQog
Ci1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKENvbnRleHQqIGNv
bnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1i
ZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorUmVm
PENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0
LCBNZW1vcnlNb2RlIG1vZGUpCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwog
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTg2LDIyICsxMDgsMjUgQEAg
UmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250
ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIEMKICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBi
YWNrIG9mZiByZXRyeWluZyBhdCBzb21lIHBvaW50OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA2MDcKICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29k
ZUJsb2NrLT5jb21waWxhdGlvbkZpbmlzaGVkKCkgJiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkp
IHsKLSAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwg
Y29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBXVEZN
b3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAg
IGNvbnN0IFJlZjxMTEludENhbGxlZT4qIGxsaW50Q2FsbGVlcyA9IG51bGxwdHI7CisgICAgICAg
IGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlcyA9
IG1fbGxpbnRDYWxsZWVzLmRhdGEoKTsKKyAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpj
cmVhdGUoY29udGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVs
ZUluZm9ybWF0aW9uKCkpLCBsbGludENhbGxlZXMpOwogICAgICAgICBtX2NvZGVCbG9ja3Nbc3Rh
dGljX2Nhc3Q8dWludDhfdD4obW9kZSldID0gY29kZUJsb2NrOwogICAgIH0KICAgICByZXR1cm4g
Y29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6
Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJl
ZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0
aHJvd1dhc21FeGNlcHRpb24pCitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKENv
bnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSkKIHsKLSAgICBSZWY8Q29kZUJsb2NrPiBj
b2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNy
ZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgUmVmPENvZGVC
bG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSk7CiAg
ICAgY29kZUJsb2NrLT53YWl0VW50aWxGaW5pc2hlZCgpOwogICAgIHJldHVybiBjb2RlQmxvY2s7
CiB9CiAKLXZvaWQgTW9kdWxlOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5
TW9kZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2ssIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK3ZvaWQgTW9kdWxlOjpjb21waWxlQXN5bmMoQ29u
dGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRp
b25DYWxsYmFjayYmIHRhc2spCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0
T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldy
YXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9j
ayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUpOwogICAgIGNvZGVCbG9jay0+
Y29tcGlsZUFzeW5jKGNvbnRleHQsIFdURk1vdmUodGFzaykpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKaW5kZXggNjUyZGRkMzdkYjhlNTc4OGQwNTg3NWQyYzJk
ZmM3ZmFkYzllNzM2NS4uMmRhZGI2YTliYWY3MDNmMTlmOTAzNjhhNzU1ZDI1MTAxNWNkYTVmNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtMzcsOSArMzcsMTAg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgQkJRUGxhbjsK
K2NsYXNzIExMSW50UGxhbjsKIHN0cnVjdCBDb250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uOwotY2xhc3MgUGxhbjsKIAogdXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50NjRfdDsKIApA
QCAtNTIsMjYgKzUzLDM0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2
YWxpZGF0ZVN5bmMoQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7CiAgICAgc3Rh
dGljIHZvaWQgdmFsaWRhdGVBc3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNl
LCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNrJiYpOwogCi0gICAgc3RhdGljIFJlZjxN
b2R1bGU+IGNyZWF0ZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24p
CisgICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShCQlFQbGFuJiBwbGFuKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTW9kdWxlKFdURk1vdmUobW9kdWxlSW5mb3JtYXRp
b24pKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1vZHVsZShwbGFuKSk7CisgICAg
fQorCisgICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShMTEludFBsYW4mIHBsYW4pCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNb2R1bGUocGxhbikpOwogICAgIH0KIAog
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206
Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KIAotICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVT
eW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dX
YXNtRXhjZXB0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgTWVtb3J5TW9k
ZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gY29tcGls
ZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUpOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRl
eHQqLCBNZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yKE1lbW9yeU1vZGUgbW9kZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19j
YXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2Nr
PiBnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gZ2V0
T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1vZGUpOwogCi0gICAgTW9kdWxlKFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7CisgICAgTW9kdWxlKEJCUVBsYW4mKTsKKyAgICBNb2R1
bGUoTExJbnRQbGFuJik7CiAgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9y
bWF0aW9uOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpOdW1iZXJP
Zk1lbW9yeU1vZGVzXTsKKyAgICBWZWN0b3I8UmVmPExMSW50Q2FsbGVlPj4gbV9sbGludENhbGxl
ZXM7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IG1fbGxp
bnRFbnRyeVRodW5rczsKICAgICBMb2NrIG1fbG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA2ZjRkZGNhYzdkZTI3ODJiODE2ZjZhZDk0
MjI4ODRjYzQ4MDkyNDk0Li41ZDQ5YzNlOTJhMDAzZWQyZTVlNDk0MmY5YzExOWQ0MDIyM2RjYzcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0xMjIs
MTAgKzEyMiwxMSBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAg
ICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsK
ICAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25T
dGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKExMSW50Q2FsbGVlKiBsbGludENhbGxlZSA9
IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsbGludENhbGxlZS0+dGllclVw
Q291bnRlcigpLm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnNldFJlcGxh
Y2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLT50
aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6
Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5tX2xsaW50Q2FsbGVlcykgeworICAgICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENh
bGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgp
OworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGll
clVwQ291bnRlcigpLm1fbG9jayk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVw
bGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUu
dGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6
OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkg
ewpAQCAtMTYxLDEwICsxNjIsMTEgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZm
b3J0KQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93
YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICByZXBhdGNoQ2Fs
bHMobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBp
ZiAoTExJbnRDYWxsZWUqIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVz
W2ldLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRD
YWxsZWUgPSBsbGludENhbGxlZS0+cmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYg
bGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbaV0uZ2V0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxl
ZS5yZXBsYWNlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFj
ZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLT5vc3JF
bnRyeUNhbGxlZSgpKQorICAgICAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSog
b3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKQogICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxs
ZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW2ldLmdldCgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggMWVkNmNmZmZhMGQ0NGQwMTMxYWJjN2JlMzcw
Y2EwMmNkNTQ2Y2ZlNy4uNWE1M2I5NTkwODM2Zjk0YmNhNGZkMTAzN2Y0NDZhMmMxZTM1Y2MyYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtNDgsMTkgKzQ4LDEx
IEBAIG5hbWVzcGFjZSBXYXNtUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiAKLVBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1v
ZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVk
ZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbikKK1BsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVs
ZUluZm9ybWF0aW9uKFdURk1vdmUoaW5mbykpCi0gICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBl
cihXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlcikpCi0gICAgLCBtX3Rocm93V2FzbUV4Y2Vw
dGlvbih0aHJvd1dhc21FeGNlcHRpb24pCiB7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQsIFdURk1vdmUodGFzaykpKTsKIH0KLQotUGxhbjo6UGxh
bihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRp
b25UYXNrJiYgdGFzaykKLSAgICA6IFBsYW4oY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0cikKLXsKLX0KLQogUGxhbjo6UGxhbihDb250ZXh0KiBj
b250ZXh0LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9u
KE1vZHVsZUluZm9ybWF0aW9uOjpjcmVhdGUoKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5oCmluZGV4IDExMTIzNGY2YjkzNmVlNWZmMjU2Y2YxN2Q1Y2ZiYWQ2YzhlYTZjZDEu
LjliZTZjZTI1MjcwNTNiZDdkOWI5OTg3NmQyNTBmNDBjMzE4ODY1MjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtNTEsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgQ29tcGxldGlvblRhc2sgPSBSZWZQdHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKIAog
ICAgIHN0YXRpYyBDb21wbGV0aW9uVGFzayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVT
aGFyZWRUYXNrPENhbGxiYWNrVHlwZT4oW10oUGxhbiYpIHsgfSk7IH0KLSAgICBQbGFuKENvbnRl
eHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJl
ZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBQbGFuKENvbnRleHQqLCBS
ZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6
IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1
YWxseSBidWlsZGluZyBhIG1vZHVsZSBlLmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKQEAg
LTg4LDkgKzg3LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb250ZXh0
KiwgQ29tcGxldGlvblRhc2s+LCAxPiBtX2NvbXBsZXRpb25UYXNrczsKIAotICAgIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcjsKLSAgICBUaHJvd1dhc21FeGNl
cHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07Ci0KICAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CiAgICAgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZyB9OwogICAgIExvY2sgbV9sb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2xvd1BhdGhzLmNwcAppbmRleCAxNmYzZGFjNzMzNzcyY2YxZThjNDE5ZjRjNmE0ZDE3
ZTkxZjY5YmQyLi4yMTI1YTgwYjgzNGFhNjdjZTg5ZDM3MjM3Mzg0NDU0ZmQyY2YwNjRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNDA0LDcg
KzQwNCw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0woc2V0X2dsb2JhbF9yZWYpCiBleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgV2FzbTo6SW5zdGFuY2UqIGlu
c3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHBjKTsKLSAgICBXQVNNX1JFVFVSTl9UV08oV2FzbTo6VGh1bmtzOjpzaW5nbGV0b24o
KS50aHJvd1dhc21FeGNlcHRpb24oKShjYWxsRnJhbWUsIGV4Y2VwdGlvblR5cGUsIGluc3RhbmNl
KSwgMCk7CisgICAgV0FTTV9SRVRVUk5fVFdPKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKGNh
bGxGcmFtZSwgZXhjZXB0aW9uVHlwZSwgaW5zdGFuY2UpLCAwKTsKIH0KIAogZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX3dhc21fcG9wY291bnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjLCB1aW50MzJfdCB4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmNwcAppbmRleCBmMmIzZWUxNWZkOWFmMjA1MmU0ZjFiM2NhYTRiN2Y0Y2UyODAyN2E0Li5mOTM0
ZjFhMTg2MGFjN2RhMjFjYTZkNWI5YWRjMzQxODZiZTJmODAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcApAQCAtNTYsMTAgKzU2LDggQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5l
cmF0b3IoY29uc3QKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxk
IG5vdCByZWFjaCB0aGlzLgogCi0gICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRocm93V2FzbUV4Y2VwdGlvbikpOworICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldh
c21Ub0pTRXhjZXB0aW9uKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKIH0KIApA
QCAtMTEzLDE5ICsxMTEsNiBAQCBUaHVua3MmIFRodW5rczo6c2luZ2xldG9uKCkKICAgICByZXR1
cm4gKnRodW5rczsKIH0KIAotdm9pZCBUaHVua3M6OnNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQotewotICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKLSAgICAvLyBUaGUgdGh1bmtzIGFyZSB1bmlxdWUgZm9yIHRoZSBl
bnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNoYW5naW5nIHRoZSB0aHJvd2luZyBmdW5jdGlvbiBj
aGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBXZWJBc3NlbWJseS4KLSAgICBSRUxFQVNFX0FTU0VS
VCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwgbV90aHJvd1dhc21FeGNlcHRpb24gPT0gdGhyb3dX
YXNtRXhjZXB0aW9uKTsKLSAgICBtX3Rocm93V2FzbUV4Y2VwdGlvbiA9IHRocm93V2FzbUV4Y2Vw
dGlvbjsKLX0KLQotVGhyb3dXYXNtRXhjZXB0aW9uIFRodW5rczo6dGhyb3dXYXNtRXhjZXB0aW9u
KCkKLXsKLSAgICByZXR1cm4gbV90aHJvd1dhc21FeGNlcHRpb247Ci19Ci0KIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKaW5kZXggODFjYzY2OTUwZmZkOThhNDhiN2Rk
YjcwNGFhYWU2YWU0OGQ1OTI1OS4uYTI4YWJhOTZjZjAzZDQxZDViNDMwZjM4Mzg0NmI2NWU5NTk3
ZDYzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtNDUsOSAr
NDUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHN0YXRp
YyBUaHVua3MmIHNpbmdsZXRvbigpOwogCi0gICAgdm9pZCBzZXRUaHJvd1dhc21FeGNlcHRpb24o
VGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKCk7Ci0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0
dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nU3R1YihUaHVua0dl
bmVyYXRvcik7CkBAIC01Niw3ICs1Myw2IEBAIHByaXZhdGU6CiAgICAgVGh1bmtzKCkgPSBkZWZh
dWx0OwogCiAgICAgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPj4gbV9zdHViczsKLSAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJv
d1dhc21FeGNlcHRpb24geyBudWxscHRyIH07CiAgICAgTG9jayBtX2xvY2s7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCA1YTNmNDNjM2Jk
MGFkOTJlM2FlYzFhZDY1Mzc2NzkzMDA2NWI4ZWM5Li5mOWMwYTNhZWJhNTlmMDNhYTQ3MGQxYjU5
MWJiYTM5ZjdlOWNkNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxp
ZGF0ZS5jcHAKQEAgLTQ2LDYgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9
CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0
dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorCisgICAg
ICAgIEJsb2NrVHlwZSBibG9ja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrVHlwZTsgfQor
ICAgICAgICBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25h
dHVyZTsgfQorCisgICAgICAgIHVuc2lnbmVkIGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QgeyBy
ZXR1cm4gYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wID8gc2lnbmF0dXJlKCktPmFyZ3Vt
ZW50Q291bnQoKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyB9CisgICAgICAgIFR5cGUg
YnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOworICAgICAgICAgICAgcmV0dXJuIGJs
b2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCA/IHNpZ25hdHVyZSgpLT5hcmd1bWVudChpKSA6
IHNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRj
aCAoYmxvY2tUeXBlKCkpIHsKQEAgLTY2LDM0ICs3OSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBvdXQucHJpbnQoc2lnKTsKICAgICAgICAgfQogCi0gICAgICAgIEJsb2NrVHlwZSBibG9ja1R5
cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrVHlwZTsgfQotICAgICAgICBCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQotCi0gICAgICAgIHVu
c2lnbmVkIGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpMb29wID8gc2lnbmF0dXJlKCktPmFyZ3VtZW50Q291bnQoKSA6IHNpZ25hdHVy
ZSgpLT5yZXR1cm5Db3VudCgpOyB9Ci0gICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNp
Z25lZCBpKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRh
cmdldEFyaXR5KCkpOwotICAgICAgICAgICAgcmV0dXJuIGJsb2NrVHlwZSgpID09IEJsb2NrVHlw
ZTo6TG9vcCA/IHNpZ25hdHVyZSgpLT5hcmd1bWVudChpKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5U
eXBlKGkpOwotICAgICAgICB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBCbG9ja1R5cGUgbV9i
bG9ja1R5cGU7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIG1fc2lnbmF0dXJlOwogICAgIH07CiAK
LSAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7Ci0gICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVy
cm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVy
cm9yVHlwZT4gUmVzdWx0OwotICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVHlwZTsKLSAgICB1
c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47Ci0gICAgdXNp
bmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKLSAgICB0eXBlZGVmIENvbnRyb2xEYXRhIENvbnRy
b2xUeXBlOwotICAgIHR5cGVkZWYgRXhwcmVzc2lvbkxpc3QgUmVzdWx0TGlzdDsKLSAgICB0eXBl
ZGVmIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsK
KyAgICBlbnVtIEV4cHJlc3Npb25UeXBlIHsgRW1wdHlFeHByZXNzaW9uIH07CisKKyAgICB1c2lu
ZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhw
ZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJv
clR5cGU+OworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CiAKLSAgICBzdGF0
aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZv
aWQ7IH0KLSAgICBTdGFjayBjcmVhdGVTdGFjaygpIHsgcmV0dXJuIFN0YWNrKCk7IH0KLSAgICBi
b29sIGlzQ29udHJvbFR5cGVJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4g
Y29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgdXNpbmcgQ29udHJv
bEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sRW50cnk7CisgICAgdXNp
bmcgQ29udHJvbFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sU3RhY2s7
CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6UmVzdWx0
TGlzdDsKKyAgICB1c2luZyBTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6U3RhY2s7
CisKKyAgICBzdGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4g
RW1wdHlFeHByZXNzaW9uOyB9OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAg
ICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwo
Y29uc3QgQXJncyYuLi4gYXJncykgY29uc3QKQEAgLTExMywxOCArMTE2LDE4IEBAIHB1YmxpYzoK
IAogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25h
dHVyZSYpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWlu
dDMyX3QpOwotICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0
X3QpIHsgcmV0dXJuIHR5cGU7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBl
LCB1aW50NjRfdCkgeyByZXR1cm4gRW1wdHlFeHByZXNzaW9uOyB9CiAKICAgICAvLyBSZWZlcmVu
Y2VzCi0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhwcmVzc2lv
blR5cGUmIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZGdW5j
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8vIFRhYmxl
cwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4
cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUm
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxl
U2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUp
OwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVTaXplKHVuc2lnbmVkLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBl
JiBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4
cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpOworICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBm
aWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4cHJlc3Np
b25UeXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgY291bnQp
OwogICAgIC8vIExvY2FscwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKTsKQEAgLTE2NywxNDIgKzE3MCw4MSBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUm
LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJ
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgUmVzdWx0TGlzdCYpOwogCi0gICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAh
IW1fbW9kdWxlLm1lbW9yeTsgfQotCi0gICAgVmFsaWRhdGUoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIG1vZHVsZSkKLSAgICAgICAgOiBtX21vZHVsZShtb2R1bGUpCisgICAgVmFsaWRhdGUoKQog
ICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4m
LCBjb25zdCBTdGFjayopOworICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25z
dCBTdGFjayopOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiop
IHsgfQogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQogICAgIHZvaWQgZGlk
UG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAogcHJpdmF0ZToKICAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHVuaWZ5KGNvbnN0IFN0YWNrJiwgY29uc3QgQ29udHJvbERhdGEmKTsKLQotICAg
IFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gY2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbERhdGEm
IHRhcmdldCwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7Ci0KLSAgICBWZWN0b3I8VHlw
ZT4gbV9sb2NhbHM7Ci0gICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1fbW9kdWxlOwogfTsK
IAotYXV0byBWYWxpZGF0ZTo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
KSAtPiBSZXN1bHQKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhhZGRM
b2NhbChzaWduYXR1cmUuYXJndW1lbnQoaSksIDEpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIFZhbGlkYXRlOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9u
VHlwZSYgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxp
ZGF0ZTo6YWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlw
ZSYpIC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX21vZHVsZS50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlz
IGludmFsaWQsIGxpbWl0IGlzICIsIG1fbW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0gICAgcmVzdWx0
ID0gbV9tb2R1bGUudGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCk7Ci0gICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihUeXBlOjpJMzIgIT0gaW5kZXgsICJ0YWJsZS5nZXQgaW5kZXggdG8gdHlw
ZSAiLCBtYWtlU3RyaW5nKGluZGV4KSwgIiBleHBlY3RlZCAiLCBtYWtlU3RyaW5nKFR5cGU6Okkz
MikpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVTZXQo
dW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlw
ZSYgdmFsdWUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVTZXQodW5zaWduZWQs
IEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRh
YmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1
bGUudGFibGVDb3VudCgpKTsKLSAgICBhdXRvIHR5cGUgPSBtX21vZHVsZS50YWJsZXNbdGFibGVJ
bmRleF0ud2FzbVR5cGUoKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAh
PSBpbmRleCwgInRhYmxlLnNldCBpbmRleCB0byB0eXBlICIsIGluZGV4LCAiIGV4cGVjdGVkICIs
IFR5cGU6OkkzMik7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZhbHVl
LCB0eXBlKSwgInRhYmxlLnNldCB2YWx1ZSB0byB0eXBlICIsIHZhbHVlLCAiIGV4cGVjdGVkICIs
IHR5cGUpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS50
eXBlKCkgPT0gVGFibGVFbGVtZW50VHlwZTo6QW55cmVmIHx8IG1fbW9kdWxlLnRhYmxlc1t0YWJs
ZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3JlZik7Ci0KICAgICByZXR1
cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFibGVJ
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjph
ZGRUYWJsZVNpemUodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAg
cmVzdWx0ID0gVHlwZTo6STMyOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRl
eCA+PSBtX21vZHVsZS50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAi
IGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1fbW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0KICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdyb3codW5zaWduZWQgdGFi
bGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBkZWx0YSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdy
b3codW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUmKSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBUeXBlOjpJMzI7Ci0gICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRhYmxl
IGluZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1bGUu
dGFibGVDb3VudCgpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoZmls
bCwgbV9tb2R1bGUudGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkpLCAidGFibGUuZ3JvdyBl
eHBlY3RzIGZpbGwgdmFsdWUgb2YgdHlwZSAiLCBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0u
d2FzbVR5cGUoKSwgIiBnb3QgIiwgZmlsbCk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihU
eXBlOjpJMzIgIT0gZGVsdGEsICJ0YWJsZS5ncm93IGV4cGVjdHMgYW4gaTMyIGRlbHRhIHZhbHVl
LCBnb3QgIiwgbWFrZVN0cmluZyhkZWx0YSkpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0
byBWYWxpZGF0ZTo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQp
IC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVGaWxsKHVuc2lnbmVkLCBFeHByZXNz
aW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSAtPiBSZXN1bHQKIHsKLSAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9tb2R1bGUudGFibGVDb3Vu
dCgpLCAidGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAi
LCBtX21vZHVsZS50YWJsZUNvdW50KCkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZShmaWxsLCBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSksICJ0
YWJsZS5maWxsIGV4cGVjdHMgZmlsbCB2YWx1ZSBvZiB0eXBlICIsIG1fbW9kdWxlLnRhYmxlc1t0
YWJsZUluZGV4XS53YXNtVHlwZSgpLCAiIGdvdCAiLCBmaWxsKTsKLSAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKFR5cGU6OkkzMiAhPSBvZmZzZXQsICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4gaTMy
IG9mZnNldCB2YWx1ZSwgZ290ICIsIG1ha2VTdHJpbmcob2Zmc2V0KSk7Ci0gICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihUeXBlOjpJMzIgIT0gY291bnQsICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4g
aTMyIGNvdW50IHZhbHVlLCBnb3QgIiwgbWFrZVN0cmluZyhjb3VudCkpOwotCiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlJiB2
YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjph
ZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7
Ci0gICAgcmVzdWx0ID0gVHlwZTo6STMyOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZSh2YWx1ZSwgVHlwZTo6QW55cmVmKSwgInJlZi5pc19udWxsIHRvIHR5cGUgIiwgbWFr
ZVN0cmluZyh2YWx1ZSksICIgZXhwZWN0ZWQgIiwgbWFrZVN0cmluZyhUeXBlOjpBbnlyZWYpKTsK
LQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZFJlZkZ1bmModWludDMy
X3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0
ZTo6YWRkUmVmRnVuYyh1aW50MzJfdCwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAg
ICByZXN1bHQgPSBUeXBlOjpGdW5jcmVmOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5k
ZXggPj0gbV9tb2R1bGUuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAicmVmLmZ1bmMgaW5kZXgg
IiwgaW5kZXgsICIgaXMgdG9vIGxhcmdlLCBtYXggaXMgIiwgbV9tb2R1bGUuZnVuY3Rpb25JbmRl
eFNwYWNlU2l6ZSgpKTsKLSAgICBtX21vZHVsZS5hZGRSZWZlcmVuY2VkRnVuY3Rpb24oaW5kZXgp
OwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkTG9jYWwoVHlwZSB0
eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRMb2NhbChU
eXBlLCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBtX2xvY2Fs
cy5zaXplKCkgKyBjb3VudDsKLSAgICBBU1NFUlQoIShDaGVja2VkVWludDMyKGNvdW50KSArIG1f
bG9jYWxzLnNpemUoKSkuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobmV3U2l6ZSA8PSBt
YXhGdW5jdGlvbkxvY2Fscyk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighbV9sb2NhbHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KG5ld1NpemUpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAi
LCBuZXdTaXplLCAiIGxvY2FscyIpOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCi0gICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFwcGVuZCh0eXBlKTsKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjpnZXRMb2Nh
bCh1aW50MzJfdCwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbG9jYWxzLnNpemUoKSwgImF0dGVtcHQgdG8gdXNlIHVu
a25vd24gbG9jYWwgIiwgaW5kZXgsICIgbGFzdCBvbmUgaXMgIiwgbV9sb2NhbHMuc2l6ZSgpKTsK
LSAgICByZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF07CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0
byBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVl
KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90LCBFeHByZXNzaW9u
VHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAgRXhwcmVzc2lvblR5cGUgbG9jYWxUeXBlOwotICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoZ2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlwZSkpOwotICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZSwgbG9jYWxUeXBlKSwgInNl
dF9sb2NhbCB0byB0eXBlICIsIHZhbHVlLCAiIGV4cGVjdGVkICIsIGxvY2FsVHlwZSk7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmdldEds
b2JhbCh1aW50MzJfdCwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2ds
b2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9tb2R1bGUu
Z2xvYmFscy5zaXplKCkpOwotICAgIHJlc3VsdCA9IG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLnR5
cGU7Ci0gICAgQVNTRVJUKGlzVmFsdWVUeXBlKHJlc3VsdCkpOwogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gVmFsaWRhdGU6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUgdmFsdWUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6c2V0R2xvYmFsKHVpbnQzMl90LCBF
eHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihp
bmRleCA+PSBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIg
b2YgdW5rbm93biBnbG9iYWwsIGxpbWl0IGlzICIsIG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpKTsK
LSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLm11dGFi
aWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlzIGlt
bXV0YWJsZSIpOwotCi0gICAgRXhwcmVzc2lvblR5cGUgZ2xvYmFsVHlwZSA9IG1fbW9kdWxlLmds
b2JhbHNbaW5kZXhdLnR5cGU7Ci0gICAgQVNTRVJUKGlzVmFsdWVUeXBlKGdsb2JhbFR5cGUpKTsK
LSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGdsb2JhbFR5cGUgIT0gdmFsdWUsICJzZXRfZ2xv
YmFsICIsIGluZGV4LCAiIHdpdGggdHlwZSAiLCBnbG9iYWxUeXBlLCAiIHdpdGggYSB2YXJpYWJs
ZSBvZiB0eXBlICIsIHZhbHVlKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0zMTEsMTc4ICsy
NTMsMTE0IEBAIFZhbGlkYXRlOjpDb250cm9sVHlwZSBWYWxpZGF0ZTo6YWRkVG9wTGV2ZWwoQmxv
Y2tTaWduYXR1cmUgc2lnbmF0dXJlKQogICAgIHJldHVybiBDb250cm9sRGF0YShCbG9ja1R5cGU6
OlRvcExldmVsLCBzaWduYXR1cmUpOwogfQogCi1zdGF0aWMgVmFsaWRhdGU6OlN0YWNrIHNwbGl0
U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBWYWxpZGF0ZTo6U3RhY2smIHN0YWNrKQot
ewotICAgIFZhbGlkYXRlOjpTdGFjayByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwotICAgIEFTU0VSVChzdGFjay5z
aXplKCkgPj0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwotICAgIHVuc2lnbmVkIG9mZnNl
dCA9IHN0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHN0YWNrW2kgKyBvZmZzZXRdKTsKLSAgICBzdGFj
ay5zaHJpbmsob2Zmc2V0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBhdXRvIFZhbGlkYXRl
OjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+IFJlc3VsdAogewot
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZW5jbG9zaW5nU3RhY2suc2l6ZSgpIDwgc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgYmxvY2su
IEJsb2NrIGV4cGVjdHMgIiwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5
ICIsIGVuY2xvc2luZ1N0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIEJsb2NrIGhhcyBzaWdu
YXR1cmU6ICIsICpzaWduYXR1cmUpOwotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1
cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5n
U3RhY2ssIG5ld1N0YWNrKTsKICAgICBuZXdCbG9jayA9IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6
QmxvY2ssIHNpZ25hdHVyZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
IWlzU3VidHlwZShuZXdTdGFja1tpXSwgc2lnbmF0dXJlLT5hcmd1bWVudChpKSksICJMb29wIGV4
cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSBhIHN1YnR5cGUgb2YgIiwg
c2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbmV3U3Rh
Y2tbaV0pOwogICAgIHJldHVybiB7IH07CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZExvb3AoQmxv
Y2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBl
JiBsb29wLCBTdGFjayYgbmV3U3RhY2ssIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGVuY2xvc2luZ1N0YWNrLnNpemUoKSA8IHNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCAiVG9vIGZldyB2YWx1ZXMgb24gc3RhY2sgZm9yIGxvb3AgYmxvY2suIExv
b3AgZXhwZWN0cyAiLCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwg
ZW5jbG9zaW5nU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gTG9vcCBoYXMgc2lnbmF0dXJl
OiAiLCAqc2lnbmF0dXJlKTsKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBl
bmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNr
LCBuZXdTdGFjayk7CiAgICAgbG9vcCA9IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6TG9vcCwgc2ln
bmF0dXJlKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7ICsraSkKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBl
KG5ld1N0YWNrW2ldLCBzaWduYXR1cmUtPmFyZ3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUg
YXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlIGEgc3VidHlwZSBvZiAiLCBzaWduYXR1cmUt
PmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBuZXdTdGFja1tpXSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkU2VsZWN0KEV4cHJlc3Npb25U
eXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lvblR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVy
bywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRT
ZWxlY3QoRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhw
cmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNv
bmRpdGlvbiAhPSBJMzIsICJzZWxlY3QgY29uZGl0aW9uIG11c3QgYmUgaTMyLCBnb3QgIiwgY29u
ZGl0aW9uKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG5vblplcm8gIT0gemVybywgInNl
bGVjdCByZXN1bHQgdHlwZXMgbXVzdCBtYXRjaCwgZ290ICIsIG5vblplcm8sICIgYW5kICIsIHpl
cm8pOwotICAgIHJlc3VsdCA9IHplcm87CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxp
ZGF0ZTo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2sm
IG5ld1N0YWNrKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBl
LCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJv
bFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJMzIsICJpZiBjb25kaXRpb24gbXVzdCBiZSBp
MzIsIGdvdCAiLCBtYWtlU3RyaW5nKGNvbmRpdGlvbikpOwotICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoZW5jbG9zaW5nU3RhY2suc2l6ZSgpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCks
ICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgaWYgYmxvY2suIElmIGV4cGVjdHMgIiwg
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIGVuY2xvc2luZ1N0YWNr
LnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIElmIGJsb2NrIGhhcyBzaWduYXR1cmU6ICIsICpzaWdu
YXR1cmUpOwotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0
YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNr
KTsKICAgICByZXN1bHQgPSBDb250cm9sRGF0YShCbG9ja1R5cGU6OklmLCBzaWduYXR1cmUpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsg
KytpKQotICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUobmV3U3RhY2tb
aV0sIHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBh
dCBpbmRleCIsIGksICIgdG8gYmUgYSBzdWJ0eXBlIG9mICIsIHNpZ25hdHVyZS0+YXJndW1lbnQo
aSksICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG5ld1N0YWNrW2ldKTsKICAgICByZXR1cm4g
eyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRFbHNlKENvbnRyb2xUeXBlJiBjdXJyZW50LCBj
b25zdCBTdGFjayYgdmFsdWVzKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEVsc2UoQ29u
dHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeSh2YWx1ZXMsIGN1cnJlbnQpKTsKICAgICByZXR1cm4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoY3VycmVudCk7CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBjdXJyZW50KSAtPiBSZXN1bHQKIHsKLSAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKGN1cnJlbnQuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpJ
ZiwgImVsc2UgYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhbiBpZiIpOwogICAgIGN1cnJlbnQg
PSBDb250cm9sRGF0YShCbG9ja1R5cGU6OkJsb2NrLCBjdXJyZW50LnNpZ25hdHVyZSgpKTsKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRSZXR1cm4oQ29udHJvbFR5cGUm
IHRvcExldmVsLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBSZXN1bHQK
K2F1dG8gVmFsaWRhdGU6OmFkZFJldHVybihDb250cm9sVHlwZSYsIGNvbnN0IFN0YWNrJikgLT4g
UmVzdWx0CiB7Ci0gICAgQVNTRVJUKHRvcExldmVsLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
VG9wTGV2ZWwpOwotICAgIHJldHVybiBjaGVja0JyYW5jaFRhcmdldCh0b3BMZXZlbCwgcmV0dXJu
VmFsdWVzKTsKLX0KLQotYXV0byBWYWxpZGF0ZTo6Y2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbFR5
cGUmIHRhcmdldCwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUmVzdWx0Ci17Ci0g
ICAgaWYgKCF0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LQotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IHRh
cmdldC5icmFuY2hUYXJnZXRBcml0eSgpLCB0YXJnZXQuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBl
OjpUb3BMZXZlbCA/ICJicmFuY2ggb3V0IG9mIGZ1bmN0aW9uIiA6ICJicmFuY2ggdG8gYmxvY2si
LCAiIG9uIGV4cHJlc3Npb24gc3RhY2sgb2Ygc2l6ZSAiLCBleHByZXNzaW9uU3RhY2suc2l6ZSgp
LCAiLCBidXQgYmxvY2ssICIsIHRhcmdldCAsICIgZXhwZWN0cyAiLCB0YXJnZXQuYnJhbmNoVGFy
Z2V0QXJpdHkoKSwgIiB2YWx1ZXMiKTsKLQotCi0gICAgdW5zaWduZWQgZXhwcmVzc2lvblN0YWNr
T2Zmc2V0ID0gZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIHRhcmdldC5icmFuY2hUYXJnZXRBcml0
eSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJp
dHkoKTsgKytpKQotICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodGFy
Z2V0LmJyYW5jaFRhcmdldFR5cGUoaSksIGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2tP
ZmZzZXQgKyBpXSksICJicmFuY2gncyBzdGFjayB0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb2YgYmxv
Y2sncyB0eXBlIGJyYW5jaCB0YXJnZXQgdHlwZS4gU3RhY2sgdmFsdWUgaGFzIHR5cGUiLCBleHBy
ZXNzaW9uU3RhY2tbZXhwcmVzc2lvblN0YWNrT2Zmc2V0ICsgaV0sICIgYnV0IGJyYW5jaCB0YXJn
ZXQgZXhwZWN0cyBhIHZhbHVlIHdpdGggc3VidHlwZSBvZiAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0
VHlwZShpKSwgIiBhdCBpbmRleCAiLCBpKTsKLQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8g
VmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBj
b25kaXRpb24sIGNvbnN0IFN0YWNrJiBzdGFjaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjph
ZGRCcmFuY2goQ29udHJvbFR5cGUmLCBFeHByZXNzaW9uVHlwZSwgY29uc3QgU3RhY2smKSAtPiBS
ZXN1bHQKIHsKLSAgICAvLyBWb2lkIG1lYW5zIHRoaXMgaXMgYW4gdW5jb25kaXRpb25hbCBicmFu
Y2guCi0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gVm9pZCAmJiBjb25k
aXRpb24gIT0gSTMyLCAiY29uZGl0aW9uYWwgYnJhbmNoIHdpdGggbm9uLWkzMiBjb25kaXRpb24g
IiwgY29uZGl0aW9uKTsKLSAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQodGFyZ2V0LCBzdGFj
ayk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMs
IENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSwgY29u
c3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mLCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJikgLT4g
UmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gSTMyLCAi
YnJfdGFibGUgd2l0aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25kaXRpb24pOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0
byogdGFyZ2V0ID0gdGFyZ2V0c1tpXTsKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihk
ZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCkgIT0gdGFyZ2V0LT5icmFuY2hUYXJnZXRB
cml0eSgpLCAiYnJfdGFibGUgdGFyZ2V0IHR5cGUgc2l6ZSBtaXNtYXRjaC4gRGVmYXVsdCBoYXMg
c2l6ZTogIiwgZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpLCAiYnV0IHRhcmdldDog
IiwgaSwgIiBoYXMgc2l6ZTogIiwgdGFyZ2V0LT5icmFuY2hUYXJnZXRBcml0eSgpKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCB0eXBlID0gMDsgdHlwZSA8IGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFy
Z2V0QXJpdHkoKTsgKyt0eXBlKQotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRigh
aXNTdWJ0eXBlKGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSwgdGFyZ2V0LT5i
cmFuY2hUYXJnZXRUeXBlKHR5cGUpKSwgImJyX3RhYmxlIHRhcmdldCB0eXBlIG1pc21hdGNoIGF0
IG9mZnNldCAiLCB0eXBlLCAiIGV4cGVjdGVkOiAiLCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdl
dFR5cGUodHlwZSksICIgYnV0IHNhdzogIiwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUp
LCAiIHdoZW4gdGFyZ2V0aW5nIGJsb2NrIiwgKnRhcmdldCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGNoZWNrQnJhbmNoVGFyZ2V0KGRlZmF1bHRUYXJnZXQsIGV4cHJlc3Npb25TdGFjayk7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlk
YXRlOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJl
c3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZGVsdGEgIT0gSTMyLCAiZ3Jvd19t
ZW1vcnkgd2l0aCBub24taTMyIGRlbHRhIGFyZ3VtZW50IGhhcyB0eXBlOiAiLCBkZWx0YSk7Ci0g
ICAgcmVzdWx0ID0gSTMyOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFk
ZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZh
bGlkYXRlOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0g
ICAgcmVzdWx0ID0gSTMyOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmVu
ZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBzdGFjaykgLT4gUmVzdWx0CithdXRv
IFZhbGlkYXRlOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYpIC0+IFJlc3Vs
dAogewotICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoc3RhY2ssIGVudHJ5LmNv
bnRyb2xEYXRhKSk7CiAgICAgcmV0dXJuIGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkpOwogfQog
CiBhdXRvIFZhbGlkYXRlOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkp
IC0+IFJlc3VsdAogewogICAgIGF1dG8gYmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKLSAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJsb2NrLmJsb2NrVHlwZSgp
ICE9IEJsb2NrVHlwZTo6SWYpOwotCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2Nr
LnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrLmFwcGVuZChibG9jay5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSk7
CisgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVu
ZChibG9jay5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgRW1wdHlFeHByZXNzaW9uKTsKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDYWxs
KHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFJlc3VsdAogewotICAgIFJFTEVB
U0VfQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShhcmdzW2ldLCBzaWduYXR1cmUuYXJndW1l
bnQoaSkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnc1tpXSwg
IiwgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKLQogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICByZXN1
bHRzLmFwcGVuZChzaWduYXR1cmUucmV0dXJuVHlwZShpKSk7CisgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKEVtcHR5RXhwcmVzc2lvbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0
ZTo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0
JiByZXN1bHRzKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdCh1bnNp
Z25lZCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVCh0YWJsZUluZGV4IDwgbV9tb2R1bGUudGFibGVDb3VudCgpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5
cGU6OkZ1bmNyZWYpOwotICAgIGNvbnN0IGF1dG8gYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudCA9PSBhcmdz
LnNpemUoKSAtIDEpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291
bnQ7ICsraSkKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZ3Nb
aV0sIHNpZ25hdHVyZS5hcmd1bWVudChpKSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNh
bGxfaW5kaXJlY3QsIGdvdCAiLCBhcmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJn
dW1lbnQoaSkpOwotCi0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmdzLmxhc3QoKSAhPSBJ
MzIsICJub24taTMyIGNhbGxfaW5kaXJlY3QgaW5kZXggIiwgYXJncy5sYXN0KCkpOwotCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0g
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKTsKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQoRW1wdHlFeHByZXNzaW9uKTsKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIFZhbGlkYXRlOjp1bmlmeShjb25zdCBTdGFjayYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlw
ZSYgYmxvY2spIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlLCBFeHBy
ZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUmLCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihibG9jay5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSAh
PSB2YWx1ZXMuc2l6ZSgpLCAiIGJsb2NrIHdpdGggdHlwZTogIiwgKmJsb2NrLnNpZ25hdHVyZSgp
LCAiIHJldHVybnM6ICIsIGJsb2NrLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpLCAiIGJ1dCBz
dGFjayBoYXM6ICIsIHZhbHVlcy5zaXplKCksICIgdmFsdWVzIik7CisgICAgcmV0dXJuIHsgfTsK
K30KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay5zaWduYXR1cmUoKS0+cmV0
dXJuQ291bnQoKTsgKytpKQotICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5
cGUodmFsdWVzW2ldLCBibG9jay5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSksICJjb250cm9s
IGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZS4gIiwgdmFsdWVzW2ldLCAiIGlzIG5v
dCBhIHN1YnR5cGUgb2YgIiwgYmxvY2suc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSkpOworYXV0
byBWYWxpZGF0ZTo6c3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9u
VHlwZSwgdWludDMyX3QpIC0+IFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBs
YXRlPE9wVHlwZT4KK2F1dG8gVmFsaWRhdGU6OmFkZE9wKEV4cHJlc3Npb25UeXBlLCBFeHByZXNz
aW9uVHlwZSYpIC0+IFJlc3VsdAoreworICAgIHJldHVybiB7IH07Cit9CiAKLSAgICAvLyBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVlcy5zaXplKCkgIT0gMSwgImJsb2NrIHdpdGggdHlwZTog
IiwgbWFrZVN0cmluZygqYmxvY2suc2lnbmF0dXJlKCkpLCAiIGVuZHMgd2l0aCBhIHN0YWNrIGNv
bnRhaW5pbmcgbW9yZSB0aGFuIG9uZSB2YWx1ZSIpOwordGVtcGxhdGU8T3BUeXBlPgorYXV0byBW
YWxpZGF0ZTo6YWRkT3AoRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9u
VHlwZSYpIC0+IFJlc3VsdAorewogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTQ5MCwxMCArMzY4
LDEwIEBAIHN0YXRpYyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVy
JiBjb21tYSwgY29uc3QgVmFsaWRhdGU6OlN0YWNrCiB7CiAgICAgZGF0YUxvZyhjb21tYSwgIiBF
eHByZXNzaW9uU3RhY2s6Iik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhw
cmVzc2lvblN0YWNrKQotICAgICAgICBkYXRhTG9nKGNvbW1hLCBtYWtlU3RyaW5nKGV4cHJlc3Np
b24pKTsKKyAgICAgICAgZGF0YUxvZyhjb21tYSwgbWFrZVN0cmluZyhleHByZXNzaW9uLnR5cGUo
KSkpOwogfQogCi12b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+
JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spCit2b2lkIFZhbGlk
YXRlOjpkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayog
ZXhwcmVzc2lvblN0YWNrKQogewogICAgIGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgIGRhdGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRy
b2xEYXRhKTsKQEAgLTUwNyw3ICszODUsNyBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZl
Y3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZQogCiBF
eHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgRnVuY3Rpb25EYXRh
JiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGUpCiB7Ci0gICAgVmFsaWRhdGUgY29udGV4dChtb2R1bGUpOworICAgIFZh
bGlkYXRlIGNvbnRleHQ7CiAgICAgRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRvcihj
b250ZXh0LCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25h
dHVyZSwgbW9kdWxlKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHZhbGlkYXRvci5w
YXJzZSgpKTsKICAgICByZXR1cm4geyB9OwpAQCAtNTE1LDYgKzM5Myw0IEBAIEV4cGVjdGVkPHZv
aWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlvbihjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9u
LCBjb25zdCBTaWduCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKLSNpbmNsdWRlICJX
YXNtVmFsaWRhdGVJbmxpbmVzLmgiCi0KICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcAppbmRleCBkZjhiM2U4
OWNiYTZmNmQxMjc5NDUwZWY0YmQ0YmQwNDM3OTg5M2YwLi5mYTcxNmUyMjViZTkxMmMwMzc2YjQ4
ZDEyMjBmZWFkYWI2OGZjNWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtV29ya2xpc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21X
b3JrbGlzdC5jcHAKQEAgLTE1Miw4ICsxNTIsMTIgQEAgdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShS
ZWY8UGxhbj4gcGxhbikKICAgICB9CiAKICAgICBkYXRhTG9nTG5JZihXYXNtV29ya2xpc3RJbnRl
cm5hbDo6dmVyYm9zZSwgIkVucXVldWluZyBwbGFuIik7Ci0gICAgbV9xdWV1ZS5lbnF1ZXVlKHsg
UHJpb3JpdHk6OlByZXBhcmF0aW9uLCBuZXh0VGlja2V0KCksICBXVEZNb3ZlKHBsYW4pIH0pOwot
ICAgIG1fcGxhbkVucXVldWVkLT5ub3RpZnlPbmUobG9ja2VyKTsKKyAgICBib29sIG11bHRpVGhy
ZWFkZWQgPSBwbGFuLT5tdWx0aVRocmVhZGVkKCk7CisgICAgbV9xdWV1ZS5lbnF1ZXVlKHsgbXVs
dGlUaHJlYWRlZCA/IFByaW9yaXR5OjpDb21waWxhdGlvbiA6IFByaW9yaXR5OjpQcmVwYXJhdGlv
biwgbmV4dFRpY2tldCgpLCAgV1RGTW92ZShwbGFuKSB9KTsKKyAgICBpZiAobXVsdGlUaHJlYWRl
ZCkKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIGVsc2UK
KyAgICAgICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIpOwogfQogCiB2b2lkIFdv
cmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5jaHJvbm91c2x5KFBsYW4mIHBsYW4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKaW5kZXgg
YjEzYTVlMjRjNGY0NjJhNDE1ZTUwODk4YzM4MmE4MGRiODA4NjQ0Ny4uY2IwMjgxYjlhYzUzYmQ5
YWRkZTg2YzJjOGIzNGJlM2E3ZDhlZjczOCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQpAQCAtNDAsMTAgKzQwLDE2IEBAIG9w
Y29kZXMgPSB3YXNtLm9wY29kZXMKIHdhc21PcHNIRmlsZSA9IG9wZW4oYXJnc1syXSwgInciKQog
CiAKLWRlZiBjcHBNYWNybyh3YXNtT3Bjb2RlLCB2YWx1ZSwgYjMsIGluYyk6Ci0gICAgcmV0dXJu
ICIgXFxcbiAgICBtYWNybygiICsgd2FzbS50b0NwcCh3YXNtT3Bjb2RlKSArICIsICIgKyBoZXgo
aW50KHZhbHVlKSkgKyAiLCAiICsgYjMgKyAiLCAiICsgc3RyKGluYykgKyAiKSIKK2RlZiBjcHBU
eXBlKHR5cGUpOgorICAgIGlmIHR5cGUgPT0gImJvb2wiOgorICAgICAgICByZXR1cm4gIkkzMiIK
KyAgICByZXR1cm4gdHlwZS5jYXBpdGFsaXplKCkKIAogCitkZWYgY3BwTWFjcm8od2FzbU9wY29k
ZSwgdmFsdWUsIGIzLCBpbmMsICpleHRyYUFyZ3MpOgorICAgIGV4dHJhQXJnc1N0ciA9ICIsICIg
KyAiLCAiLmpvaW4oZXh0cmFBcmdzKSBpZiBsZW4oZXh0cmFBcmdzKSBlbHNlICIiCisgICAgcmV0
dXJuICIgXFxcbiAgICBtYWNybygiICsgd2FzbS50b0NwcCh3YXNtT3Bjb2RlKSArICIsICIgKyBo
ZXgoaW50KHZhbHVlKSkgKyAiLCAiICsgYjMgKyAiLCAiICsgc3RyKGluYykgKyBleHRyYUFyZ3NT
dHIgKyAiKSIKKwogZGVmIHR5cGVNYWNyb2l6ZXIoKToKICAgICBpbmMgPSAwCiAgICAgZm9yIHR5
IGluIHdhc20udHlwZXM6CkBAIC01NSwzMyArNjEsNTUgQEAgdHlwZV9kZWZpbml0aW9ucy5leHRl
bmQoW3QgZm9yIHQgaW4gdHlwZU1hY3JvaXplcigpXSkKIHR5cGVfZGVmaW5pdGlvbnMgPSAiIi5q
b2luKHR5cGVfZGVmaW5pdGlvbnMpCiAKIAotZGVmIG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG9w
Y29kZUZpZWxkPSJ2YWx1ZSIpOgorZGVmIG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG9wY29kZUZp
ZWxkPSJ2YWx1ZSIsIG1vZGlmaWVyPU5vbmUpOgogICAgIGluYyA9IDAKICAgICBmb3Igb3AgaW4g
d2FzbS5vcGNvZGVJdGVyYXRvcihmaWx0ZXIpOgogICAgICAgICBiM29wID0gIk9vcHMiCiAgICAg
ICAgIGlmIGlzU2ltcGxlKG9wWyJvcGNvZGUiXSk6CiAgICAgICAgICAgICBiM29wID0gb3BbIm9w
Y29kZSJdWyJiM29wIl0KLSAgICAgICAgeWllbGQgY3BwTWFjcm8ob3BbIm5hbWUiXSwgb3BbIm9w
Y29kZSJdW29wY29kZUZpZWxkXSwgYjNvcCwgaW5jKQorICAgICAgICBleHRyYUFyZ3MgPSBbXQor
ICAgICAgICBpZiBtb2RpZmllcjoKKyAgICAgICAgICAgIGV4dHJhQXJncyA9IG1vZGlmaWVyKG9w
WyJvcGNvZGUiXSkKKyAgICAgICAgeWllbGQgY3BwTWFjcm8ob3BbIm5hbWUiXSwgb3BbIm9wY29k
ZSJdW29wY29kZUZpZWxkXSwgYjNvcCwgaW5jLCAqZXh0cmFBcmdzKQogICAgICAgICBpbmMgKz0g
MQogCisKK2RlZiBvcGNvZGVXaXRoVHlwZXNNYWNyb2l6ZXIoZmlsdGVyKToKKyAgICBkZWYgbW9k
aWZpZXIob3ApOgorICAgICAgICByZXR1cm4gW2NwcFR5cGUodHlwZSkgZm9yIHR5cGUgaW4gb3Bb
InBhcmFtZXRlciJdICsgb3BbInJldHVybiJdXQorICAgIHJldHVybiBvcGNvZGVNYWNyb2l6ZXIo
ZmlsdGVyLCBtb2RpZmllcj1tb2RpZmllcikKKworCitkZWYgbWVtb3J5TG9hZE1hY3JvaXplcigp
OgorICAgIGRlZiBtb2RpZmllcihvcCk6CisgICAgICAgIHJldHVybiBbY3BwVHlwZShvcFsicmV0
dXJuIl1bMF0pXQorICAgIHJldHVybiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiAob3BbImNh
dGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJuIl0pID09IDEpLCBtb2RpZmll
cj1tb2RpZmllcikKKworCitkZWYgbWVtb3J5U3RvcmVNYWNyb2l6ZXIoKToKKyAgICBkZWYgbW9k
aWZpZXIob3ApOgorICAgICAgICByZXR1cm4gW2NwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKV0K
KyAgICByZXR1cm4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09
ICJtZW1vcnkiIGFuZCBsZW4ob3BbInJldHVybiJdKSA9PSAwKSwgbW9kaWZpZXI9bW9kaWZpZXIp
CisKKwogZGVmaW5lcyA9IFsiI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1AobWFjcm8p
Il0KIGRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBv
cDogbm90IChpc1VuYXJ5KG9wKSBvciBpc0JpbmFyeShvcCkgb3Igb3BbImNhdGVnb3J5Il0gPT0g
ImNvbnRyb2wiIG9yIG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIG9yIG9wWyJjYXRlZ29yeSJd
ID09ICJleHR0YWJsZSIpKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiNkZWZpbmUgRk9SX0VBQ0hf
V0FTTV9DT05UUk9MX0ZMT1dfT1AobWFjcm8pIikKIGRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3Ag
aW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogb3BbImNhdGVnb3J5Il0gPT0gImNvbnRyb2wi
KV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TSU1QTEVfVU5B
UllfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9p
emVyKGxhbWJkYSBvcDogaXNVbmFyeShvcCkgYW5kIGlzU2ltcGxlKG9wKSldKQorZGVmaW5lcy5l
eHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVXaXRoVHlwZXNNYWNyb2l6ZXIobGFtYmRhIG9wOiBp
c1VuYXJ5KG9wKSBhbmQgaXNTaW1wbGUob3ApKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiNkZWZp
bmUgRk9SX0VBQ0hfV0FTTV9VTkFSWV9PUChtYWNybykgXFxcbiAgICBGT1JfRUFDSF9XQVNNX1NJ
TVBMRV9VTkFSWV9PUChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNv
ZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc1VuYXJ5KG9wKSBhbmQgbm90IChpc1NpbXBsZShvcCkp
KV0pCitkZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZVdpdGhUeXBlc01hY3JvaXpl
cihsYW1iZGEgb3A6IGlzVW5hcnkob3ApIGFuZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKIGRlZmlu
ZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NJTVBMRV9CSU5BUllfT1AobWFj
cm8pIikKLWRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJk
YSBvcDogaXNCaW5hcnkob3ApIGFuZCBpc1NpbXBsZShvcCkpXSkKK2RlZmluZXMuZXh0ZW5kKFtv
cCBmb3Igb3AgaW4gb3Bjb2RlV2l0aFR5cGVzTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnko
b3ApIGFuZCBpc1NpbXBsZShvcCkpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1Jf
RUFDSF9XQVNNX0JJTkFSWV9PUChtYWNybykgXFxcbiAgICBGT1JfRUFDSF9XQVNNX1NJTVBMRV9C
SU5BUllfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFj
cm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnkob3ApIGFuZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkK
K2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlV2l0aFR5cGVzTWFjcm9pemVyKGxh
bWJkYSBvcDogaXNCaW5hcnkob3ApIGFuZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKIGRlZmluZXMu
YXBwZW5kKCJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX01FTU9SWV9MT0FEX09QKG1hY3JvKSIp
Ci1kZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6
IChvcFsiY2F0ZWdvcnkiXSA9PSAibWVtb3J5IiBhbmQgbGVuKG9wWyJyZXR1cm4iXSkgPT0gMSkp
XSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gbWVtb3J5TG9hZE1hY3JvaXplcigpXSkK
IGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9P
UChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIo
bGFtYmRhIG9wOiAob3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJu
Il0pID09IDApKV0pCitkZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG1lbW9yeVN0b3JlTWFj
cm9pemVyKCldKQogZGVmaW5lcy5hcHBlbmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fRVhU
X1RBQkxFX09QKG1hY3JvKSIpCi1kZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZU1h
Y3JvaXplcihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAiZXh0dGFibGUiKSwgImV4dGVu
ZGVkT3AiKV0pCitkZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihs
YW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAiZXh0dGFibGUiKSwgb3Bjb2RlRmllbGQ9ImV4
dGVuZGVkT3AiKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiIpCiAKIGRlZmluZXMgPSAiIi5qb2lu
KGRlZmluZXMpCkBAIC0xMzMsMTMgKzE2MSwxMyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGV4cGVjdGVkVmVyc2lvbk51bWJlciA9ICIiIiArIHdhc20uZXhwZWN0ZWRWZXJzaW9uTnVtYgog
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1UeXBlcyA9ICIiIiArIHN0cihsZW4odHlwZXMp
KSArICIiIjsKIAogIiIiICsgdHlwZV9kZWZpbml0aW9ucyArICIiIgotI2RlZmluZSBDUkVBVEVf
RU5VTV9WQUxVRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIG5hbWUgPSBpZCwKKyNkZWZpbmUgQ1JF
QVRFX0VOVU1fVkFMVUUobmFtZSwgaWQsIC4uLikgbmFtZSA9IGlkLAogZW51bSBUeXBlIDogaW50
OF90IHsKICAgICBGT1JfRUFDSF9XQVNNX1RZUEUoQ1JFQVRFX0VOVU1fVkFMVUUpCiB9OwogI3Vu
ZGVmIENSRUFURV9FTlVNX1ZBTFVFCiAKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIz
dHlwZSwgaW5jKSBjYXNlIGlkOiByZXR1cm4gdHJ1ZTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFt
ZSwgaWQsIC4uLikgY2FzZSBpZDogcmV0dXJuIHRydWU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50
PgogaW5saW5lIGJvb2wgaXNWYWxpZFR5cGUoSW50IGkpCiB7CkBAIC0xNTIsNyArMTgwLDcgQEAg
aW5saW5lIGJvb2wgaXNWYWxpZFR5cGUoSW50IGkpCiB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAot
I2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0
dXJuIGIzdHlwZTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgLi4uKSBj
YXNlIG5hbWU6IHJldHVybiBiM3R5cGU7CiBpbmxpbmUgQjM6OlR5cGUgdG9CM1R5cGUoVHlwZSB0
eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTYzLDcgKzE5MSw3IEBAIGlubGluZSBC
Mzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5cGUpCiB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2Rl
ZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJu
ICNuYW1lOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgbmFtZTogcmV0dXJu
ICNuYW1lOwogaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoVHlwZSB0eXBlKQogewogICAg
IHN3aXRjaCAodHlwZSkgewpAQCAtMTc0LDcgKzIwMiw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBt
YWtlU3RyaW5nKFR5cGUgdHlwZSkKIH0KICN1bmRlZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENS
RUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUsIGluYykgY2FzZSBpZDogcmV0dXJuIGluYzsKKyNk
ZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgaW5jLCAuLi4pIGNhc2UgaWQ6IHJl
dHVybiBpbmM7CiBpbmxpbmUgaW50IGxpbmVhcml6ZVR5cGUoVHlwZSB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgewpAQCAtMTg1LDcgKzIxMyw3IEBAIGlubGluZSBpbnQgbGluZWFyaXplVHlw
ZShUeXBlIHR5cGUpCiB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FT
RShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgaW5jOiByZXR1cm4gbmFtZTsKKyNkZWZpbmUg
Q1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgaW5jLCAuLi4pIGNhc2UgaW5jOiByZXR1cm4g
bmFtZTsKIGlubGluZSBUeXBlIGxpbmVhcml6ZWRUb1R5cGUoaW50IGkpCiB7CiAgICAgc3dpdGNo
IChpKSB7CkBAIC0yMDcsNyArMjM1LDcgQEAgaW5saW5lIFR5cGUgbGluZWFyaXplZFRvVHlwZShp
bnQgaSkKICAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChtYWNybykgXFwKICAgICBt
YWNybyhFeHRUYWJsZSwgMHhGQywgT29wcywgMCkKIAotI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxV
RShuYW1lLCBpZCwgYjNvcCwgaW5jKSBuYW1lID0gaWQsCisjZGVmaW5lIENSRUFURV9FTlVNX1ZB
TFVFKG5hbWUsIGlkLCAuLi4pIG5hbWUgPSBpZCwKIAogZW51bSBPcFR5cGUgOiB1aW50OF90IHsK
ICAgICBGT1JfRUFDSF9XQVNNX09QKENSRUFURV9FTlVNX1ZBTFVFKQpAQCAtMjQ2LDcgKzI3NCw3
IEBAIGVudW0gY2xhc3MgRXh0VGFibGVPcFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBib29sIGlz
Q29udHJvbE9wKE9wVHlwZSBvcCkKIHsKICAgICBzd2l0Y2ggKG9wKSB7Ci0jZGVmaW5lIENSRUFU
RV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgorI2RlZmluZSBD
UkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgT3BUeXBlOjpuYW1lOgogICAgIEZPUl9FQUNIX1dB
U01fQ09OVFJPTF9GTE9XX09QKENSRUFURV9DQVNFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICN1
bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjU5LDcgKzI4Nyw3IEBAIGlubGluZSBib29sIGlzQ29udHJv
bE9wKE9wVHlwZSBvcCkKIGlubGluZSBib29sIGlzU2ltcGxlKFVuYXJ5T3BUeXBlIG9wKQogewog
ICAgIHN3aXRjaCAob3ApIHsKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGlu
YykgY2FzZSBVbmFyeU9wVHlwZTo6bmFtZToKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgLi4u
KSBjYXNlIFVuYXJ5T3BUeXBlOjpuYW1lOgogICAgIEZPUl9FQUNIX1dBU01fU0lNUExFX1VOQVJZ
X09QKENSRUFURV9DQVNFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FT
RQpAQCAtMjcyLDcgKzMwMCw3IEBAIGlubGluZSBib29sIGlzU2ltcGxlKFVuYXJ5T3BUeXBlIG9w
KQogaW5saW5lIGJvb2wgaXNTaW1wbGUoQmluYXJ5T3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAo
b3ApIHsKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBCaW5h
cnlPcFR5cGU6Om5hbWU6CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBCaW5h
cnlPcFR5cGU6Om5hbWU6CiAgICAgRk9SX0VBQ0hfV0FTTV9TSU1QTEVfQklOQVJZX09QKENSRUFU
RV9DQVNFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjk0
LDcgKzMyMiw3IEBAIGlubGluZSB1aW50MzJfdCBtZW1vcnlMb2cyQWxpZ25tZW50KE9wVHlwZSBv
cCkKICAgICByZXR1cm4gMDsKIH0KIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0
eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOworI2RlZmluZSBDUkVBVEVfQ0FTRShu
YW1lLCAuLi4pIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOwogaW5saW5lIGNvbnN0IGNoYXIqIG1h
a2VTdHJpbmcoT3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAob3ApIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5s
aW5lc0hlYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzg2ZDA5NmI2NmU2
ODJkZDY1NzdkMmRlMjY1MDgyYjcyMTE1NmJjYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdh
c21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBA
QAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jCi0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0jIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0jIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotIyBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jIFRoaXMgdG9vbCBoYXMgYSBjb3VwbGUgb2YgaGVscGZ1bCBtYWNyb3MgdG8gcHJv
Y2VzcyBXYXNtIGZpbGVzIGZyb20gdGhlIHdhc20uanNvbi4KLQotZnJvbSBnZW5lcmF0ZVdhc20g
aW1wb3J0ICoKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHN5cwotCi1wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdlOiAlcHJvZyA8d2FzbS5qc29uPiA8V2FzbU9wcy5o
PiIpCi0ob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndlswOl0pCi1p
ZiBsZW4oYXJncykgIT0gMzoKLSAgICBwYXJzZXIuZXJyb3IocGFyc2VyLnVzYWdlKQotCi13YXNt
ID0gV2FzbShhcmdzWzBdLCBhcmdzWzFdKQotb3Bjb2RlcyA9IHdhc20ub3Bjb2Rlcwotd2FzbVZh
bGlkYXRlSW5saW5lc0hGaWxlID0gb3BlbihhcmdzWzJdLCAidyIpCi0KLQotZGVmIGNwcFR5cGUo
bmFtZSk6Ci0gICAgcmVzdWx0ID0gewotICAgICAgICAiYm9vbCI6ICJJMzIiLAotICAgICAgICAi
YWRkciI6ICJJMzIiLAotICAgICAgICAiaTMyIjogIkkzMiIsCi0gICAgICAgICJpNjQiOiAiSTY0
IiwKLSAgICAgICAgImYzMiI6ICJGMzIiLAotICAgICAgICAiZjY0IjogIkY2NCIsCi0gICAgfS5n
ZXQobmFtZSwgTm9uZSkKLSAgICBpZiByZXN1bHQgPT0gTm9uZToKLSAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigiVW5rbm93biB0eXBlIG5hbWU6ICIgKyBuYW1lKQotICAgIHJldHVybiByZXN1bHQK
LQotCi1kZWYgdG9DcHAobmFtZSk6Ci0gICAgcmV0dXJuIHdhc20udG9DcHAobmFtZSkKLQotCi1k
ZWYgdW5hcnlNYWNybyhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0KLSAgICByZXR1cm4g
IiIiCi10ZW1wbGF0ZTw+IGF1dG8gVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAo
bmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUgIT0gIiIiICsgY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVz
dWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFs
dWUgdHlwZSBtaXNtYXRjaCIpOwotCi0gICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0
dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVybiB7IH07Ci19Ci0iIiIKLQotCi1kZWYgYmluYXJ5
TWFjcm8obmFtZSk6Ci0gICAgb3AgPSBvcGNvZGVzW25hbWVdCi0gICAgcmV0dXJuICIiIgotdGVt
cGxhdGU8PiBhdXRvIFZhbGlkYXRlOjphZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsg
IiIiPihFeHByZXNzaW9uVHlwZSBsZWZ0LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0Ci17Ci0gICAgaWYgKFVOTElLRUxZKGxlZnQgIT0gIiIi
ICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKLSAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5h
bWUgKyAiIiIgbGVmdCB2YWx1ZSB0eXBlIG1pc21hdGNoIik7Ci0KLSAgICBpZiAoVU5MSUtFTFko
cmlnaHQgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSkKLSAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWls
ZWQ6ICIiIiArIG5hbWUgKyAiIiIgcmlnaHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwotCi0gICAg
cmVzdWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVy
biB7IH07Ci19Ci0iIiIKLQotZGVmIGxvYWRNYWNybyhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNb
bmFtZV0KLSAgICByZXR1cm4gIiIiCi0gICAgY2FzZSBMb2FkT3BUeXBlOjoiIiIgKyB0b0NwcChu
YW1lKSArICIiIjogewotICAgICAgICBpZiAoVU5MSUtFTFkocG9pbnRlciAhPSAiIiIgKyBjcHBU
eXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUg
KyAiIiIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gIiIiICsg
Y3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgICAgICByZXR1cm4geyB9OwotICAg
IH0iIiIKLQotCi1kZWYgc3RvcmVNYWNybyhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0K
LSAgICByZXR1cm4gIiIiCi0gICAgY2FzZSBTdG9yZU9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkg
KyAiIiI6IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMF0pICsgIiIiKSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PFJlc3VsdDo6ZXJyb3JfdHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIi
IHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIpOwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2YWx1ZSAh
PSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVsxXSkgKyAiIiIpKQotICAgICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6
ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwotCi0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfSIiIgotCi0KLXVuYXJ5U3BlY2lhbGl6YXRpb25zID0gIiIuam9pbihbb3Ag
Zm9yIG9wIGluIHdhc20ub3Bjb2RlSXRlcmF0b3IoaXNVbmFyeSwgdW5hcnlNYWNybyldKQotYmlu
YXJ5U3BlY2lhbGl6YXRpb25zID0gIiIuam9pbihbb3AgZm9yIG9wIGluIHdhc20ub3Bjb2RlSXRl
cmF0b3IoaXNCaW5hcnksIGJpbmFyeU1hY3JvKV0pCi1sb2FkQ2FzZXMgPSAiIi5qb2luKFtvcCBm
b3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihsYW1iZGEgb3A6IG9wWyJjYXRlZ29yeSJdID09
ICJtZW1vcnkiIGFuZCBsZW4ob3BbInJldHVybiJdKSA9PSAxLCBsb2FkTWFjcm8pXSkKLXN0b3Jl
Q2FzZXMgPSAiIi5qb2luKFtvcCBmb3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihsYW1iZGEg
b3A6IG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIGFuZCBsZW4ob3BbInJldHVybiJdKSA9PSAw
LCBzdG9yZU1hY3JvKV0pCi0KLWNvbnRlbnRzID0gd2FzbS5oZWFkZXIgKyAiIiIKLS8vIFRoaXMg
ZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmxpbmVkIGJ5IFdhc21WYWxpZGF0ZS5jcHAgb25seSEg
SXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBlbHNld2hlcmUuCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
Ci0jaWYgQVNTRVJUX0RJU0FCTEVECi1JR05PUkVfUkVUVVJOX1RZUEVfV0FSTklOR1NfQkVHSU4K
LSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewotCi0iIiIgKyB1bmFy
eVNwZWNpYWxpemF0aW9ucyArIGJpbmFyeVNwZWNpYWxpemF0aW9ucyArICIiIgotCi1hdXRvIFZh
bGlkYXRlOjpsb2FkKExvYWRPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoVU5MSUtF
TFkoIWhhc01lbW9yeSgpKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJv
cl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IGxvYWQgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1v
cnkiKTsKLQotICAgIHN3aXRjaCAob3ApIHsKLSIiIiArIGxvYWRDYXNlcyArICIiIgotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotYXV0byBWYWxpZGF0ZTo6c3RvcmUoU3Rv
cmVPcFR5cGUgb3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVl
LCB1aW50MzJfdCkgLT4gUmVzdWx0Ci17Ci0gICAgaWYgKFVOTElLRUxZKCFoYXNNZW1vcnkoKSkp
Ci0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFJlc3VsdDo6ZXJyb3JfdHlwZT4oInZhbGlkYXRp
b24gZmFpbGVkOiBzdG9yZSBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwotCi0gICAgc3dp
dGNoIChvcCkgewotIiIiICsgc3RvcmVDYXNlcyArICIiIgotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KLQotI2lmIEFTU0VS
VF9ESVNBQkxFRAotSUdOT1JFX1JFVFVSTl9UWVBFX1dBUk5JTkdTX0VORAotI2VuZGlmCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSIiIgotCi13YXNtVmFsaWRhdGVJbmxpbmVz
SEZpbGUud3JpdGUoY29udGVudHMpCi13YXNtVmFsaWRhdGVJbmxpbmVzSEZpbGUuY2xvc2UoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAppbmRl
eCAxMDkwODgzMWJiMjZkZGEyM2E4NjQ2ZDc0MTBhZjYwY2Y3YWJiMDRiLi42YzBiN2Y4NjRmYThj
ZTIyZWRiN2ZmNTI2YjliYWE3ZWIxNDMzOTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApAQCAtMjI4LDcgKzIyOCw3IEBAIHN0YXRpYyB2
b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNQ
cm9taXNlKiBwcm9taXNlCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGNvZGVC
bG9jay5yZWxlYXNlTm9uTnVsbCgpLCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlKTsKICAgICAg
ICAgfSk7Ci0gICAgfSksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNtOjpvcGVy
YXRpb25XYXNtVG9KU0V4Y2VwdGlvbik7CisgICAgfSkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21w
aWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1Byb21pc2UqIHByb21pc2UsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNWYWx1ZSBi
dWZmZXIsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFJlc29sdmUgcmVzb2x2ZUtpbmQsIFdhc206
OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCkBAIC0zMjgsMTIgKzMyOCwxMiBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhKU0ds
b2JhbE9iamVjdCogZ2xvYgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRvIFtiYXNlLCBi
eXRlU2l6ZV0gPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBwbGFuKCZ2bS53YXNtQ29udGV4dCwgQkJRUGxhbjo6VmFs
aWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3
YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21l
dGhpbmcgd2lsbCBPT00uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjAxNQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4u
cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShiYXNlLCBieXRlU2l6ZSkpKTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IFdhc206
Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih2YWxpZGF0aW9uUmVzdWx0Lmhh
c192YWx1ZSgpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHlDb21waWxlU3RyZWFtaW5nSW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRl
eCA2MDAyOWVmZTBlODY3YTY5Yjg2ZDNkY2U1MmQ2NGIxMTBjNjlmZmUyLi45MGY2MmRjZTMxMTY3
NWU0ZWI3ZTBjYjMyZjExYWM1NjBjMTk3NmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEpTR2xvYmFsT2JqZWMKICAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVQcml2YXRl
TW9kdWxlS2V5KCksIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSwgUmVm
PFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSksIFdhc206OkNyZWF0aW9uTW9kZTo6RnJv
bUpTKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFu
Y2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgbW9kdWxlLT5tb2R1bGUoKS5j
b21waWxlU3luYygmdm0ud2FzbUNvbnRleHQsIGluc3RhbmNlLT5tZW1vcnlNb2RlKCksICZXYXNt
OjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlv
biksIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMpOworICAgIGluc3Rh
bmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIG1vZHVsZS0+bW9kdWxlKCku
Y29tcGlsZVN5bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSwgaW1w
b3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21KUyk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNl
KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384236</attachid>
            <date>2019-11-23 08:39:12 -0800</date>
            <delta_ts>2019-12-04 16:03:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204474-20191123083911.patch</filename>
            <type>text/plain</type>
            <size>223878</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ODA5ZDNjZGEyNWY2MTRjYjZjNzNhZDc0YmU2NTQxYjU2MjQxN2YyLi44NTczNmFkZTg5M2Y1NThl
ODZkNjYyZDY5ZGI3ZGI5ZDZiZjJiYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMzAgQEAKKzIwMTktMTEtMjIgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBWYWxpZGF0ZSBhbmQgZ2VuZXJhdGUgYnl0ZWNv
ZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNDQ3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSwgd2UgdHJhdmVyc2UgdGhlIFdlYkFzc2VtYmx5IGNvZGUgdHdpY2U6
CisgICAgICAgIC0gYSBmaXJzdCBzZXJpYWwgcGFzcyB0aGF0IHZhbGlkYXRlcyBhbGwgZnVuY3Rp
b25zCisgICAgICAgIC0gYSBzZWNvbmQgY29uY3VycmVudCBwYXNzIHRoYXQgY29tcGlsZXMgYWxs
IGZ1bmN0aW9ucy4KKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgbW92ZSB0aGUgdmFsaWRhdGlv
biBpbnRvIHRoZSBwYXJzZXIgYW5kIHVwZGF0ZSB0aGUgTExJbnRQbGFuIHNvIHRoYXQgd2Ugbm8g
bG9uZ2VyIGhhdmUKKyAgICAgICAgdGhlIGZpcnN0IHBhc3MuIEluc3RlYWQsIHdlIG5vdyB2YWxp
ZGF0ZSBjb25jdXJyZW50bHkgYXQgdGhlIHNhbWUgdGltZSB3ZSBnZW5lcmF0ZSBieXRlY29kZS4K
KyAgICAgICAgVGhpcyBpcyBhIDEuNXggc3BlZWR1cCB3aGVuIGNvbXBpbGluZyB0aGUgWmVuR2Fy
ZGVuIGRlbW8uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIHdh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5l
cmF0b3I6OkNvbnRyb2xEYXRhOjpDb250cm9sRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNJZik6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldh
c206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0QXJpdHkgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5j
aFRhcmdldFR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVt
aXRDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjp0
bXBzRm9yU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVt
aXRQYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkFpcklS
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFJlZklz
TnVsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdldCk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZVNldCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdyb3cpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2spOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAgIChKU0M6Oldhc206OkFp
cklSR2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRSZXR1
cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNo
YWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjp1bmlmeSk6CisgICAgICAgIChKU0M6Oldh
c206OmR1bXBFeHByZXNzaW9uU3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUFpcik6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5j
VUY2ND4pOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBl
OjpJNjRUcnVuY1VGMzI+KToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNJZik6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjppc1RvcExldmVsKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OnNpZ25hdHVyZSBjb25zdCk6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpoYXNOb25W
b2lkcmVzdWx0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OmJyYW5jaFRhcmdldEFyaXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRUYWJsZVNldCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlR3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRMb29w
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5l
cmF0b3I6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRk
RW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OmR1bXBFeHByZXNzaW9uU3Rh
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OkJCUVBsYW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjp3
b3JrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpCQlFQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKToKKyAgICAgICAgKiB3
YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6
CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21FbnRyeVBsYW4uY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpFbnRyeVBsYW46OkVudHJ5UGxhbik6CisgICAgICAgIChKU0M6
Oldhc206OkVudHJ5UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkVudHJ5UGxhbjo6cHJlcGFyZSk6CisgICAgICAgIChKU0M6Oldhc206OkVudHJ5UGxh
bjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6Oldhc206OkVudHJ5UGxhbjo6Y29t
cGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbUVudHJ5UGxhbi5oOgorICAgICAgICAqIHdhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OnNwbGl0U3RhY2spOgor
ICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6VHlwZWRFeHByZXNzaW9uOjpUeXBl
ZEV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6VHlwZWRF
eHByZXNzaW9uOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJz
ZXI6OlR5cGVkRXhwcmVzc2lvbjo6dmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblBhcnNlcjo6VHlwZWRFeHByZXNzaW9uOjpvcGVyYXRvciBFeHByZXNzaW9uVHlwZSBj
b25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpUeXBlZEV4cHJlc3Np
b246Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjo6Y29udHJvbFN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnZh
bGlkYXRpb25GYWlsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OmJpbmFyeUNhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6dW5hcnlDYXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OmxvYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6c3RvcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6Y2hlY2tCcmFuY2hUYXJnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKToKKyAgICAgICAgKiB3
YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjpDb250cm9sVHlwZTo6dG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omxvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnN0YWNrU2l6ZSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6c2lnbmF0dXJlIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpicmFu
Y2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9y
OjpDb250cm9sVHlwZTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpnZXREcm9wS2VlcENvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6Om1hdGVyaWFsaXplQ29uc3RhbnRzQW5kTG9jYWxzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OnNwbGl0U3RhY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFu
ZENvbXBpbGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpM
TEludEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkTG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAg
ICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRJZik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5o
OgorICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50UGxhbjo6TExJbnRQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpj
b21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmRpZENvbXBs
ZXRlQ29tcGlsYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OndvcmspOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46OmRpZFJlY2VpdmVGdW5jdGlvbkRhdGEpOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVs
ZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6TW9kdWxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6bWFrZVZhbGlkYXRpb25SZXN1bHQpOgorICAgICAgICAoSlNDOjpXYXNtOjptYWtl
VmFsaWRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0
ZVN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpjb21waWxlU3luYyk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZTo6Y29tcGlsZUFzeW5jKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vV2FzbU9NR1Bs
YW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3
YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAg
ICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpkb250Rmlu
YWxpemUpOgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24pOgorICAgICAgICAqIHdhc20v
V2FzbVRodW5rcy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRocm93RXhjZXB0aW9uRnJvbVdh
c21UaHVua0dlbmVyYXRvcik6CisgICAgICAgICogd2FzbS9XYXNtVGh1bmtzLmg6CisgICAgICAg
ICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
Q29udHJvbERhdGE6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJv
bERhdGE6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJv
bERhdGE6OmJsb2NrVHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpD
b250cm9sRGF0YTo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlZhbGlkYXRlOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjplbXB0eUV4cHJlc3Npb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpW
YWxpZGF0ZTo6VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlR2V0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlU2V0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlk
YXRlOjphZGRUYWJsZUdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkVGFi
bGVGaWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFJlZklzTnVsbCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZWZGdW5jKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6
OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OnNldExvY2FsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmdldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldh
c206OlZhbGlkYXRlOjpzZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkTG9vcCk6CisgICAg
ICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxz
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6
CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZXR1cm4pOgorICAgICAgICAoSlND
OjpXYXNtOjpWYWxpZGF0ZTo6YWRkQnJhbmNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OmFkZFN3aXRjaCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRHcm93TWVt
b3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEN1cnJlbnRNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpX
YXNtOjpWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206
OlZhbGlkYXRlOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZENh
bGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpsb2FkKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFs
aWRhdGU6OmFkZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZHVtcEV4cHJlc3Npb25TdGFjayk6
CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6dmFsaWRhdGVGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtV29ya2xpc3QuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpXb3JrbGlzdDo6ZW5xdWV1ZSk6CisgICAgICAgICogd2FzbS9n
ZW5lcmF0ZVdhc21PcHNIZWFkZXIucHk6CisgICAgICAgIChjcHBUeXBlKToKKyAgICAgICAgKGNw
cE1hY3JvKToKKyAgICAgICAgKG9wY29kZU1hY3JvaXplcik6CisgICAgICAgIChvcGNvZGVXaXRo
VHlwZXNNYWNyb2l6ZXIpOgorICAgICAgICAob3Bjb2RlV2l0aFR5cGVzTWFjcm9pemVyLm1vZGlm
aWVyKToKKyAgICAgICAgKG1lbW9yeUxvYWRNYWNyb2l6ZXIpOgorICAgICAgICAobWVtb3J5TG9h
ZE1hY3JvaXplci5tb2RpZmllcik6CisgICAgICAgIChtZW1vcnlTdG9yZU1hY3JvaXplcik6Cisg
ICAgICAgIChtZW1vcnlTdG9yZU1hY3JvaXplci5tb2RpZmllcik6CisgICAgICAgICogd2FzbS9n
ZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHk6IFJlbW92ZWQuCisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgor
ICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorCiAyMDE5LTExLTIyICBQZXIgQXJuZSBWb2xs
YW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggY29tcGlsZSBlcnJvciBpbiBy
ZWxlYXNlIG1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAwZjhjNDE5
NDA2NGZmMDNhN2MwNjgwNDA2YTRmY2Y2ZWFkYzYwNDIzLi45YTkxYmUxNzVmZjRhN2NmOTU3MzFj
Nzk5OTgzOTA5MTBlYTVjYzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0zNjgsNyArMzY4LDYgQEAgbWFjcm8oR0VORVJBVEVfUFlUSE9OIF9nZW5lcmF0b3IgX2FkZGl0
aW9uYWxfZGVwcyBfaW5wdXQgX291dHB1dCkKICAgICBXRUJLSVRfQUREX1NPVVJDRV9ERVBFTkRF
TkNJRVMoJHtfaW5wdXR9ICR7X291dHB1dH0pCiBlbmRtYWNybygpCiBHRU5FUkFURV9QWVRIT04o
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5
ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbS5weSAke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtKYXZhU2NyaXB0Q29yZV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9XYXNtT3BzLmgpCi1HRU5FUkFURV9QWVRIT04oJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5
ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbS5weSAke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtKYXZhU2NyaXB0Q29yZV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9XYXNtVmFsaWRhdGVJbmxpbmVzLmgpCiBHRU5FUkFURV9QWVRIT04o
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRv
cklubGluZXNIZWFkZXIucHkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJh
dGVXYXNtLnB5ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL3dhc20uanNvbiAke0ph
dmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L1dhc21CM0lSR2VuZXJhdG9ySW5saW5l
cy5oKQogCiAjIExVVCBnZW5lcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggODZkN2I2YzY0YTZjM2M4ZGU1
MmEwZDYyMjU3MjU0YWUwNmY4MjZkYS4uYWFiOWNhM2Q3ZDFiMGNjMThmNTU2ZDlkYzMyZmY3ZjVj
NzJkZTJiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE3Myw3ICsxNzMsNiBAQCAkKFBST0pFQ1RfRElSKS91
Y2QvbGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5LnR4dAogJChQUk9KRUNUX0RJUikvd2FzbS9nZW5l
cmF0ZVdhc20ucHkKICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRv
cklubGluZXNIZWFkZXIucHkKICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVh
ZGVyLnB5Ci0kKFBST0pFQ1RfRElSKS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hl
YWRlci5weQogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogJChQUk9K
RUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAog
JChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRw
dXQueGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRw
dXQueGNmaWxlbGlzdAppbmRleCAxNGFhNDIwY2YzZjRjMjczZDlhOGFhYjM5MTA4MzBmOTZjOGQ0
ZjQzLi5kNDE5MDcwY2ExYmQ0YTk3M2UwMDMwNTRhYjNiNDMwZGM0Yjc0MDk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0CkBAIC02MSw3ICs2MSw2IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9KYXZhU2NyaXB0Q29yZS9Vbmljb2RlUGF0dGVyblRhYmxlcy5oCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUIzSVJHZW5lcmF0b3JJbmxp
bmVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29y
ZS9XYXNtTExJbnRHZW5lcmF0b3JJbmxpbmVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XYXNtT3BzLmgKLSQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XYXNtVmFsaWRhdGVJbmxpbmVzLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3Nl
bWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZS9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IubHV0LmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZjU5MjEyZmYwMWNjOWQ4MmEyMTAw
NWIyMTI4NTcxZTdkMjMwM2U3NC4uMzBkZDI1OGE0MGVkYzYyNDcwZDg5MzAwZGQ4ZWEwNzM0YzMz
YjI5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTYw
LDcgKzYwLDYgQEAgYWxsIDogXAogICAgIFVuaWNvZGVQYXR0ZXJuVGFibGVzLmggXAogICAgIHlh
cnIvWWFyckNhbm9uaWNhbGl6ZVVuaWNvZGUuY3BwIFwKICAgICBXYXNtT3BzLmggXAotICAgIFdh
c21WYWxpZGF0ZUlubGluZXMuaCBcCiAgICAgV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzLmggXAog
IwogCkBAIC0zNTIsOSArMzUxLDYgQEAgSW50bENhbm9uaWNhbGl6ZUxhbmd1YWdlLmg6ICQoSmF2
YVNjcmlwdENvcmUpL1NjcmlwdHMvZ2VuZXJhdGVJbnRsQ2Fub25pY2FsaXplTGEKIFdhc21PcHMu
aDogJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgJChKYXZh
U2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc20ucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS93
YXNtLmpzb24KIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21P
cHNIZWFkZXIucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS93YXNtLmpzb24gLi9XYXNtT3BzLmgK
IAotV2FzbVZhbGlkYXRlSW5saW5lcy5oOiAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRl
V2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVy
YXRlV2FzbS5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL3dhc20uanNvbgotCSQoUFlUSE9OKSAk
KEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5w
eSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL3dhc20uanNvbiAuL1dhc21WYWxpZGF0ZUlubGluZXMu
aAotCiBXYXNtQjNJUkdlbmVyYXRvcklubGluZXMuaDogJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9n
ZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weSAkKEphdmFTY3JpcHRDb3Jl
KS93YXNtL2dlbmVyYXRlV2FzbS5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL3dhc20uanNvbgog
CSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0
b3JJbmxpbmVzSGVhZGVyLnB5ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vd2FzbS5qc29uIC4vV2Fz
bUIzSVJHZW5lcmF0b3JJbmxpbmVzLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5kZXggNjNjNjY4ZmFmYTQwNzY1NTMzMDE1YzAx
NWJkYzMyN2IxZmVhODNhOC4uMjU0ZjU1OWM4ZWY2OWVjNjk0MzE1MDU5ZTQ3NGRkNzBiZTFkOGU1
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCkBAIC0xMjksMTIgKzEyOSwxMyBAQCBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwog
fTsKIAotdXNpbmcgVHlwZWRUbXBzID0gVmVjdG9yPFR5cGVkVG1wLCAxPjsKLQogY2xhc3MgQWly
SVJHZW5lcmF0b3IgewogcHVibGljOgorICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVHlwZWRU
bXA7CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgOD47CisK
ICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewotICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2lu
IG9yaWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBUeXBlZFRtcHMgcmVzdWx0VG1wcywgQmxv
Y2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lh
bCA9IG51bGxwdHIpCisgICAgICAgIENvbnRyb2xEYXRhKEIzOjpPcmlnaW4gb3JpZ2luLCBCbG9j
a1NpZ25hdHVyZSByZXN1bHQsIFJlc3VsdExpc3QgcmVzdWx0VG1wcywgQmxvY2tUeXBlIHR5cGUs
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIp
CiAgICAgICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKICAgICAgICAgICAgICwgY29u
dGludWF0aW9uKGNvbnRpbnVhdGlvbikKICAgICAgICAgICAgICwgc3BlY2lhbChzcGVjaWFsKQpA
QCAtMTQ4LDYgKzE0OSw5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAg
ICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4g
Y29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRy
b2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorCiAgICAgICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0
Y2ggKGJsb2NrVHlwZSgpKSB7CkBAIC0xOTQsMzEgKzE5OCw0NiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIFNpZ25hdHVyZUFy
Z0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmV0dXJuVHlwZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJuIHJldHVy
blR5cGUtPnJldHVybkNvdW50KCk7CisgICAgICAgIH0KKworICAgICAgICBUeXBlIGJyYW5jaFRh
cmdldFR5cGUodW5zaWduZWQgaSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGkgPCBicmFuY2hUYXJnZXRBcml0eSgpKTsKKyAgICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGUtPmFy
Z3VtZW50KGkpOworICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGUtPnJldHVyblR5cGUoaSk7
CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBaXJJUkdl
bmVyYXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7CiAgICAgICAgIEJh
c2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsKLSAg
ICAgICAgVHlwZWRUbXBzIHJlc3VsdHM7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAg
ICAgICAgQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZTsKICAgICB9OwogCi0gICAgdXNpbmcgRXhw
cmVzc2lvblR5cGUgPSBUeXBlZFRtcDsKICAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xE
YXRhOwotICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAx
PjsKLSAgICB1c2luZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0OwotICAgIHVzaW5nIFJlc3VsdExp
c3QgPSBUeXBlZFRtcHM7Ci0gICAgdXNpbmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8
QWlySVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CiAKLSAgICBzdGF0aWMgRXhwcmVzc2lvblR5
cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4geyB9OyB9OwotICAgIFN0YWNrIGNyZWF0ZVN0
YWNrKCkgeyByZXR1cm4gU3RhY2soKTsgfQotICAgIGJvb2wgaXNDb250cm9sVHlwZUlmKGNvbnN0
IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJs
b2NrVHlwZTo6SWY7IH0KKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxB
aXJJUkdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKyAgICB1c2luZyBDb250cm9sU3RhY2sgPSBG
dW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OkNvbnRyb2xTdGFjazsKKyAgICB1c2luZyBT
dGFjayA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6U3RhY2s7CisgICAgdXNpbmcg
VHlwZWRFeHByZXNzaW9uID0gRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpUeXBlZEV4
cHJlc3Npb247CiAKICAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CiAgICAgdXNpbmcgVW5l
eHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKICAgICB1c2luZyBSZXN1bHQg
PSBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVycm9yVHlwZT47
CiAgICAgdXNpbmcgUGFydGlhbFJlc3VsdCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CiAK
KyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PFJlc3VsdExpc3QsIEZ1bmN0aW9uUGFy
c2VyPEFpcklSR2VuZXJhdG9yPjo6UmVzdWx0TGlzdD4pOworCisgICAgc3RhdGljIEV4cHJlc3Np
b25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIHsgfTsgfTsKKwogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKICAgICB7CkBAIC0yMzEs
NyArMjUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18p
OyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24q
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2ln
bmF0dXJlJik7CisgICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBC
Mzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50
KiwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMjQwLDE1ICsy
NTksMTUgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGFkZEJvdHRvbShCYXNpY0Jsb2Nr
KiwgVHlwZSk7CiAKICAgICAvLyBSZWZlcmVuY2VzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlJiB2YWx1ZSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
UmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZGdW5jKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8vIFRhYmxlcwotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR2V0KHVuc2lnbmVkLCBFeHBy
ZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlU2V0KHVuc2lnbmVkLCBFeHByZXNzaW9u
VHlwZSYgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4
cHJlc3Npb25UeXBlIHZhbHVlKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRUYWJsZVNpemUodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhw
cmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBkZWx0YSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVG
aWxsKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSYgZmls
bCwgRXhwcmVzc2lvblR5cGUmIGNvdW50KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRUYWJsZUdyb3codW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJl
c3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4cHJlc3Npb25U
eXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgY291bnQpOwog
CiAgICAgLy8gTG9jYWxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0
TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtMjc5LDcg
KzI5OCw3IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbHNlKENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCi0g
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRy
b2xEYXRhJiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwg
Y29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQnJhbmNoKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9u
LCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0
b3I8Q29udHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXRzLCBj
b25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBlbmRCbG9jayhDb250cm9sRW50cnkmLCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KTsKQEAgLTI4OCwyOSArMzA3LDIxIEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKSB7
IHJldHVybiB7IH07IH0KIAogICAgIC8vIENhbGxzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAx
PiYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJlc3VsdHMp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3Qg
Y2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwot
ICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNo
cG9pbnQoQmFzaWNCbG9jayosIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZSwgMT4mIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3Rv
cjxDb25zdHJhaW5lZFRtcD4mJiBleHRyYUFyZ3MgPSB7IH0pOworICAgIEIzOjpQYXRjaHBvaW50
VmFsdWUqIFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayos
IGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4mJiBleHRyYUFyZ3MgPSB7
IH0pOwogCiAgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChUeXBlLCBCMzo6QWlyOjpPcGNvZGUs
IEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlmdCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRlZ2VyU3ViKEIzOjpBaXI6Ok9w
Y29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSByaHMsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkRmxvYXRpbmdQb2ludEFicyhCMzo6
QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRCaW5PcChUeXBlLCBCMzo6QWly
OjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKIAotICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVu
dHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2
b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFj
ayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+KiBw
YXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5n
TG9jYWxzKCkgeyB9CiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQogCi0gICAg
c3RhdGljIFZlY3RvcjxUbXA+IHRvVG1wVmVjdG9yKGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIHZl
Y3RvcikKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxUbXA+IHJlc3VsdDsKLSAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBpdGVtIDogdmVjdG9yKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVt
LnRtcCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KICAgICBjb25zdCBCYWc8
QjM6OlBhdGNocG9pbnRWYWx1ZSo+JiBwYXRjaHBvaW50cygpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9wYXRjaHBvaW50czsKQEAgLTQwMSw5ICs0MTIsOSBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgfQogCi0gICAgVHlwZWRUbXBzIHRtcHNGb3JTaWduYXR1cmUoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlKQorICAgIFJlc3VsdExpc3QgdG1wc0ZvclNpZ25hdHVyZShCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUpCiAgICAgewotICAgICAgICBUeXBlZFRtcHMgcmVzdWx0KHNpZ25h
dHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0KHNpZ25hdHVy
ZS0+cmV0dXJuQ291bnQoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWdu
YXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRtcEZv
clR5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTQyNiwxNiArNDM3LDE2IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4u
LkFyZ3M+CiAgICAgdm9pZCBlbWl0UGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrLCBC
Mzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaCwgVG1wIHJlc3VsdCwgQXJncy4uLiB0aGVBcmdzKQog
ICAgIHsKLSAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxU
bXAsIDE+IHsgcmVzdWx0IH0sIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgc2l6ZW9mLi4uKEFyZ3Mp
Pjo6ZnJvbSh0aGVBcmdzLi4uKSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ss
IHBhdGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAs
IHNpemVvZi4uLihBcmdzKT46OmZyb20odGhlQXJncy4uLikpOwogICAgIH0KIAogICAgIHZvaWQg
ZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1
ZSogcGF0Y2gsIFRtcCByZXN1bHQpCiAgICAgewotICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNp
Y0Jsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgMT4geyByZXN1bHQgfSwgVmVjdG9yPENvbnN0cmFp
bmVkVG1wPigpKTsKKyAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIFZl
Y3RvcjxUbXAsIDg+IHsgcmVzdWx0IH0sIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4oKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFRtcFR5cGUsIHNpemVfdCBpbmxpbmVT
aXplPgotICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6
OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCAxPiYg
IHJlc3VsdHMsIFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdzKQorICAg
IHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBhdGNocG9p
bnRWYWx1ZSogcGF0Y2gsIGNvbnN0IFZlY3RvcjxSZXN1bHRUbXBUeXBlLCA4PiYgIHJlc3VsdHMs
IFZlY3RvcjxDb25zdHJhaW5lZFRtcCwgaW5saW5lU2l6ZT4mJiBhcmdzKQogICAgIHsKICAgICAg
ICAgaWYgKCFtX3BhdGNocG9pbnRTcGVjaWFsKQogICAgICAgICAgICAgbV9wYXRjaHBvaW50U3Bl
Y2lhbCA9IHN0YXRpY19jYXN0PEIzOjpQYXRjaHBvaW50U3BlY2lhbCo+KG1fY29kZS5hZGRTcGVj
aWFsKG1ha2VVbmlxdWU8QjM6OlBhdGNocG9pbnRTcGVjaWFsPigpKSk7CkBAIC02MzMsNyArNjQ0
LDcgQEAgcHJpdmF0ZToKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUs
IEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90IG9mZnNldCk7CiAgICAgdm9pZCBlbWl0
U3RvcmVPcChTdG9yZU9wVHlwZSwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5
cGUgdmFsdWUsIHVpbnQzMl90IG9mZnNldCk7CiAKLSAgICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJl
c3Npb25UeXBlJiBkc3QsIGNvbnN0IEV4cHJlc3Npb25UeXBlJiBzb3VyY2UpOworICAgIHZvaWQg
dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3Vy
Y2UpOwogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0
YWNrLCBjb25zdCBSZXN1bHRMaXN0JiBzdGFjayk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
SW50VHlwZT4KQEAgLTc0Myw3ICs3NTQsNyBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3Jl
V2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9jaywgVHlwZWRUbXAgaW5zdAogICAg
IGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwogfQog
Ci1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGls
YXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUpCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50
ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9mdW5j
dGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC03NzEsOSArNzgyLDYgQEAgQWlySVJHZW5lcmF0
b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJv
Y2VkdXJlJiBwcm8KICAgICAgICAgbV9jb2RlLnBpblJlZ2lzdGVyKG1fbWVtb3J5U2l6ZUdQUik7
CiAgICAgfQogCi0gICAgaWYgKHRocm93V2FzbUV4Y2VwdGlvbikKLSAgICAgICAgVGh1bmtzOjpz
aW5nbGV0b24oKS5zZXRUaHJvd1dhc21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKLQog
ICAgIGlmIChpbmZvLm1lbW9yeSkgewogICAgICAgICBzd2l0Y2ggKG1fbW9kZSkgewogICAgICAg
ICBjYXNlIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nOgpAQCAtMTA0NSw3ICsxMDUzLDcgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmVm
SXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHZhbHVlLnRtcCgpKTsKICAgICByZXN1bHQgPSB0
bXBGb3JUeXBlKFR5cGU6OkkzMik7CkBAIC0xMDY2LDcgKzEwNzQsNyBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhN
RTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODUwNj4uCiAgICAgQVNTRVJUKGluZGV4LnRtcCgpKTsKQEAgLTEwODMsNyArMTA5MSw3
IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lv
blR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJl
c3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICBBU1NFUlQoaW5kZXgudG1wKCkpOwpAQCAt
MTExMiw3ICsxMTIwLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2ln
bmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0KICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdyb3codW5zaWduZWQgdGFibGVJ
bmRleCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBkZWx0YSwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4
cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CiB7CiAgICAgQVNTRVJUKGZpbGwudG1wKCkpOwogICAgIEFTU0VSVChpc1N1YnR5cGUoZmls
bC50eXBlKCksIG1faW5mby50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSkpOwpAQCAtMTEy
NSw3ICsxMTMzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVk
IHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHAKICAgICByZXR1cm4geyB9Owog
fQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUZpbGwodW5zaWduZWQgdGFibGVJbmRl
eCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Np
b25UeXBlJiBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
VGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhw
cmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBBU1NFUlQoZmlsbC50bXAoKSk7CiAgICAgQVNTRVJUKGlzU3VidHlwZShmaWxsLnR5
cGUoKSwgbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpKSk7CkBAIC0xNzE0LDkg
KzE3MjIsOSBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKHVpbnQz
Ml90IGxvb3BJbmRleCkKICAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpCiAgICAgICAg
IHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAobG9jYWwsIEIzOjpWYWx1ZVJlcDo6Q29s
ZEFueSkpOwogICAgIGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4
IDwgbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKLSAg
ICAgICAgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9s
U3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwotICAgICAgICBm
b3IgKGF1dG8mIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAgICAgICAgcGF0Y2hBcmdz
LmFwcGVuZChDb25zdHJhaW5lZFRtcCh2YWx1ZSwgQjM6OlZhbHVlUmVwOjpDb2xkQW55KSk7Cisg
ICAgICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClb
Y29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKKyAgICAgICAgZm9yIChUeXBl
ZEV4cHJlc3Npb24gdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgICAgICBwYXRjaEFy
Z3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHZhbHVlLnZhbHVlKCksIEIzOjpWYWx1ZVJlcDo6Q29s
ZEFueSkpOwogICAgIH0KIAogICAgIFRpZXJVcENvdW50OjpUcmlnZ2VyUmVhc29uKiBmb3JjZUVu
dHJ5VHJpZ2dlciA9ICYobV90aWVyVXAtPm9zckVudHJ5VHJpZ2dlcnMoKS5sYXN0KCkpOwpAQCAt
MTc0NSw3ICsxNzUzLDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVj
ayh1aW50MzJfdCBsb29wSW5kZXgpCiAgICAgICAgIH0pOwogICAgIH0pOwogCi0gICAgZW1pdFBh
dGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wLCAxPigpLCBXVEZNb3Zl
KHBhdGNoQXJncykpOworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwg
UmVzdWx0TGlzdCB7IH0sIFdURk1vdmUocGF0Y2hBcmdzKSk7CiB9CiAKIEFpcklSR2VuZXJhdG9y
OjpDb250cm9sRGF0YSBBaXJJUkdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlKQpAQCAtMTc1OCw4ICsxNzY2LDEyIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
CiAgICAgQmFzaWNCbG9jayogYm9keSA9IG1fY29kZS5hZGRCbG9jaygpOwogICAgIEJhc2ljQmxv
Y2sqIGNvbnRpbnVhdGlvbiA9IG1fY29kZS5hZGRCbG9jaygpOwogCi0gICAgbmV3U3RhY2sgPSBz
cGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwotICAgIGJsb2NrID0gQ29udHJv
bERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgbmV3U3RhY2ssIEJsb2NrVHlwZTo6TG9vcCwgY29u
dGludWF0aW9uLCBib2R5KTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3Rh
Y2ssIG5ld1N0YWNrKTsKKyAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CisgICAgcmVzdWx0cy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG5ld1N0YWNrLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGl0ZW0g
OiBuZXdTdGFjaykKKyAgICAgICAgcmVzdWx0cy51bmNoZWNrZWRBcHBlbmQoaXRlbSk7CisgICAg
YmxvY2sgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCBXVEZNb3ZlKHJlc3VsdHMp
LCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7CiAKICAgICBhcHBlbmQoSnVt
cCk7CiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMoYm9keSk7CkBAIC0xNzcyLDcg
KzE3ODQsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogCiBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRCbG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFj
aywgQ29udHJvbFR5cGUmIG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1
bHQKIHsKLSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFj
ayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7
CiAgICAgbmV3QmxvY2sgPSBDb250cm9sRGF0YShvcmlnaW4oKSwgc2lnbmF0dXJlLCB0bXBzRm9y
U2lnbmF0dXJlKHNpZ25hdHVyZSksIEJsb2NrVHlwZTo6QmxvY2ssIG1fY29kZS5hZGRCbG9jaygp
KTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTc4OCw3ICsxODAwLDcgQEAgYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIFMKICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyh0YWtlbiwgbm90
VGFrZW4pOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKLSAgICBuZXdTdGFjayA9IHNw
bGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhzaWdu
YXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgcmVzdWx0ID0gQ29udHJvbERh
dGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25hdHVyZShzaWduYXR1cmUpLCBCbG9j
a1R5cGU6OklmLCBjb250aW51YXRpb24sIG5vdFRha2VuKTsKICAgICByZXR1cm4geyB9OwogfQpA
QCAtMTgwOSw3ICsxODIxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFj
aGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEm
IGRhdGEsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0
YSwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENh
bGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxs
SW5mb3JtYXRpb25Gb3IoKmRhdGEuc2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwogICAg
IGlmICghd2FzbUNhbGxJbmZvLnJlc3VsdHMuc2l6ZSgpKSB7CkBAIC0xODQ3LDcgKzE4NTksNyBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRhdGEs
IGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZQogICAgICAgICByZXR1cm5Db25zdHJhaW50cy5hcHBl
bmQoQ29uc3RyYWluZWRUbXAodG1wLCB3YXNtQ2FsbEluZm8ucmVzdWx0c1tpXSkpOwogICAgIH0K
IAotICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwg
MT4oKSwgV1RGTW92ZShyZXR1cm5Db25zdHJhaW50cykpOworICAgIGVtaXRQYXRjaHBvaW50KG1f
Y3VycmVudEJsb2NrLCBwYXRjaCwgUmVzdWx0TGlzdCB7IH0sIFdURk1vdmUocmV0dXJuQ29uc3Ry
YWludHMpKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xOTYyLDEyICsxOTc0LDE0IEBAIGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRy
eSwgY29uc3QgU3RhY2smIGV4cHJlCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChp
IDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBl
bmQoYWRkQm90dG9tKG1fY3VycmVudEJsb2NrLCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBl
KGkpKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBUeXBlIHR5cGUgPSBk
YXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIGVudHJ5LmVu
Y2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh0eXBlLCBhZGRCb3R0b20o
bV9jdXJyZW50QmxvY2ssIHR5cGUpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVzdWx0IDogZGF0YS5yZXN1bHRzKQot
ICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1
cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgZGF0
YS5yZXN1bHRzW2ldKTsKICAgICB9CiAKICAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFu
eSBjb2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVy
biBoZXJlLgpAQCAtMTk3Nyw3ICsxOTkxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5k
VG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmUKICAg
ICByZXR1cm4geyB9OwogfQogCi1CMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6
ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0cywgY29uc3Qg
VmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIHBhdGNoQXJn
cykKK0IzOjpQYXRjaHBvaW50VmFsdWUqIEFpcklSR2VuZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9p
bnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBS
ZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8
Q29uc3RyYWluZWRUbXA+JiYgcGF0Y2hBcmdzKQogewogICAgIGF1dG8qIHBhdGNocG9pbnQgPSBh
ZGRQYXRjaHBvaW50KHRvQjNSZXN1bHRUeXBlKCZzaWduYXR1cmUpKTsKICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0yMDAyLDcgKzIwMTYsNyBAQCBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2lj
QmxvY2sqIGJsb2NrLCBjb25zdAogICAgIHJldHVybiBwYXRjaHBvaW50OwogfQogCi1hdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGUsIDE+JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1
bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCkgPT0gYXJncy5zaXplKCkpOwogCkBAIC0yMDkyLDcgKzIxMDYsNyBAQCBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Npb25U
eXBlLCAxPiYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRz
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBh
cmdzLnRha2VMYXN0KCk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0g
YXJncy5zaXplKCkpOwpAQCAtMjI0OCw3ICsyMjYyLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmEKICAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEFpcklSR2VuZXJhdG9yOjp1bmlmeShjb25z
dCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKQordm9p
ZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUgZHN0LCBjb25zdCBF
eHByZXNzaW9uVHlwZSBzb3VyY2UpCiB7CiAgICAgQVNTRVJUKGlzU3VidHlwZShzb3VyY2UudHlw
ZSgpLCBkc3QudHlwZSgpKSk7CiAgICAgYXBwZW5kKG1vdmVPcEZvclZhbHVlVHlwZShkc3QudHlw
ZSgpKSwgc291cmNlLCBkc3QpOwpAQCAtMjI2NiwxMCArMjI4MCwxMCBAQCBzdGF0aWMgdm9pZCBk
dW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEFpcklS
R2VuZXJhdG9yOgogewogICAgIGRhdGFMb2coY29tbWEsICJFeHByZXNzaW9uU3RhY2s6Iik7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAg
ICBkYXRhTG9nKGNvbW1hLCBleHByZXNzaW9uKTsKKyAgICAgICAgZGF0YUxvZyhjb21tYSwgZXhw
cmVzc2lvbi52YWx1ZSgpKTsKIH0KIAotdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBW
ZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogc3RhY2spCit2
b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYgY29udHJvbFN0YWNr
LCBjb25zdCBTdGFjayogc3RhY2spCiB7CiAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIEdyYXBo
OiIpOwogICAgIGRhdGFMb2cobV9jb2RlKTsKQEAgLTIyOTEsNyArMjMwNSw3IEBAIGF1dG8gQWly
SVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KICAgICByZXR1cm4gQjM6Ok9yaWdp
bigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250
ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
TWVtb3J5TW9kZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGll
clVwKQogewogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigp
OwogCkBAIC0yMzE0LDcgKzIzMjgsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aQogICAgIAog
ICAgIHByb2NlZHVyZS5zZXRPcHRMZXZlbChPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck9wdGlt
aXphdGlvbkxldmVsKCkpOwogCi0gICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywg
cHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBm
dW5jdGlvbkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsKKyAg
ICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQo
KSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwg
c2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGly
R2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNp
Z25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFy
c2UoKSk7CiAKQEAgLTI5MDMsNyArMjkxNyw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9w
PE9wVHlwZTo6STY0VHJ1bmNVRjY0PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UCiAg
ICAgfSk7CiAKICAgICByZXN1bHQgPSBnNjQoKTsKLSAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJl
bnRCbG9jaywgcGF0Y2hwb2ludCwgVmVjdG9yPFRtcCwgMT4geyByZXN1bHQgfSwgV1RGTW92ZShh
cmdzKSk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIFZl
Y3RvcjxUeXBlZFRtcCwgOD4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdzKSk7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIApAQCAtMjk3OCw3ICsyOTkyLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnVuY1VGMzI+KEV4cHJlc3Npb25UeXBlIGFyZywgRXhwcmVzc2lvblQK
ICAgICB9KTsKIAogICAgIHJlc3VsdCA9IGc2NCgpOwotICAgIGVtaXRQYXRjaHBvaW50KG1fY3Vy
cmVudEJsb2NrLCBwYXRjaHBvaW50LCBWZWN0b3I8VG1wLCAxPiB7IHJlc3VsdCB9LCBXVEZNb3Zl
KGFyZ3MpKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwg
VmVjdG9yPFR5cGVkVG1wLCA4PiB7IHJlc3VsdCB9LCBXVEZNb3ZlKGFyZ3MpKTsKIAogICAgIHJl
dHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5oCmluZGV4IDMzMWI0YjBhZDMxM2U2MjNjYTdmZjRiZDhkZThhMTU4NmZjN2Q1MDUu
LjFjM2Y1YmFmMDkxNmQ0Y2E3OGM1ZmJiNGIzZTYyN2M3MjM4NDVmODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCkBAIC0zMSw3ICszMSw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIo
Q29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBu
dWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29t
cGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxs
cHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDkwNGQ2OTRjNWFlNmRk
YjdmMjcxMGU3NDE0ZWI5MmY1NTUyMzFlZmMuLmJkMzI4ZWI0YmI0OTM1M2Y0NmZmOGRiYzUxMDI0
NzNiNDNkMjJjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKQEAgLTg2LDEyICs4NiwxMyBAQCBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwogCiBjbGFzcyBCM0lSR2VuZXJhdG9yIHsKIHB1YmxpYzoKLSAgICB1
c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPFZhbHVlKiwgMT47IC8vIFZhbHVlIG11c3QgYmUgYSBQ
aGkKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFZhbHVlKjsKKyAgICB1c2luZyBSZXN1bHRM
aXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsKIAogICAgIHN0cnVjdCBDb250cm9sRGF0
YSB7CiAgICAgICAgIENvbnRyb2xEYXRhKFByb2NlZHVyZSYgcHJvYywgT3JpZ2luIG9yaWdpbiwg
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBCbG9ja1R5cGUgdHlwZSwgQmFzaWNCbG9jayogY29u
dGludWF0aW9uLCBCYXNpY0Jsb2NrKiBzcGVjaWFsID0gbnVsbHB0cikKICAgICAgICAgICAgIDog
Y29udHJvbEJsb2NrVHlwZSh0eXBlKQotICAgICAgICAgICAgLCBzaWduYXR1cmUoc2lnbmF0dXJl
KQorICAgICAgICAgICAgLCBtX3NpZ25hdHVyZShzaWduYXR1cmUpCiAgICAgICAgICAgICAsIGNv
bnRpbnVhdGlvbihjb250aW51YXRpb24pCiAgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkK
ICAgICAgICAgewpAQCAtMTA4LDYgKzEwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAg
ICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJv
bCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAg
ICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsg
cmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorCiAg
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGJsb2NrVHlwZSgpKSB7CkBAIC0xMzMsNyArMTM3LDkgQEAgcHVibGlj
OgogCiAgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUoKSBjb25zdCB7IHJldHVybiBjb250cm9s
QmxvY2tUeXBlOyB9CiAKLSAgICAgICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyBy
ZXR1cm4gc2lnbmF0dXJlLT5yZXR1cm5zVm9pZCgpOyB9CisgICAgICAgIEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CisKKyAgICAgICAgYm9v
bCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVybnNW
b2lkKCk7IH0KIAogICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9ja0ZvckJyYW5jaCgpCiAg
ICAgICAgIHsKQEAgLTE0OSwyOSArMTU1LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNwZWNp
YWwgPSBudWxscHRyOwogICAgICAgICB9CiAKKyAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJh
bmNoVGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5y
ZXR1cm5Db3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgVHlwZSBicmFuY2hUYXJnZXRUeXBl
KHVuc2lnbmVkIGkpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnJh
bmNoVGFyZ2V0QXJpdHkoKSk7CisgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tU
eXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnQo
aSk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVyblR5cGUoaSk7CisgICAg
ICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBCM0lSR2VuZXJhdG9y
OwogICAgICAgICBCbG9ja1R5cGUgY29udHJvbEJsb2NrVHlwZTsKLSAgICAgICAgQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlOworICAgICAgICBCbG9ja1NpZ25hdHVyZSBtX3NpZ25hdHVyZTsKICAg
ICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uOwogICAgICAgICBCYXNpY0Jsb2NrKiBzcGVj
aWFsOwogICAgICAgICBSZXN1bHRMaXN0IHBoaXM7CiAgICAgfTsKIAotICAgIHVzaW5nIEV4cHJl
c3Npb25UeXBlID0gVmFsdWUqOworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7
CiAgICAgdXNpbmcgRXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+Owot
ICAgIHVzaW5nIFN0YWNrID0gRXhwcmVzc2lvbkxpc3Q7CiAKLSAgICB1c2luZyBDb250cm9sVHlw
ZSA9IENvbnRyb2xEYXRhOwogICAgIHVzaW5nIENvbnRyb2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2Vy
PEIzSVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisgICAgdXNpbmcgQ29udHJvbFN0YWNrID0g
RnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OkNvbnRyb2xTdGFjazsKKyAgICB1c2luZyBT
dGFjayA9IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpTdGFjazsKKyAgICB1c2luZyBU
eXBlZEV4cHJlc3Npb24gPSBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPjo6VHlwZWRFeHBy
ZXNzaW9uOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJl
c3Npb24oKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgYm9vbCBpc0NvbnRyb2xUeXBlSWYoY29u
c3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0g
QmxvY2tUeXBlOjpJZjsgfQorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8UmVzdWx0
TGlzdCwgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OlJlc3VsdExpc3Q+KTsKIAogICAg
IHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsKICAgICB0eXBlZGVmIFVuZXhwZWN0ZWQ8RXJyb3JU
eXBlPiBVbmV4cGVjdGVkUmVzdWx0OwogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+IFJlc3VsdDsKICAgICB0eXBlZGVmIEV4
cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJlc3VsdDsKKworICAgIHN0YXRpYyBFeHBy
ZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiBudWxscHRyOyB9OworCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdAogICAgIHsK
QEAgLTE4MywyMiArMjA3LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9f
VkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5j
dGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3Vu
dCosIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
TWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNp
Z25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqKTsKIAogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50
MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwog
CiAgICAgLy8gUmVmZXJlbmNlcwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICAvLyBUYWJsZXMKLSAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUm
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFRhYmxlR2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVT
aXplKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdyb3codW5zaWduZWQsIEV4cHJlc3Npb25UeXBl
JiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwot
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlRmlsbCh1bnNpZ25l
ZCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Np
b25UeXBlJiBjb3VudCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
VGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBk
ZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkVGFibGVGaWxsKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBvZmZzZXQs
IEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KTsKICAgICAvLyBMb2Nh
bHMKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZh
bHVlKTsKQEAgLTIyOSw3ICsyNTMsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJik7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29u
dHJvbERhdGEmKTsKIAotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJl
dHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1
ZXMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25z
dCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBk
ZWZhdWx0VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2sm
IGV4cHJlc3Npb25TdGFjayk7CkBAIC0yNDMsNyArMjY3LDcgQEAgcHVibGljOgogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAgICAgQjM6OlZh
bHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8
dm9pZChQYXRjaHBvaW50VmFsdWUqKT4mIHBhdGNocG9pbnRGdW5jdG9yKTsKIAotICAgIHZvaWQg
ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFj
ayogZXhwcmVzc2lvblN0YWNrKTsKKyAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwg
Y29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rp
b25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsK
ICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKSB7IH0KICAgICB2b2lkIGRpZFBvcFZh
bHVlRnJvbVN0YWNrKCkgeyB9CkBAIC0zNjIsNyArMzg2LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9y
OjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sq
IGJsb2MKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVu
Y3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
TWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0IzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWdu
ZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRp
b25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQg
bG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCiAgICAgOiBtX2luZm8o
aW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGls
YXRpb25Nb2RlKQpAQCAtMzkzLDkgKzQxNyw2IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAg
ICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeVNpemVHUFIpOwogICAgIH0KIAotICAg
IGlmICh0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgICAgIFRodW5rczo6c2luZ2xldG9uKCkuc2V0
VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7Ci0KICAgICBpZiAoaW5mby5t
ZW1vcnkpIHsKICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0g
KENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSKSB7CiAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC02NjcsMTMg
KzY4OCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlJiB2YWx1ZSwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkVGFibGVHZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUm
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShBbnlyZWYpLCBvcmlnaW4oKSwKQEAg
LTY5Miw3ICs3MTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVk
IHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcgogICAgIHJldHVybiB7IH07
CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRl
eCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFBhcnRp
YWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJ
bmRleCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIGF1dG8gc2hvdWxkVGhy
b3cgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgQjM6Oklu
dDMyLCBvcmlnaW4oKSwKQEAgLTczMiw3ICs3NTMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFRhYmxlU2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlw
ZSYgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Np
b25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKEkzMiksIG9yaWdpbigpLAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oJm9wZXJhdGlvbldhc21UYWJsZUdyb3csIEIzQ0Nh
bGxQdHJUYWcpKSwKQEAgLTc0MSw3ICs3NjIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRh
YmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwcgog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVu
c2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBl
JiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgY291bnQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShJMzIpLCBvcmlnaW4oKSwKICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBCM0ND
YWxsUHRyVGFnKSksCkBAIC0xMjAyLDEyICsxMjIzLDEyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6
ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBsb29wSW5kZXgpCiAKICAgICBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+IHN0YWNrbWFwOwogICAgIGZvciAoYXV0byYgbG9jYWwgOiBtX2xvY2Fscykg
ewotICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7CisgICAg
ICAgIFZhbHVlKiByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhcmlhYmxlVmFs
dWU+KG1fcHJvYywgQjM6OkdldCwgb3JpZ2luLCBsb2NhbCk7CiAgICAgICAgIHN0YWNrbWFwLmFw
cGVuZChyZXN1bHQpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7
IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJv
bEluZGV4KSB7CiAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250
cm9sU3RhY2soKVtjb250cm9sSW5kZXhdLmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwotICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZm9yIChUeXBl
ZEV4cHJlc3Npb24gdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgICAgICBzdGFja21h
cC5hcHBlbmQodmFsdWUpOwogICAgIH0KIApAQCAtMTI2NSwxMiArMTI4NiwxMiBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5j
bG9zaW5nU3RhY2ssIENvbgogICAgIHsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZW5jbG9z
aW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7
Ci0gICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQgKyBp
KTsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZSA9IGVuY2xvc2luZ1N0YWNrLmF0
KG9mZnNldCArIGkpOwogICAgICAgICAgICAgYXV0byogdXBzaWxvbiA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZSk7CiAgICAg
ICAgICAgICBWYWx1ZSogcGhpID0gYmxvY2sucGhpc1tpXTsKICAgICAgICAgICAgIGJvZHktPmFw
cGVuZChwaGkpOwogICAgICAgICAgICAgdXBzaWxvbi0+c2V0UGhpKHBoaSk7Ci0gICAgICAgICAg
ICBuZXdTdGFjay5hcHBlbmQocGhpKTsKKyAgICAgICAgICAgIG5ld1N0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZCh2YWx1ZS50eXBlKCksIHBoaSk7CiAgICAgICAgIH0KICAgICAgICAgZW5jbG9zaW5n
U3RhY2suc2hyaW5rKG9mZnNldCk7CiAgICAgfQpAQCAtMTMwMSw3ICsxMzIyLDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDb24KICAgICAgICAgICAgIHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOwog
ICAgICAgICAgICAgQjM6Okluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9wcm9jKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBhdXRvKiB2YWx1ZSA9IGV4cHJlc3Npb25TdGFja1tpXTsK
KyAgICAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBleHByZXNzaW9uU3RhY2tb
aV07CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5pc0NvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgKytpbmRleEluQnVmZmVyOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTEzMjAsNyArMTM0MSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29uCiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHNvdXJjZUJsb2NrLT5hdChibG9ja0luZGV4IC0gMSkgPT0gdmFsdWUp
OwogCiAgICAgICAgICAgICAgICAgYXV0byogcGhpID0gZGF0YS5jb250aW51YXRpb24tPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBQaGksICB2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCkp
OwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb25TdGFja1tpXSA9IHBoaTsKKyAgICAgICAgICAg
ICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBUeXBlZEV4cHJlc3Npb24geyB2YWx1ZS50eXBlKCks
IHBoaSB9OwogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxv
blZhbHVlPihtX3Byb2MsIHZhbHVlLT5vcmlnaW4oKSwgbG9hZEZyb21TY3JhdGNoQnVmZmVyKHZh
bHVlLT50eXBlKCkpLCBwaGkpOwogCiAgICAgICAgICAgICAgICAgYXV0byogc291cmNlVXBzaWxv
biA9IG1fcHJvYy5hZGQ8VXBzaWxvblZhbHVlPih2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBwaGkp
OwpAQCAtMTM0OCw3ICsxMzY5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRCbG9jayhCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KIHsKICAgICBC
YXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKIAotICAgIG5ld1N0
YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0
YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICBuZXdCbG9jayA9
IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpCbG9j
aywgY29udGludWF0aW9uKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTM2Nyw3ICsxMzg4LDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJs
b2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3QKICAgICBub3RUYWtlbi0+YWRkUHJlZGVjZXNzb3Io
bV9jdXJyZW50QmxvY2spOwogCiAgICAgbV9jdXJyZW50QmxvY2sgPSB0YWtlbjsKLSAgICBuZXdT
dGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRT
dGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgcmVzdWx0ID0g
Q29udHJvbERhdGEobV9wcm9jLCBvcmlnaW4oKSwgc2lnbmF0dXJlLCBCbG9ja1R5cGU6OklmLCBj
b250aW51YXRpb24sIG5vdFRha2VuKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTM4Nyw3ICsx
NDA4LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9s
RGF0YSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgRXhwcmVz
c2lvbkxpc3QmIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFs
dWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5m
byA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihtX3BhcnNlci0+
c2lnbmF0dXJlKCksIENhbGxSb2xlOjpDYWxsZWUpOwogCkBAIC0xNDU4LDcgKzE0NzksNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2spIC0+IFBhcgogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50cnku
Y29udHJvbERhdGE7CiAKLSAgICBBU1NFUlQoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBkYXRh
LnNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgQVNTRVJUKGV4cHJlc3Npb25TdGFjay5z
aXplKCkgPT0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSk7CiAgICAgaWYgKGRhdGEu
YmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpMb29wKQogICAgICAgICB1bmlmeVZhbHVlc1dpdGhC
bG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEucGhpcyk7CiAKQEAgLTE0NzksMTcgKzE1MDAsMjAg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYg
ZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKICAgICB9CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5
cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApIHsKLSAgICAgICAgZm9yIChWYWx1ZSogcmVzdWx0IDog
ZGF0YS5waGlzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25h
dHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIFZhbHVlKiByZXN1bHQg
PSBkYXRhLnBoaXNbaV07CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dCk7Ci0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQocmVz
dWx0KTsKKyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVj
dEFuZEFwcGVuZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCByZXN1bHQpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlLT5yZXR1cm5D
b3VudCgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2ln
bmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGkgPCBleHBy
ZXNzaW9uU3RhY2suc2l6ZSgpKQogICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVz
c2lvblN0YWNrLmFwcGVuZChleHByZXNzaW9uU3RhY2tbaV0pOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChjb25z
dGFudCh0b0IzVHlwZShkYXRhLnNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIDB4YmJhZGJlZWYp
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9
IGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7CisgICAgICAgICAgICAgICAgZW50cnku
ZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIGNv
bnN0YW50KHRvQjNUeXBlKHJldHVyblR5cGUpLCAweGJiYWRiZWVmKSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4MjcsMTQgKzE4NTEsMTQgQEAgdm9pZCBCM0lSR2Vu
ZXJhdG9yOjp1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBTdGFjayYgcmVzdWx0U3RhY2ssIGNv
bnN0IFJlc3VsdEwKICAgICAgICAgdW5pZnkocmVzdWx0W3Jlc3VsdC5zaXplKCkgLSAxIC0gaV0s
IHJlc3VsdFN0YWNrLmF0KHJlc3VsdFN0YWNrLnNpemUoKSAtIDEgLSBpKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29u
c3QgQjNJUkdlbmVyYXRvcjo6RXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKK3N0YXRp
YyB2b2lkIGR1bXBFeHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29u
c3QgQjNJUkdlbmVyYXRvcjo6U3RhY2smIGV4cHJlc3Npb25TdGFjaykKIHsKICAgICBkYXRhTG9n
KGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOwogICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVz
c2lvbiA6IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmV4cHJlc3Np
b24pOwogfQogCi12b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xF
bnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjaykKK3ZvaWQg
QjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBDb250cm9sU3RhY2smIGNvbnRyb2xTdGFjaywgY29u
c3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjaykKIHsKICAgICBkYXRhTG9nTG4oIkNvbnN0YW50czoi
KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnN0YW50IDogbV9jb25zdGFudFBvb2wpCkBAIC0x
ODYyLDcgKzE4ODYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgog
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRh
dGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1v
cnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCog
dGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25E
YXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQq
IHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlv
bj4oKTsKIApAQCAtMTg4Niw3ICsxOTEwLDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAg
ICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUIzT3B0aW1pemF0aW9uTGV2ZWwoKQogICAg
ICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAg
ICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgp
LCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9k
ZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwg
dGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0
b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0
aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXApOwogICAgIEZ1bmN0aW9uUGFy
c2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRh
KCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlYTU1MDI0MDE4ZDMwZDM4ZmYx
ZWE3YTdhYmYxYzE2NWJjZjU2N2Y4Li5kMmY4ODFlMWU0MTI3MzNlODI2ZDliMTQ3ZmNlZjdjMDFi
OTY0NTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmgKQEAgLTUxLDcgKzUxLDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0
aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxw
dHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1v
ZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5
LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IGFhYzVh
OGMyNjUyZTM2MzAxMGRjODFjNzJmM2NkMDY0NGM1MjljYWUuLjE0YTBhZjI4NDJkZmU0ZWQ3Njgw
ZGI2MDJjOTkwZmVlMDFiYmJjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNs
dWRlICJXYXNtQWlySVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5o
IgogI2luY2x1ZGUgIldhc21CaW5kaW5nLmgiCkBAIC01NCw3ICs1NSw3IEBAIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKIEJCUVBsYW46OkJCUVBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBsZXRpb25UYXNr
JiYgY29tcGxldGlvblRhc2spCi0gICAgOiBFbnRyeVBsYW4oY29udGV4dCwgV1RGTW92ZShtb2R1
bGVJbmZvcm1hdGlvbiksIFdURk1vdmUoY29tcGxldGlvblRhc2spKQorICAgIDogRW50cnlQbGFu
KGNvbnRleHQsIFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pLCBBc3luY1dvcms6OkZ1bGxDb21w
aWxlLCBXVEZNb3ZlKGNvbXBsZXRpb25UYXNrKSkKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogewpAQCAtNzksNyArODAs
MjMgQEAgYm9vbCBCQlFQbGFuOjpwcmVwYXJlSW1wbCgpCiB2b2lkIEJCUVBsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGlmICghbV9jb2RlQmxvY2spIHsKLSAgICAg
ICAgQmFzZTo6d29yayhlZmZvcnQpOworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAg
ICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDoKKyAgICAgICAgICAgIHBhcnNlQW5kVmFsaWRhdGVNb2R1
bGUoKTsKKyAgICAgICAgICAgIGlmICghaGFzV29yaygpKSB7CisgICAgICAgICAgICAgICAgY29t
cGxldGUoaG9sZExvY2sobV9sb2NrKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBTdGF0ZTo6VmFs
aWRhdGVkOgorICAgICAgICAgICAgcHJlcGFyZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOgorICAgICAgICAgICAgY29tcGlsZUZ1bmN0aW9ucyhl
ZmZvcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTUsNyAr
MTMyLDcgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAg
ICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIG1f
Y29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVm
KCk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9ICpt
X2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAg
IExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKICAgICAgICAgICAgIGxsaW50
Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgbGxp
bnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJV
cENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKQEAgLTE1MywxMCArMTcwLDEx
IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxs
c2l0ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9j
ay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKLSAgICAgICAgICAgIGlmIChMTEludENhbGxl
ZSogbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbaV0uZ2V0KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50
Q2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xs
aW50Q2FsbGVlcykgeworICAgICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9
IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50
cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkp
CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxl
ZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
cGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IG1fY29kZUJs
b2NrLT5tX2JicUNhbGxlZXNbaV0uZ2V0KCkpIHsKQEAgLTE5MSw3ICsyMDksNyBAQCB2b2lkIEJC
UVBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25h
dHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAg
ICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChm
dW5jdGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcigqbV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLmVtYmVkZGVyRW50cnlwb2ludEpJVCwgc2lnbmF0dXJlLCAmbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBjcmVh
dGVKU1RvV2FzbVdyYXBwZXIoKm1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XS5l
bWJlZGRlckVudHJ5cG9pbnRKSVQsIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVu
Y3Rpb25JbmRleCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3
RW50cnkpOwogICAgIH0KIH0KQEAgLTIxNSw5ICsyMzMsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZQogICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCiAgICAgaWYgKCFmb3JjZVVzaW5n
QjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKLSAgICAgICAgcGFyc2VBbmRDb21waWxl
UmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUs
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAg
ICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIoY29udGV4dCwgZnVu
Y3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKICAgICBlbHNlCi0g
ICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBm
dW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCwgbV90
aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJz
ZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24u
Z2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBV
SU5UMzJfTUFYLCB0aWVyVXApOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVS
ZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI4
MywyMSArMzAxLDQxIEBAIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2Fs
bGVlSW5pdGlhbGl6ZXImIGNhbGxiYWNrKQogICAgIEFTU0VSVCghZmFpbGVkKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25J
bmRleCkgewogCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZTsKKyAgICAgICAgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlOwogICAgICAgICBpZiAoYXV0byBlbWJlZGRlclRvV2FzbUZ1bmN0
aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0
aW9uSW5kZXgpKSB7Ci0gICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBXYXNt
OjpFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGVtYmVkZGVyVG9XYXNt
RnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKKyAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJU
b1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlv
biwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAgICAg
c2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPFdhc206
OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpCQlFDYWxsZWU6OmNyZWF0ZShX
VEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1v
dmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxp
bmtlZFdhc21Ub1dhc21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CisgICAgICAgIFJl
ZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUoV1RG
TW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3Zl
KG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwogCiAgICAg
ICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfQogfQog
Citib29sIEJCUVBsYW46OmRpZFJlY2VpdmVGdW5jdGlvbkRhdGEodW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbikKK3sKKyAgICBkYXRhTG9nTG5JZihX
YXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGlu
ZyBhdDogIiwgZnVuY3Rpb24uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgZnVuY3Rpb24uZW5k
KTsKKyAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbi5lbmQgLSBmdW5jdGlvbi5z
dGFydDsKKyAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPT0gZnVuY3Rpb24uZGF0YS5zaXplKCkp
OworICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CisgICAg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKKworICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlRnVu
Y3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSk7Cisg
ICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7CisgICAgICAgIGlmIChXYXNtQkJRUGxhbkludGVy
bmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVu
Y3Rpb25MZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24uZGF0YVtpXSkpLCAiLCAiKTsKKyAgICAgICAg
ICAgIGRhdGFMb2dMbigpOworICAgICAgICB9CisgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2Nr
KSwgbWFrZVN0cmluZyh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKCksICIsIGluIGZ1bmN0aW9uIGF0
IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7IC8vIEZJWE1FIG1ha2Ug
dGhpcyBhbiBFeHBlY3RlZC4KKyAgICB9CisgICAgcmV0dXJuICEhdmFsaWRhdGlvblJlc3VsdDsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGYy
MmUxODk2NDcyN2FmM2U1ZTgwNGZlODUzNzhhMTBjOWVmMDQ3YWQuLjVlMmRmZGZmYzYzMDFhNTYy
NzQwY2ZjYzJlNzQxZDRmMzYzYmY4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaApAQCAtNDQsNyArNDQsOSBAQCBjbGFzcyBDYWxsTGlua0luZm87CiAKIG5hbWVz
cGFjZSBXYXNtIHsKIAorY2xhc3MgQkJRQ2FsbGVlOwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3Mg
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogCiBjbGFzcyBCQlFQbGFuIGZpbmFsIDogcHVibGlj
IEVudHJ5UGxhbiB7CiBwdWJsaWM6CkBAIC01NCw4ICs1NiwyNCBAQCBwdWJsaWM6CiAKICAgICBC
QlFQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBDb2RlQmxvY2sqLCBDb21wbGV0aW9uVGFzayYmKTsKIAorICAgIGJvb2wgaGFzV29y
aygpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9hc3luY1dvcmsgPT0gQXN5
bmNXb3JrOjpWYWxpZGF0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6
VmFsaWRhdGVkOworICAgICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpDb21waWxlZDsKKyAg
ICB9CisKICAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92ZXJyaWRlOwotICAgIHZv
aWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6ZXImKSBvdmVycmlkZTsK
KworICAgIHVzaW5nIENhbGxlZUluaXRpYWxpemVyID0gRnVuY3Rpb248dm9pZCh1aW50MzJfdCwg
UmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiwgUmVmPEJCUUNhbGxlZT4mJik+Owor
ICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6ZXImKTsKKwor
ICAgIGJvb2wgZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNpZ25lZCwgY29uc3QgRnVuY3Rpb25E
YXRhJikgb3ZlcnJpZGU7CisKKyAgICBib29sIHBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJhc2U6OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUobV9zb3VyY2Uu
ZGF0YSgpLCBtX3NvdXJjZS5zaXplKCkpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIGJvb2wg
cHJlcGFyZUltcGwoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvZGVCbG9jay5jcHAKaW5kZXggNDAyZTcwYmQ4NGExZjA2ZjE5NjQyMDc5YmIwNmIzYzU1ODM0
ZjIxYS4uMTM0ZGE3ZGUwYjNlOTc1NTc0MTZkYzQzMTk1YmNhZGZlZmU5MjI0OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKQEAgLTM2LDU4ICszNiw3
MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1SZWY8Q29kZUJsb2Nr
PiBDb2RlQmxvY2s6OmNyZWF0ZShDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVy
JiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQorUmVmPENvZGVCbG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUoQ29udGV4dCogY29udGV4
dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24s
IGNvbnN0IFJlZjxMTEludENhbGxlZT4qIGxsaW50Q2FsbGVlcykKIHsKLSAgICBhdXRvKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKENvZGVCbG9jaykpKSBDb2RlQmxv
Y2soY29udGV4dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIFdURk1vdmUoY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBhdXRvKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGZhc3RNYWxsb2Moc2l6ZW9mKENvZGVCbG9jaykpKSBDb2RlQmxvY2soY29udGV4
dCwgbW9kZSwgbW9kdWxlSW5mb3JtYXRpb24sIGxsaW50Q2FsbGVlcyk7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpyZXN1bHQpOwogfQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250
ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlv
biwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dh
c21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29u
dGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpb24sIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIGxsaW50Q2FsbGVlcykKICAgICA6
IG1fY2FsbGVlQ291bnQobW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkp
CiAgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fbGxpbnRDYWxsZWVzKGxsaW50Q2FsbGVlcykK
IHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm90ZWN0ZWRUaGlzID0gdGhpczsKIAotICAgIGF1
dG8gdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewotICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgIGlmIChtX3BsYW4tPmZhaWxl
ZCgpKSB7Ci0gICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdl
KCk7Ci0gICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50dWFs
bHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCi0gICAgICAgIG1fbGxpbnRDYWxsZWVzLnJlc2l6ZSht
X2NhbGxlZUNvdW50KTsKLSAgICAgICAgbV9iYnFDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50
KTsKLSAgICAgICAgbV9vbWdDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKLSAgICAgICAg
bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMucmVzaXplKG1fY2FsbGVlQ291bnQpOwotCi0g
ICAgICAgIG1fcGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRl
eCwgUmVmUHRyPENhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIFJlZlB0cjxDYWxs
ZWU+JiYgd2FzbUVudHJ5cG9pbnQpIHsKLSAgICAgICAgICAgIGlmIChlbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJDYWxs
ZWVzLnNldChjYWxsZWVJbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkp
OworICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkgeworICAgICAgICBtX3BsYW4gPSBh
ZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9u
KSwgbV9sbGludENhbGxlZXMsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewor
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAg
aWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7CisgICAgICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25G
aW5pc2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IHdhc21F
bnRyeXBvaW50LT5lbnRyeXBvaW50KCk7CiAKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VX
YXNtTExJbnQoKSkKLSAgICAgICAgICAgICAgICBtX2xsaW50Q2FsbGVlc1tjYWxsZWVJbmRleF0g
PSBhZG9wdFJlZihzdGF0aWNfY2FzdDxMTEludENhbGxlZSo+KHdhc21FbnRyeXBvaW50LmxlYWtS
ZWYoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYmJxQ2FsbGVlc1tj
YWxsZWVJbmRleF0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPih3YXNtRW50cnlw
b2ludC5sZWFrUmVmKCkpKTsKLSAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCisgICAgICAgICAgICBtX2Ji
cUNhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAgbV9vbWdDYWxsZWVz
LnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVu
dHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fY2FsbGVlQ291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICBtX3dh
c21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tpXSA9IG1fbGxpbnRDYWxsZWVzW2ldLT5lbnRyeXBv
aW50KCk7CisKKyAgICAgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicyA9IG1fcGxhbi0+dGFr
ZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKKyAgICAgICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRl
cyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKKyAgICAgICAgICAgIG1fZW1i
ZWRkZXJDYWxsZWVzID0gc3RhdGljX2Nhc3Q8TExJbnRQbGFuKj4obV9wbGFuLmdldCgpKS0+dGFr
ZUVtYmVkZGVyQ2FsbGVlcygpOwogCi0gICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicyA9IG1f
cGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKLSAgICAgICAgbV93YXNtVG9XYXNtQ2Fs
bHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOworICAgICAgICAgICAg
c2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAgICB9KSkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtYWtlUmVmKG1v
ZHVsZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFz
azxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisgICAgICAgICAgICBpZiAobV9wbGFuLT5mYWlsZWQoKSkgeworICAgICAgICAg
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3NhZ2UoKTsKKyAgICAgICAg
ICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQogCi0gICAgICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkK
LSAgICAgICAgICAgIG1fbGxpbnRFbnRyeVRodW5rcyA9IGJpdHdpc2VfY2FzdDxMTEludFBsYW4q
PihtX3BsYW4uZ2V0KCkpLT50YWtlRW50cnlUaHVua3MoKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgZXZlbnR1YWxseSBjb2xsZWN0IHRoZSBCQlEgY29kZS4KKyAgICAgICAgICAg
IG1fYmJxQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisgICAgICAgICAgICBtX29tZ0Nh
bGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RD
YWxsRW50cnlQb2ludHMucmVzaXplKG1fY2FsbGVlQ291bnQpOworCisgICAgICAgICAgICBCQlFQ
bGFuKiBiYnFQbGFuID0gc3RhdGljX2Nhc3Q8QkJRUGxhbio+KG1fcGxhbi5nZXQoKSk7CisgICAg
ICAgICAgICBiYnFQbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUlu
ZGV4LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSwgUmVmUHRyPEJCUUNhbGxlZT4mJiB3YXNtRW50cnlwb2ludCkgeworICAgICAgICAg
ICAgICAgIGlmIChlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVlSW5kZXgsIFdURk1v
dmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4
XSA9IHdhc21FbnRyeXBvaW50LT5lbnRyeXBvaW50KCk7CisgICAgICAgICAgICAgICAgbV9iYnFD
YWxsZWVzW2NhbGxlZUluZGV4XSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KHdh
c21FbnRyeXBvaW50LmxlYWtSZWYoKSkpOworICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgc2V0
Q29tcGlsYXRpb25GaW5pc2hlZCgpOwotICAgIH0pOworICAgICAgICAgICAgbV93YXNtVG9XYXNt
RXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOworICAgICAgICAg
ICAgbV93YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRl
cygpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKQotICAgICAgICBtX3BsYW4g
PSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0
aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29tcGlsZSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVh
dGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtYWtlUmVmKG1vZHVs
ZUluZm9ybWF0aW9uKSwgRW50cnlQbGFuOjpGdWxsQ29tcGlsZSwgV1RGTW92ZSh0YXNrKSwgV1RG
TW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsKKyAgICAg
ICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKKyAgICAgICAgfSkpKTsKKyAgICB9CiAg
ICAgbV9wbGFuLT5zZXRNb2RlKG1vZGUpOwogCiAgICAgYXV0byYgd29ya2xpc3QgPSBXYXNtOjpl
bnN1cmVXb3JrbGlzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5oCmluZGV4IDJiZmMxYjI2MDYxNzAyYTc3OTA1MmFkYzk3OWM4YjgxOTJmNmM0OTguLjAxNTQ3
ZmQ1M2MyZWI5YWZjNzYxYjRmNGEyNTNiNjBmYTM0ZjM1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgQ29kZUJs
b2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4gewogcHVibGljOgog
ICAgIHR5cGVkZWYgdm9pZCBDYWxsYmFja1R5cGUoUmVmPENvZGVCbG9jaz4mJik7CiAgICAgdXNp
bmcgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrID0gUmVmUHRyPFdURjo6U2hhcmVkVGFzazxDYWxs
YmFja1R5cGU+PjsKLSAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBN
ZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBU
aHJvd1dhc21FeGNlcHRpb24pOworICAgIHN0YXRpYyBSZWY8Q29kZUJsb2NrPiBjcmVhdGUoQ29u
dGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgUmVmPExMSW50Q2Fs
bGVlPiopOwogCiAgICAgdm9pZCB3YWl0VW50aWxGaW5pc2hlZCgpOwogICAgIHZvaWQgY29tcGls
ZUFzeW5jKENvbnRleHQqLCBBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CkBAIC05NSw3ICs5
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqbV9vbWdDYWxsZWVzW2NhbGxlZUlu
ZGV4XS5nZXQoKTsKICAgICAgICAgaWYgKG1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0pCiAgICAg
ICAgICAgICByZXR1cm4gKm1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7Ci0gICAgICAg
IHJldHVybiAqbV9sbGludENhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOworICAgICAgICByZXR1
cm4gbV9sbGludENhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwogICAgIH0KIAogICAgIEJCUUNh
bGxlZSYgd2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQpAQCAtMTI4LDE1ICsxMjgsMTQgQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgT01HUGxhbjsKICAgICBmcmllbmQgY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuOwogCi0g
ICAgQ29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIENvZGVCbG9j
ayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBSZWY8TExJ
bnRDYWxsZWU+Kik7CiAgICAgdm9pZCBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CiAgICAgdW5z
aWduZWQgbV9jYWxsZWVDb3VudDsKICAgICBNZW1vcnlNb2RlIG1fbW9kZTsKICAgICBWZWN0b3I8
UmVmUHRyPE9NR0NhbGxlZT4+IG1fb21nQ2FsbGVlczsKICAgICBWZWN0b3I8UmVmUHRyPEJCUUNh
bGxlZT4+IG1fYmJxQ2FsbGVlczsKLSAgICBWZWN0b3I8UmVmUHRyPExMSW50Q2FsbGVlPj4gbV9s
bGludENhbGxlZXM7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJU
YWc+IG1fbGxpbnRFbnRyeVRodW5rczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8Q2Fs
bGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlckNhbGxlZXM7CisgICAg
Y29uc3QgUmVmPExMSW50Q2FsbGVlPiogbV9sbGludENhbGxlZXM7CisgICAgSGFzaE1hcDx1aW50
MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRI
YXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CiAg
ICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2Fs
bHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFn
Pj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRW50cnlQbGFuLmNwcAppbmRleCA1ZDM0NzJiNGFmNTdlNGQyZTgyMjdlNzM3ODY4NTMxN2My
MTkzYTg5Li43N2QwM2QzMGI2ODJjYTZiYTNkYTBmNDg1OWRhMjlmZTE2MWQ2NDRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcApAQCAtNDcsMzMgKzQ3
LDE3IEBAIG5hbWVzcGFjZSBXYXNtRW50cnlQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1FbnRyeVBsYW46OkVudHJ5UGxhbihDb250ZXh0KiBj
b250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21w
bGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVy
V3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKLSAgICA6IEJh
c2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVF
bWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCitFbnRyeVBsYW46OkVudHJ5UGxh
bihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29y
ayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNlKGNvbnRleHQsIFdURk1v
dmUoaW5mbyksIFdURk1vdmUodGFzaykpCiAgICAgLCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKICAgICAsIG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRl
ZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CiB9CiAKLUVudHJ5UGxhbjo6RW50cnlQbGFu
KENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRl
RW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQot
ICAgIDogQmFzZShjb250ZXh0LCBNb2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCksIFdURk1vdmUo
dGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9u
KQotICAgICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2UpKQotICAgICwgbV9zdHJlYW1pbmdQYXJz
ZXIobV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgKnRoaXMpCi0gICAgLCBtX3N0YXRlKFN0YXRl
OjpJbml0aWFsKQotICAgICwgbV9hc3luY1dvcmsod29yaykKLXsKLX0KLQotRW50cnlQbGFuOjpF
bnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJ
bmZvcm1hdGlvbiwgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogQmFzZShjb250ZXh0LCBX
VEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSwgV1RGTW92ZSh0YXNrKSkKLSAgICAsIG1fc3RyZWFt
aW5nUGFyc2VyKG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksICp0aGlzKQotICAgICwgbV9zdGF0
ZShTdGF0ZTo6SW5pdGlhbCkKLSAgICAsIG1fYXN5bmNXb3JrKEFzeW5jV29yazo6RnVsbENvbXBp
bGUpCi17Ci19Ci0KLUVudHJ5UGxhbjo6RW50cnlQbGFuKENvbnRleHQqIGNvbnRleHQsIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCitFbnRyeVBsYW46OkVudHJ5UGxhbihD
b250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIEFzeW5jV29yayB3b3Jr
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUodGFz
aykpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkpCiAgICAgLCBtX3N0cmVhbWluZ1Bh
cnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKICAgICAsIG1fc3RhdGUoU3Rh
dGU6OkluaXRpYWwpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQpAQCAtOTksMjYgKzgzLDYgQEAg
dm9pZCBFbnRyeVBsYW46Om1vdmVUb1N0YXRlKFN0YXRlIHN0YXRlKQogICAgIG1fc3RhdGUgPSBz
dGF0ZTsKIH0KIAotYm9vbCBFbnRyeVBsYW46OmRpZFJlY2VpdmVGdW5jdGlvbkRhdGEodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbikKLXsKLSAgICBk
YXRhTG9nTG5JZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJQcm9jZXNzaW5nIGZ1
bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBmdW5jdGlvbi5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAi
LCBmdW5jdGlvbi5lbmQpOwotICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGZ1bmN0aW9uLmVu
ZCAtIGZ1bmN0aW9uLnN0YXJ0OwotICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA9PSBmdW5jdGlv
bi5kYXRhLnNpemUoKSk7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlv
bkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotCi0gICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0
ID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpKTsKLSAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKLSAgICAgICAgaWYgKFdh
c21FbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwg
IiwgIik7Ci0gICAgICAgICAgICBkYXRhTG9nTG4oKTsKLSAgICAgICAgfQotICAgICAgICBmYWls
KGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAi
LCBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkp
OyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCi0gICAgfQotICAgIHJldHVybiAhIXZh
bGlkYXRpb25SZXN1bHQ7Ci19Ci0KIGJvb2wgRW50cnlQbGFuOjpwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKIHsKICAgICBp
ZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW5pdGlhbCkKQEAgLTE0NSw4ICsxMDksNiBAQCBib29sIEVu
dHJ5UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShjb25zdCB1aW50OF90KiBzb3VyY2UsIHNp
emVfdCBzb3VyY2VMZW5ndAogICAgICAgICBkYXRhTG9nTG4oIlRvb2sgIiwgKE1vbm90b25pY1Rp
bWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWNyb3NlY29uZHMoKSwgIiB1cyB0byB2YWxpZGF0ZSBt
b2R1bGUiKTsKIAogICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpOwotICAgIGlmICht
X2FzeW5jV29yayA9PSBWYWxpZGF0aW9uKQotICAgICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xv
Y2spKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU2LDYgKzExOCw3IEBAIHZvaWQgRW50
cnlQbGFuOjpwcmVwYXJlKCkKICAgICBkYXRhTG9nTG5JZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6
OnZlcmJvc2UsICJTdGFydGluZyBwcmVwYXJhdGlvbiIpOwogCiAgICAgY29uc3QgYXV0byYgZnVu
Y3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOworICAgIG1fbnVtYmVyT2ZG
dW5jdGlvbnMgPSBmdW5jdGlvbnMuc2l6ZSgpOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0
dWJzIikKICAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFz
c2VtYmx5IGNhbGxzIikpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMywyMCArMTg2LDYgQEAgcHVi
bGljOgogICAgIEVudHJ5UGxhbiYgbV9wbGFuOwogfTsKIAotdm9pZCBFbnRyeVBsYW46OmNvbXBs
ZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUg
IT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3VycmVudEluZGV4ID49IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmZ1bmN0aW9ucy5zaXplKCkpOwotICAgIGRhdGFMb2dMbklmKFdhc21FbnRyeVBsYW5JbnRl
cm5hbDo6dmVyYm9zZSwgIlN0YXJ0aW5nIENvbXBsZXRpb24iKTsKLQotICAgIGlmICghZmFpbGVk
KCkgJiYgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpCi0gICAgICAgIGRpZENvbXBsZXRlQ29t
cGlsYXRpb24obG9ja2VyKTsKLQotICAgIGlmICghaXNDb21wbGV0ZSgpKSB7Ci0gICAgICAgIG1v
dmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOwotICAgICAgICBydW5Db21wbGV0aW9uVGFza3Mo
bG9ja2VyKTsKLSAgICB9Ci19Ci0KIAogdm9pZCBFbnRyeVBsYW46OmNvbXBpbGVGdW5jdGlvbnMo
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewpAQCAtMjUyLDcgKzIwMSw2IEBAIHZvaWQgRW50
cnlQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBU
aHJlYWRDb3VudEhvbGRlciBob2xkZXIoKnRoaXMpOwogCiAgICAgc2l6ZV90IGJ5dGVzQ29tcGls
ZWQgPSAwOwotICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PmZ1bmN0aW9uczsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoZWZmb3J0ID09IFBh
cnRpYWwgJiYgYnl0ZXNDb21waWxlZCA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseVBhcnRpYWxDb21w
aWxlTGltaXQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI2MCw3ICsyMDgsNyBAQCB2b2lk
IEVudHJ5UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAg
ICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJ
bmRleCA+PSBmdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5k
ZXggPj0gbV9udW1iZXJPZkZ1bmN0aW9ucykgewogICAgICAgICAgICAgICAgIGlmIChoYXNXb3Jr
KCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21waWxlZCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjcwLDMxICsyMTgsMjUgQEAgdm9pZCBFbnRyeVBs
YW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICB9
CiAKICAgICAgICAgY29tcGlsZUZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBieXRl
c0NvbXBpbGVkICs9IGZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5kYXRhLnNpemUoKTsKKyAgICAg
ICAgYnl0ZXNDb21waWxlZCArPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF0uZGF0YS5zaXplKCk7CiAgICAgfQogfQogCi12b2lkIEVudHJ5UGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCit2b2lkIEVudHJ5UGxhbjo6Y29tcGxldGUoY29uc3Qg
QWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBj
YXNlIFN0YXRlOjpJbml0aWFsOgotICAgICAgICBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKG1fc291
cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFoYXNXb3JrKCkpIHsK
LSAgICAgICAgICAgIEFTU0VSVChpc0NvbXBsZXRlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBTdGF0ZTo6VmFsaWRhdGVk
OgotICAgICAgICBwcmVwYXJlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3RhdGU6OlBy
ZXBhcmVkOgotICAgICAgICBjb21waWxlRnVuY3Rpb25zKGVmZm9ydCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0
YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9uLT5m
dW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6
OnZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7CisKKyAgICBpZiAoIWZhaWxlZCgpICYm
IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKQorICAgICAgICBkaWRDb21wbGV0ZUNvbXBpbGF0
aW9uKGxvY2tlcik7CisKKyAgICBpZiAoIWlzQ29tcGxldGUoKSkgeworICAgICAgICBtb3ZlVG9T
dGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKKyAgICAgICAgcnVuQ29tcGxldGlvblRhc2tzKGxvY2tl
cik7CiAgICAgfQogfQogCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRW50cnlQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50
cnlQbGFuLmgKaW5kZXggMjQ4MzYyOGJjY2Q1MzAwMGE5ZDZiYTA1NTU3NDYwNTdhMjU1OTA4Zi4u
YjQ5ZGMyYjE1OTEyZGU5NjZjZDg4NmE2NDc0OGYwMWJjN2MyZjQ0NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21FbnRyeVBsYW4uaApAQCAtNDcsMzYgKzQ3LDE1IEBAIHB1Ymxp
YzoKICAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGlsZSwgVmFsaWRhdGlv
biB9OwogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVm
ZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5
Y2xlLgotICAgIEVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5
bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dX
YXNtRXhjZXB0aW9uKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBFbnRyeVBsYW4oQ29udGV4dCos
IFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwotICAgIEVudHJ5UGxhbihDb250
ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7Ci0gICAgRW50
cnlQbGFuKENvbnRleHQqLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAgIEVudHJ5
UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgQXN5bmNXb3JrLCBDb21wbGV0
aW9uVGFzayYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBFbnRyeVBsYW4oQ29udGV4dCosIFZl
Y3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgdmly
dHVhbCB+RW50cnlQbGFuKCkgPSBkZWZhdWx0OwogCi0gICAgdXNpbmcgQ2FsbGVlSW5pdGlhbGl6
ZXIgPSBGdW5jdGlvbjx2b2lkKHVpbnQzMl90LCBSZWZQdHI8Q2FsbGVlPiYmLCBSZWY8Q2FsbGVl
PiYmKT47Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IENhbGxlZUlu
aXRpYWxpemVyJikgPSAwOwotCi0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEo
KSwgbV9zb3VyY2Uuc2l6ZSgpKTsKLSAgICB9Ci0gICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9k
dWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHZvaWQgcHJlcGFyZSgpOwogCiAgICAg
dm9pZCBjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0KTsKIAotICAgIFZlY3RvcjxF
eHBvcnQ+JiBleHBvcnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFm
YWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRp
b24tPmV4cG9ydHM7Ci0gICAgfQotCi0gICAgc2l6ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dv
cmsoKSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0
aW9uQ291bnQoKTsKLSAgICB9Ci0KICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgdGFrZU1v
ZHVsZUluZm9ybWF0aW9uKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQo
KSAmJiAhaGFzV29yaygpKTsKQEAgLTEwMywzOSArODIsMjcgQEAgcHVibGljOgogICAgICAgICBD
b21wbGV0ZWQgLy8gV2Ugc2hvdWxkIG9ubHkgbW92ZSB0byBDb21wbGV0ZWQgaWYgd2UgYXJlIGhv
bGRpbmcgdGhlIGxvY2suCiAgICAgfTsKIAotICAgIGJvb2wgaGFzV29yaygpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBpZiAobV9hc3luY1dvcmsgPT0gQXN5bmNXb3JrOjpWYWxpZGF0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6VmFsaWRhdGVkOwotICAg
ICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpDb21waWxlZDsKLSAgICB9Ci0KLSAgICB2b2lk
IHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFzQmVlblByZXBh
cmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0KLSAgICBi
b29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBoYXNCZWVuUHJlcGFy
ZWQoKTsgfQotCi0gICAgYm9vbCBkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKHVuc2lnbmVkLCBjb25z
dCBGdW5jdGlvbkRhdGEmKSBvdmVycmlkZTsKKyAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID49IFN0YXRlOjpQcmVwYXJlZDsgfQogCiBwcml2
YXRlOgogICAgIGNsYXNzIFRocmVhZENvdW50SG9sZGVyOwogICAgIGZyaWVuZCBjbGFzcyBUaHJl
YWRDb3VudEhvbGRlcjsKIAotICAgIHZvaWQgcHJlcGFyZSgpOwotICAgIGJvb2wgaXNDb21wbGV0
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZDsg
fQotICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBvdmVycmlkZTsKLQot
ICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKLQogcHJvdGVjdGVkOgogICAgIC8v
IEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFz
c2VzLi4uCiAgICAgdXNpbmcgQmFzZTo6bV9sb2NrOwogCisgICAgYm9vbCBwYXJzZUFuZFZhbGlk
YXRlTW9kdWxlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOworCisgICAgY29uc3QgY2hhciogc3Rh
dGVTdHJpbmcoU3RhdGUpOworICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUpOworICAgIGJvb2wg
aXNDb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkNv
bXBsZXRlZDsgfQorICAgIHZvaWQgY29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBvdmVy
cmlkZTsKKwogICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlSW1wbCgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgY29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVDb21waWxhdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYp
ID0gMDsKIAotICAgIHZvaWQgbW92ZVRvU3RhdGUoU3RhdGUpOwotCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KICAgICBib29sIHRyeVJlc2VydmVDYXBhY2l0eShWZWN0b3I8VD4mIHZlY3Rvciwg
c2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHdoYXQpCiAgICAgewpAQCAtMTU3LDYgKzEyNCw3IEBA
IHByb3RlY3RlZDoKICAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dvcms7CiAgICAgdWludDhf
dCBtX251bWJlck9mQWN0aXZlVGhyZWFkcyB7IDAgfTsKICAgICB1aW50MzJfdCBtX2N1cnJlbnRJ
bmRleCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX251bWJlck9mRnVuY3Rpb25zIHsgMCB9OwogfTsK
IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5o
CmluZGV4IGNjZmExODU0MzU0OTk5ZjgyYThhYTQyOGU4ZDQ4ZTVjNDFmNDc4N2QuLmQyMTQwOTc0
MWMzZWY2YTAzMzM1MzQ2OGIxNDIwNGRjZmY1YmM5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC00MCwzMSArNDAsNTAgQEAgZW51
bSBjbGFzcyBCbG9ja1R5cGUgewogICAgIFRvcExldmVsCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBTdGFjaz4KLVN0YWNrIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFj
ayYgc3RhY2spCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNsb3NpbmdTdGFjaywgdHlwZW5hbWUgTmV3
U3RhY2s+Cit2b2lkIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBFbmNsb3Np
bmdTdGFjayYgZW5jbG9zaW5nU3RhY2ssIE5ld1N0YWNrJiBuZXdTdGFjaykKIHsKLSAgICBTdGFj
ayByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCkpOwotICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCkpOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YWNrLnNpemUoKSAtIHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgIG5ld1N0YWNrLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOworICAgIEFTU0VSVChlbmNsb3NpbmdT
dGFjay5zaXplKCkgPj0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOworICAgIHVuc2lnbmVk
IG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKTsgKytpKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHN0YWNrLmF0KGkgKyBv
ZmZzZXQpKTsKLSAgICBzdGFjay5zaHJpbmsob2Zmc2V0KTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICBuZXdTdGFjay51bmNoZWNrZWRBcHBlbmQoZW5jbG9zaW5nU3RhY2suYXQoaSArIG9m
ZnNldCkpOworICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb250ZXh0PgogY2xhc3MgRnVuY3Rpb25QYXJzZXIgOiBwdWJsaWMgUGFyc2Vy
PHZvaWQ+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IHR5cGVuYW1lIENv
bnRleHQ6OkV4cHJlc3Npb25UeXBlOworICAgIHN0cnVjdCBDb250cm9sRW50cnk7CisKICAgICB1
c2luZyBDb250cm9sVHlwZSA9IHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlOwotICAgIHVz
aW5nIEV4cHJlc3Npb25MaXN0ID0gdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvbkxpc3Q7Ci0g
ICAgdXNpbmcgU3RhY2sgPSB0eXBlbmFtZSBDb250ZXh0OjpTdGFjazsKLSAgICB1c2luZyBSZXN1
bHRMaXN0ID0gdHlwZW5hbWUgQ29udGV4dDo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBFeHByZXNz
aW9uVHlwZSA9IHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25UeXBlOwogCi0gICAgRnVuY3Rp
b25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
KTsKKyAgICBjbGFzcyBUeXBlZEV4cHJlc3Npb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVHlw
ZWRFeHByZXNzaW9uKCkgPSBkZWZhdWx0OwogCi0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZSgpOworICAgICAgICBUeXBlZEV4cHJlc3Npb24oVHlwZSB0eXBlLCBFeHByZXNzaW9u
VHlwZSB2YWx1ZSkKKyAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBvcGVyYXRvciBFeHByZXNzaW9u
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgICAgICBFeHByZXNzaW9uVHlw
ZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIG1fdmFsdWU7Cisg
ICAgfTsKKworICAgIHVzaW5nIENvbnRyb2xTdGFjayA9IFZlY3RvcjxDb250cm9sRW50cnksIDE2
PjsKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCA4PjsKKyAg
ICB1c2luZyBTdGFjayA9IFZlY3RvcjxUeXBlZEV4cHJlc3Npb24sIDE2LCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz47CiAKICAgICBzdHJ1Y3QgQ29udHJvbEVudHJ5IHsKICAgICAgICAgU3RhY2sgZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2s7CkBAIC03MiwxMSArOTEsMTUgQEAgcHVibGljOgogICAgICAg
ICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsKICAgICB9OwogCisgICAgRnVuY3Rpb25QYXJzZXIo
Q29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKKworICAg
IFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKwogICAgIE9wVHlwZSBjdXJyZW50
T3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T3Bjb2RlOyB9CiAgICAgc2l6ZV90IGN1
cnJlbnRPcGNvZGVTdGFydGluZ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29k
ZVN0YXJ0aW5nT2Zmc2V0OyB9CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25z
dCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCi0gICAgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNv
bnRyb2xTdGFjaygpIHsgcmV0dXJuIG1fY29udHJvbFN0YWNrOyB9CisgICAgQ29udHJvbFN0YWNr
JiBjb250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsgfQogICAgIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2soKSB7IHJldHVybiBtX2V4cHJlc3Npb25TdGFjazsgfQogCiBwcml2YXRl
OgpAQCAtODYsNiArMTA5LDggQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZUV4cHJlc3Npb24oKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5Q29udHJvbChWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiwgdW5zaWduZWQgbGV2ZWwpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGNoZWNrQnJhbmNoVGFyZ2V0KGNvbnN0IENvbnRyb2xUeXBlJik7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnkoY29uc3QgQ29udHJvbFR5cGUmKTsKIAogI2RlZmlu
ZSBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJlc3VsdCwgd2hhdCkgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobV9leHByZXNzaW9uU3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgcG9wIGVtcHR5IHN0YWNrIGlu
ICIgd2hhdCk7IFwKQEAgLTk0LDE4ICsxMTksMzggQEAgcHJpdmF0ZToKICAgICB9IHdoaWxlICgw
KQogCiAgICAgdGVtcGxhdGU8T3BUeXBlPgotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIHVuYXJ5Q2FzZSgpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IHVuYXJ5Q2FzZShUeXBlIHJldHVyblR5cGUsIFR5cGUgb3BlcmFuZFR5cGUpOwogCiAgICAgdGVt
cGxhdGU8T3BUeXBlPgotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGJpbmFy
eUNhc2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBiaW5hcnlDYXNl
KFR5cGUgcmV0dXJuVHlwZSwgVHlwZSBsaHNUeXBlLCBUeXBlIHJoc1R5cGUpOworCisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoVHlwZSBtZW1vcnlUeXBlKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKFR5cGUgbWVtb3J5VHlwZSk7
CiAKICNkZWZpbmUgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkX2V4cHJlc3Npb24pIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMobV9jb250ZXh0LmFkZF9leHByZXNzaW9uKQogCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CisgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHZhbGlkYXRpb25GYWlsKGNvbnN0IEFyZ3MmLi4uIGFyZ3Mp
IGNvbnN0CisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgRmFpbHVyZUhlbHBlcjsgLy8g
U2VlIEFETCBjb21tZW50IGluIFdhc21QYXJzZXIuaC4KKyAgICAgICAgaWYgKFVOTElLRUxZKCFB
U1NFUlRfRElTQUJMRUQgJiYgT3B0aW9uczo6Y3Jhc2hPbkZhaWxlZFdlYkFzc2VtYmx5VmFsaWRh
dGUoKSkpCisgICAgICAgICAgICBXVEZCcmVha3BvaW50VHJhcCgpOworCisgICAgICAgIFN0cmlu
Z1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgb3V0LnByaW50KCJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCB2YWxpZGF0ZTogIl9zLCBhcmdzLi4uKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWRSZXN1bHQob3V0LnRvU3RyaW5nKCkpOworICAgIH0KKyNkZWZpbmUgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25k
aXRpb24pKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRp
b25GYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwog
ICAgIC8vIEZJWE1FIGFkZCBhIG1hY3JvIGFzIGFib3ZlIGZvciBXQVNNX1RSWV9BUFBFTkRfVE9f
Q09OVFJPTF9TVEFDSyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
ODYyCiAKICAgICBDb250ZXh0JiBtX2NvbnRleHQ7CiAgICAgU3RhY2sgbV9leHByZXNzaW9uU3Rh
Y2s7Ci0gICAgVmVjdG9yPENvbnRyb2xFbnRyeT4gbV9jb250cm9sU3RhY2s7CisgICAgQ29udHJv
bFN0YWNrIG1fY29udHJvbFN0YWNrOworICAgIFZlY3RvcjxUeXBlLCAxNj4gbV9sb2NhbHM7CiAg
ICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgbV9pbmZvOwogCkBAIC0xMzYsNiArMTgxLDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9j
b250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZSksICJjYW4ndCBhZGQgIiwgbV9zaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyB0byBGdW5jdGlvbiIpOwogICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGxvY2FsR3JvdXBzQ291bnQpLCAiY2FuJ3Qg
Z2V0IGxvY2FsIGdyb3VwcyBjb3VudCIpOwogCisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9s
b2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBmdW5jdGlvbidzICIsIG1fc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIG1fbG9jYWxz
LnVuY2hlY2tlZEFwcGVuZChtX3NpZ25hdHVyZS5hcmd1bWVudChpKSk7CisKICAgICB1aW50NjRf
dCB0b3RhbE51bWJlck9mTG9jYWxzID0gbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwogICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsb2NhbEdyb3Vwc0NvdW50OyArK2kpIHsKICAgICAg
ICAgdWludDMyX3QgbnVtYmVyT2ZMb2NhbHM7CkBAIC0xNDUsNiArMTk0LDExIEBAIGF1dG8gRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiAgICAgICAgIHRvdGFsTnVt
YmVyT2ZMb2NhbHMgKz0gbnVtYmVyT2ZMb2NhbHM7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYodG90YWxOdW1iZXJPZkxvY2FscyA+IG1heEZ1bmN0aW9uTG9jYWxzLCAiRnVuY3Rpb24ncyBu
dW1iZXIgb2YgbG9jYWxzIGlzIHRvbyBiaWcgIiwgdG90YWxOdW1iZXJPZkxvY2FscywgIiBtYXhp
bXVtICIsIG1heEZ1bmN0aW9uTG9jYWxzKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYWx1ZVR5cGUodHlwZU9mTG9jYWwpLCAiY2FuJ3QgZ2V0IEZ1bmN0aW9uIGxvY2FsJ3Mg
dHlwZSBpbiBncm91cCAiLCBpKTsKKworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2xv
Y2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkodG90YWxOdW1iZXJPZkxvY2FscyksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBmdW5jdGlvbidzICIsIHRvdGFsTnVtYmVyT2ZMb2NhbHMs
ICIgbG9jYWxzIik7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkxv
Y2FsczsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKHR5cGVPZkxv
Y2FsKTsKKwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRMb2NhbCh0eXBlT2ZM
b2NhbCwgbnVtYmVyT2ZMb2NhbHMpKTsKICAgICB9CiAKQEAgLTE4NiwzMSArMjQwLDEwNCBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUJvZHkoKSAtPiBQYXJ0aWFsUmVzdWx0
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiB0ZW1wbGF0ZTxPcFR5cGUgb3A+Ci1hdXRv
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlDYXNlKCkgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6YmluYXJ5Q2FzZShUeXBlIHJldHVyblR5cGUs
IFR5cGUgbGhzVHlwZSwgVHlwZSByaHNUeXBlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgRXhw
cmVzc2lvblR5cGUgcmlnaHQ7Ci0gICAgRXhwcmVzc2lvblR5cGUgbGVmdDsKLSAgICBFeHByZXNz
aW9uVHlwZSByZXN1bHQ7CisgICAgVHlwZWRFeHByZXNzaW9uIHJpZ2h0OworICAgIFR5cGVkRXhw
cmVzc2lvbiBsZWZ0OwogCiAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhy
aWdodCwgImJpbmFyeSByaWdodCIpOwogICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNL
X0lOVE8obGVmdCwgImJpbmFyeSBsZWZ0Iik7Ci0gICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
dGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCByZXN1bHQpKTsKIAotICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobGVm
dC50eXBlKCkgIT0gbGhzVHlwZSwgb3AsICIgbGVmdCB2YWx1ZSB0eXBlIG1pc21hdGNoIik7Cisg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihyaWdodC50eXBlKCkgIT0gcmhzVHlwZSwgb3AsICIg
cmlnaHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
OworICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPihsZWZ0LCBy
aWdodCwgcmVzdWx0KSk7CisgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5k
KHJldHVyblR5cGUsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGV4dD4KIHRlbXBsYXRlPE9wVHlwZSBvcD4KLWF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnVuYXJ5Q2FzZSgpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnVuYXJ5Q2FzZShUeXBlIHJldHVyblR5cGUsIFR5cGUgb3BlcmFuZFR5cGUp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICBFeHBy
ZXNzaW9uVHlwZSByZXN1bHQ7Ci0KKyAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWU7CiAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInVuYXJ5Iik7CisKKyAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVlLnR5cGUoKSAhPSBvcGVyYW5kVHlwZSwgb3AsICIg
dmFsdWUgdHlwZSBtaXNtYXRjaCIpOworCisgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAg
IFdBU01fVFJZX0FERF9UT19DT05URVhUKHRlbXBsYXRlIGFkZE9wPG9wPih2YWx1ZSwgcmVzdWx0
KSk7CisgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4
dD4KK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmxvYWQoVHlwZSBtZW1vcnlUeXBlKSAt
PiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighbV9pbmZvLm1l
bW9yeSwgImxvYWQgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsKKworICAgIHVpbnQzMl90
IGFsaWdubWVudDsKKyAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgVHlwZWRFeHByZXNzaW9uIHBv
aW50ZXI7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50
KSwgImNhbid0IGdldCBsb2FkIGFsaWdubWVudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
YWxpZ25tZW50ID4gbWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNvZGUpLCAiYnl0ZSBh
bGlnbm1lbnQgIiwgMXVsbCA8PCBhbGlnbm1lbnQsICIgZXhjZWVkcyBsb2FkJ3MgbmF0dXJhbCBh
bGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVudE9wY29kZSkp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJjYW4n
dCBnZXQgbG9hZCBvZmZzZXQiKTsKKyAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19J
TlRPKHBvaW50ZXIsICJsb2FkIHBvaW50ZXIiKTsKKworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYocG9pbnRlci50eXBlKCkgIT0gSTMyLCBtX2N1cnJlbnRPcGNvZGUsICIgcG9pbnRlciB0eXBl
IG1pc21hdGNoIik7CisKKyAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBlPihtX2N1cnJlbnRPcGNv
ZGUpLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkpOworICAgIG1fZXhwcmVzc2lvblN0YWNrLmNv
bnN0cnVjdEFuZEFwcGVuZChtZW1vcnlUeXBlLCByZXN1bHQpOworICAgIHJldHVybiB7IH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpzdG9yZShUeXBlIG1lbW9yeVR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFtX2luZm8ubWVtb3J5LCAic3RvcmUgaW5zdHJ1Y3Rpb24gd2l0
aG91dCBtZW1vcnkiKTsKKworICAgIHVpbnQzMl90IGFsaWdubWVudDsKKyAgICB1aW50MzJfdCBv
ZmZzZXQ7CisgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlOworICAgIFR5cGVkRXhwcmVzc2lvbiBw
b2ludGVyOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFsaWdubWVu
dCksICJjYW4ndCBnZXQgc3RvcmUgYWxpZ25tZW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVudE9wY29kZSksICJieXRl
IGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBleGNlZWRzIHN0b3JlJ3MgbmF0dXJh
bCBhbGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVudE9wY29k
ZSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9mZnNldCksICJj
YW4ndCBnZXQgc3RvcmUgb2Zmc2V0Iik7CisgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyh2YWx1ZSwgInN0b3JlIHZhbHVlIik7CisgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9pbnRlciIpOworCisgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihwb2ludGVyLnR5cGUoKSAhPSBJMzIsIG1fY3VycmVudE9wY29kZSwgIiBw
b2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVl
LnR5cGUoKSAhPSBtZW1vcnlUeXBlLCBtX2N1cnJlbnRPcGNvZGUsICIgdmFsdWUgdHlwZSBtaXNt
YXRjaCIpOworCisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc3RvcmUoc3RhdGljX2Nhc3Q8
U3RvcmVPcFR5cGU+KG1fY3VycmVudE9wY29kZSksIHBvaW50ZXIsIHZhbHVlLCBvZmZzZXQpKTsK
KyAgICByZXR1cm4geyB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6Y2hlY2tCcmFuY2hUYXJnZXQoY29uc3QgQ29udHJvbFR5
cGUmIHRhcmdldCkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIGlmICghdGFyZ2V0LmJyYW5jaFRh
cmdldEFyaXR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IHRhcmdldC5icmFuY2hUYXJnZXRBcml0
eSgpLCBDb250cm9sVHlwZTo6aXNUb3BMZXZlbCh0YXJnZXQpID8gImJyYW5jaCBvdXQgb2YgZnVu
Y3Rpb24iIDogImJyYW5jaCB0byBibG9jayIsICIgb24gZXhwcmVzc2lvbiBzdGFjayBvZiBzaXpl
ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiwgYnV0IGJsb2NrLCAiLCB0YXJnZXQuc2ln
bmF0dXJlKCktPnRvU3RyaW5nKCkgLCAiIGV4cGVjdHMgIiwgdGFyZ2V0LmJyYW5jaFRhcmdldEFy
aXR5KCksICIgdmFsdWVzIik7CisKKworICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKSAtIHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKTsgKytpKQorICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodGFyZ2V0LmJyYW5jaFRhcmdldFR5
cGUoaSksIG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSksICJicmFuY2gncyBz
dGFjayB0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb2YgYmxvY2sncyB0eXBlIGJyYW5jaCB0YXJnZXQg
dHlwZS4gU3RhY2sgdmFsdWUgaGFzIHR5cGUiLCBtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBp
XS50eXBlKCksICIgYnV0IGJyYW5jaCB0YXJnZXQgZXhwZWN0cyBhIHZhbHVlIHdpdGggc3VidHlw
ZSBvZiAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgIiBhdCBpbmRleCAiLCBpKTsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CithdXRvIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmlmeShjb25zdCBDb250cm9sVHlwZSYgY29udHJvbERh
dGEpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbnRy
b2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpICE9IG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSwgIiBibG9jayB3aXRoIHR5cGU6ICIsIGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT50b1N0
cmluZygpLCAiIHJldHVybnM6ICIsIGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3Vu
dCgpLCAiIGJ1dCBzdGFjayBoYXM6ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1
ZXMiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29udHJvbERhdGEuc2lnbmF0dXJl
KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRigh
aXNTdWJ0eXBlKG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKSwgY29udHJvbERhdGEuc2lnbmF0
dXJlKCktPnJldHVyblR5cGUoaSkpLCAiY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVj
dGVkIHR5cGUuICIsIG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKSwgIiBpcyBub3QgYSBzdWJ0
eXBlIG9mICIsIGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpKTsKIAotICAg
IG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogICAgIHJldHVybiB7IH07CiB9CiAK
QEAgLTIxOCw4NSArMzQ1LDY2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiBhdXRvIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgc3dpdGNoIChtX2N1cnJlbnRPcGNvZGUpIHsKLSNkZWZpbmUgQ1JFQVRFX0NBU0Uo
bmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5cGU6Om5hbWU6IHJldHVybiBiaW5hcnlDYXNl
PE9wVHlwZTo6bmFtZT4oKTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGlu
YywgbGhzVHlwZSwgcmhzVHlwZSwgcmV0dXJuVHlwZSkgY2FzZSBPcFR5cGU6Om5hbWU6IHJldHVy
biBiaW5hcnlDYXNlPE9wVHlwZTo6bmFtZT4ocmV0dXJuVHlwZSwgbGhzVHlwZSwgcmhzVHlwZSk7
CiAgICAgRk9SX0VBQ0hfV0FTTV9CSU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAjdW5kZWYgQ1JFQVRF
X0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIE9w
VHlwZTo6bmFtZTogcmV0dXJuIHVuYXJ5Q2FzZTxPcFR5cGU6Om5hbWU+KCk7CisjZGVmaW5lIENS
RUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMsIG9wZXJhbmRUeXBlLCByZXR1cm5UeXBlKSBj
YXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIHVuYXJ5Q2FzZTxPcFR5cGU6Om5hbWU+KHJldHVyblR5
cGUsIG9wZXJhbmRUeXBlKTsKICAgICBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKENSRUFURV9DQVNF
KQogI3VuZGVmIENSRUFURV9DQVNFCiAKICAgICBjYXNlIFNlbGVjdDogewotICAgICAgICBFeHBy
ZXNzaW9uVHlwZSBjb25kaXRpb247Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHplcm87Ci0gICAg
ICAgIEV4cHJlc3Npb25UeXBlIG5vblplcm87CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBjb25k
aXRpb247CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB6ZXJvOworICAgICAgICBUeXBlZEV4cHJl
c3Npb24gbm9uWmVybzsKIAogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19J
TlRPKGNvbmRpdGlvbiwgInNlbGVjdCBjb25kaXRpb24iKTsKICAgICAgICAgV0FTTV9UUllfUE9Q
X0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh6ZXJvLCAic2VsZWN0IHplcm8iKTsKICAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhub25aZXJvLCAic2VsZWN0IG5vbi16ZXJv
Iik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24udHlwZSgpICE9
IEkzMiwgInNlbGVjdCBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAiLCBjb25kaXRpb24udHlw
ZSgpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihub25aZXJvLnR5cGUoKSAhPSB6
ZXJvLnR5cGUoKSwgInNlbGVjdCByZXN1bHQgdHlwZXMgbXVzdCBtYXRjaCwgZ290ICIsIG5vblpl
cm8udHlwZSgpLCAiIGFuZCAiLCB6ZXJvLnR5cGUoKSk7CisKICAgICAgICAgRXhwcmVzc2lvblR5
cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRTZWxlY3QoY29u
ZGl0aW9uLCBub25aZXJvLCB6ZXJvLCByZXN1bHQpKTsKIAotICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0
QW5kQXBwZW5kKHplcm8udHlwZSgpLCByZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIE9wVHlw
ZTo6bmFtZToKLSAgICBGT1JfRUFDSF9XQVNNX01FTU9SWV9MT0FEX09QKENSRUFURV9DQVNFKSB7
Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0Owot
ICAgICAgICBFeHByZXNzaW9uVHlwZSBwb2ludGVyOwotICAgICAgICBFeHByZXNzaW9uVHlwZSBy
ZXN1bHQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFsaWdu
bWVudCksICJjYW4ndCBnZXQgbG9hZCBhbGlnbm1lbnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVudE9wY29kZSks
ICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBleGNlZWRzIGxvYWQncyBu
YXR1cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8IG1lbW9yeUxvZzJBbGlnbm1lbnQobV9jdXJyZW50
T3Bjb2RlKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG9m
ZnNldCksICJjYW4ndCBnZXQgbG9hZCBvZmZzZXQiKTsKLSAgICAgICAgV0FTTV9UUllfUE9QX0VY
UFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAibG9hZCBwb2ludGVyIik7Ci0gICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGxvYWQoc3RhdGljX2Nhc3Q8TG9hZE9wVHlwZT4obV9jdXJy
ZW50T3Bjb2RlKSwgcG9pbnRlciwgcmVzdWx0LCBvZmZzZXQpKTsKLSAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQorI2Rl
ZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jLCBtZW1vcnlUeXBlKSBjYXNlIE9w
VHlwZTo6bmFtZTogcmV0dXJuIGxvYWQobWVtb3J5VHlwZSk7CitGT1JfRUFDSF9XQVNNX01FTU9S
WV9MT0FEX09QKENSRUFURV9DQVNFKQorI3VuZGVmIENSRUFURV9DQVNFCiAKLSAgICBGT1JfRUFD
SF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkgewotICAgICAgICB1aW50MzJfdCBh
bGlnbm1lbnQ7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICAgICAgRXhwcmVzc2lvblR5
cGUgdmFsdWU7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHBvaW50ZXI7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFsaWdubWVudCksICJjYW4ndCBnZXQgc3Rv
cmUgYWxpZ25tZW50Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYWxpZ25tZW50ID4g
bWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNvZGUpLCAiYnl0ZSBhbGlnbm1lbnQgIiwg
MXVsbCA8PCBhbGlnbm1lbnQsICIgZXhjZWVkcyBzdG9yZSdzIG5hdHVyYWwgYWxpZ25tZW50ICIs
IDF1bGwgPDwgbWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNvZGUpKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBz
dG9yZSBvZmZzZXQiKTsKLSAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5U
Tyh2YWx1ZSwgInN0b3JlIHZhbHVlIik7Ci0gICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9O
X1NUQUNLX0lOVE8ocG9pbnRlciwgInN0b3JlIHBvaW50ZXIiKTsKLSAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoc3RvcmUoc3RhdGljX2Nhc3Q8U3RvcmVPcFR5cGU+KG1fY3VycmVudE9w
Y29kZSksIHBvaW50ZXIsIHZhbHVlLCBvZmZzZXQpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICB9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMsIG1lbW9yeVR5cGUp
IGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gc3RvcmUobWVtb3J5VHlwZSk7CitGT1JfRUFDSF9X
QVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICN1bmRlZiBDUkVBVEVfQ0FTRQogCiAg
ICAgY2FzZSBGMzJDb25zdDogewogICAgICAgICB1aW50MzJfdCBjb25zdGFudDsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50MzIoY29uc3RhbnQpLCAiY2FuJ3QgcGFyc2Ug
MzItYml0IGZsb2F0aW5nLXBvaW50IGNvbnN0YW50Iik7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0
YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoRjMyLCBjb25zdGFudCkpOworICAgICAg
ICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRjMyLCBtX2NvbnRleHQuYWRk
Q29uc3RhbnQoRjMyLCBjb25zdGFudCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAog
ICAgIGNhc2UgSTMyQ29uc3Q6IHsKICAgICAgICAgaW50MzJfdCBjb25zdGFudDsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJJbnQzMihjb25zdGFudCksICJjYW4ndCBwYXJz
ZSAzMi1iaXQgY29uc3RhbnQiKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1f
Y29udGV4dC5hZGRDb25zdGFudChJMzIsIGNvbnN0YW50KSk7CisgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJMzIsIG1fY29udGV4dC5hZGRDb25zdGFudChJMzIs
IGNvbnN0YW50KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBGNjRD
b25zdDogewogICAgICAgICB1aW50NjRfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VVSW50NjQoY29uc3RhbnQpLCAiY2FuJ3QgcGFyc2UgNjQtYml0IGZsb2F0
aW5nLXBvaW50IGNvbnN0YW50Iik7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZCht
X2NvbnRleHQuYWRkQ29uc3RhbnQoRjY0LCBjb25zdGFudCkpOworICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRjY0LCBtX2NvbnRleHQuYWRkQ29uc3RhbnQoRjY0
LCBjb25zdGFudCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgSTY0
Q29uc3Q6IHsKICAgICAgICAgaW50NjRfdCBjb25zdGFudDsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJJbnQ2NChjb25zdGFudCksICJjYW4ndCBwYXJzZSA2NC1iaXQgY29u
c3RhbnQiKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRD
b25zdGFudChJNjQsIGNvbnN0YW50KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0
cnVjdEFuZEFwcGVuZChJNjQsIG1fY29udGV4dC5hZGRDb25zdGFudChJNjQsIGNvbnN0YW50KSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zMDQsMTAgKzQxMiwxNiBAQCBhdXRv
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5
UmVmZXJlbmNlcygpLCAicmVmZXJlbmNlcyBhcmUgbm90IGVuYWJsZWQiKTsKICAgICAgICAgdW5z
aWduZWQgdGFibGVJbmRleDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIodGFibGVJbmRleCksICJjYW4ndCBwYXJzZSB0YWJsZSBpbmRleCIpOwotICAgICAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQsIGluZGV4OworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKHRhYmxlSW5kZXggPj0gbV9pbmZvLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4ICIsIHRh
YmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9pbmZvLnRhYmxlQ291bnQoKSk7
CisKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGluZGV4OwogICAgICAgICBXQVNNX1RSWV9QT1Bf
RVhQUkVTU0lPTl9TVEFDS19JTlRPKGluZGV4LCAidGFibGUuZ2V0Iik7CisgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoSTMyICE9IGluZGV4LnR5cGUoKSwgInRhYmxlLmdldCBpbmRleCB0
byB0eXBlICIsIGluZGV4LnR5cGUoKSwgIiBleHBlY3RlZCAiLCBJMzIpOworCisgICAgICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
VGFibGVHZXQodGFibGVJbmRleCwgaW5kZXgsIHJlc3VsdCkpOwotICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgVHlwZSByZXN1bHRUeXBlID0gbV9pbmZv
LnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQocmVzdWx0VHlwZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKQEAgLTMxNSwxMCArNDI5LDE1IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlSZWZlcmVuY2VzKCksICJy
ZWZlcmVuY2VzIGFyZSBub3QgZW5hYmxlZCIpOwogICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4
OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4
KSwgImNhbid0IHBhcnNlIHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHZh
bCwgaW5kZXg7Ci0gICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFs
LCAidGFibGUuc2V0Iik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRl
eCA+PSBtX2luZm8udGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBp
cyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8udGFibGVDb3VudCgpKTsKKyAgICAgICAgVHlw
ZWRFeHByZXNzaW9uIHZhbHVlLCBpbmRleDsKKyAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJ
T05fU1RBQ0tfSU5UTyh2YWx1ZSwgInRhYmxlLnNldCIpOwogICAgICAgICBXQVNNX1RSWV9QT1Bf
RVhQUkVTU0lPTl9TVEFDS19JTlRPKGluZGV4LCAidGFibGUuc2V0Iik7Ci0gICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlU2V0KHRhYmxlSW5kZXgsIGluZGV4LCB2YWwpKTsK
KyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihJMzIgIT0gaW5kZXgudHlwZSgpLCAidGFi
bGUuc2V0IGluZGV4IHRvIHR5cGUgIiwgaW5kZXgudHlwZSgpLCAiIGV4cGVjdGVkICIsIEkzMik7
CisgICAgICAgIFR5cGUgdHlwZSA9IG1faW5mby50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUo
KTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZhbHVlLnR5cGUo
KSwgdHlwZSksICJ0YWJsZS5zZXQgdmFsdWUgdG8gdHlwZSAiLCB2YWx1ZS50eXBlKCksICIgZXhw
ZWN0ZWQgIiwgdHlwZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faW5mby50YWJsZXNbdGFi
bGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5cGU6OkFueXJlZiB8fCBtX2luZm8udGFi
bGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBlOjpGdW5jcmVmKTsKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVGFibGVTZXQodGFibGVJbmRleCwgaW5k
ZXgsIHZhbHVlKSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zMjgsMjcgKzQ0
NywzOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgo
ZXh0T3ApLCAiY2FuJ3QgcGFyc2UgdGFibGUgZXh0ZW5kZWQgb3Bjb2RlIik7CiAgICAgICAgIHVu
c2lnbmVkIHRhYmxlSW5kZXg7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
VUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgcGFyc2UgdGFibGUgaW5kZXgiKTsKKyAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1faW5mby50YWJsZUNvdW50KCks
ICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1f
aW5mby50YWJsZUNvdW50KCkpOwogCiAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8RXh0VGFi
bGVPcFR5cGU+KGV4dE9wKSkgewogICAgICAgICBjYXNlIEV4dFRhYmxlT3BUeXBlOjpUYWJsZVNp
emU6IHsKICAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlU2l6ZSh0YWJsZUluZGV4LCByZXN1bHQpKTsK
LSAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKEkzMiwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0VGFibGVPcFR5cGU6
OlRhYmxlR3JvdzogewotICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgZmlsbCwgZGVsdGEsIHJl
c3VsdDsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBmaWxsOworICAgICAgICAgICAgVHlw
ZWRFeHByZXNzaW9uIGRlbHRhOwogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05f
U1RBQ0tfSU5UTyhkZWx0YSwgInRhYmxlLmdyb3ciKTsKICAgICAgICAgICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oZmlsbCwgInRhYmxlLmdyb3ciKTsKKworICAgICAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGZpbGwudHlwZSgpLCBtX2luZm8u
dGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkpLCAidGFibGUuZ3JvdyBleHBlY3RzIGZpbGwg
dmFsdWUgb2YgdHlwZSAiLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCksICIg
Z290ICIsIGZpbGwudHlwZSgpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
STMyICE9IGRlbHRhLnR5cGUoKSwgInRhYmxlLmdyb3cgZXhwZWN0cyBhbiBpMzIgZGVsdGEgdmFs
dWUsIGdvdCAiLCBkZWx0YS50eXBlKCkpOworCisgICAgICAgICAgICBFeHByZXNzaW9uVHlwZSBy
ZXN1bHQ7CiAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUYWJsZUdyb3co
dGFibGVJbmRleCwgZmlsbCwgZGVsdGEsIHJlc3VsdCkpOwotICAgICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5j
b25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBFeHRUYWJsZU9wVHlwZTo6VGFibGVGaWxsOiB7Ci0gICAgICAg
ICAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIGZpbGwsIGNvdW50OworICAgICAgICAgICAgVHlw
ZWRFeHByZXNzaW9uIG9mZnNldCwgZmlsbCwgY291bnQ7CiAgICAgICAgICAgICBXQVNNX1RSWV9Q
T1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvdW50LCAidGFibGUuZmlsbCIpOwogICAgICAgICAg
ICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhmaWxsLCAidGFibGUuZmlsbCIp
OwogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhvZmZzZXQs
ICJ0YWJsZS5maWxsIik7CisKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZShmaWxsLnR5cGUoKSwgbV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgp
KSwgInRhYmxlLmZpbGwgZXhwZWN0cyBmaWxsIHZhbHVlIG9mIHR5cGUgIiwgbV9pbmZvLnRhYmxl
c1t0YWJsZUluZGV4XS53YXNtVHlwZSgpLCAiIGdvdCAiLCBmaWxsLnR5cGUoKSk7CisgICAgICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKEkzMiAhPSBvZmZzZXQudHlwZSgpLCAidGFibGUu
ZmlsbCBleHBlY3RzIGFuIGkzMiBvZmZzZXQgdmFsdWUsIGdvdCAiLCBvZmZzZXQudHlwZSgpKTsK
KyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoSTMyICE9IGNvdW50LnR5cGUoKSwg
InRhYmxlLmZpbGwgZXhwZWN0cyBhbiBpMzIgY291bnQgdmFsdWUsIGdvdCAiLCBjb3VudC50eXBl
KCkpOworCiAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUYWJsZUZpbGwo
dGFibGVJbmRleCwgb2Zmc2V0LCBmaWxsLCBjb3VudCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTM2MSwxNiArNDkyLDE4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIGNhc2UgUmVmTnVs
bDogewogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eVJlZmVyZW5jZXMoKSwgInJlZmVyZW5jZXMgYXJlIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmFwcGVuZChtX2NvbnRleHQuYWRkQ29uc3RhbnQoRnVuY3JlZiwgSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQoRnVuY3JlZiwgbV9jb250ZXh0LmFkZENvbnN0YW50KEZ1bmNyZWYsIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
ICAgICBjYXNlIFJlZklzTnVsbDogewogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRp
b25zOjp1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMoKSwgInJlZmVyZW5jZXMgYXJlIG5vdCBlbmFi
bGVkIik7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCwgdmFsdWU7CisgICAgICAgIFR5
cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RB
Q0tfSU5UTyh2YWx1ZSwgInJlZi5pc19udWxsIik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZSh2YWx1ZS50eXBlKCksIEFueXJlZiksICJyZWYuaXNfbnVsbCB0byB0
eXBlICIsIHZhbHVlLnR5cGUoKSwgIiBleHBlY3RlZCAiLCBBbnlyZWYpOworICAgICAgICBFeHBy
ZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFJl
ZklzTnVsbCh2YWx1ZSwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQo
STMyLCByZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMzgwLDggKzUx
MywxMCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVz
ZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVmZXJlbmNlcyBhcmUgbm90IGVuYWJsZWQiKTsK
ICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2Fu
J3QgZ2V0IGluZGV4IGZvciByZWYuZnVuYyIpOwogCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoaW5kZXggPj0gbV9pbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgInJlZi5mdW5j
IGluZGV4ICIsIGluZGV4LCAiIGlzIHRvbyBsYXJnZSwgbWF4IGlzICIsIG1faW5mby5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOworICAgICAgICBtX2luZm8uYWRkUmVmZXJlbmNlZEZ1bmN0aW9u
KGluZGV4KTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkUmVmRnVuYyhpbmRl
eCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoRnVuY3JlZiwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTM4OSwxNiArNTI0LDE4IEBA
IGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRp
YWxSZXN1bHQKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAgIEV4cHJlc3Npb25UeXBl
IHJlc3VsdDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5k
ZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciBnZXRfbG9jYWwiKTsKKyAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2xvY2Fscy5zaXplKCksICJhdHRlbXB0IHRvIHVzZSB1
bmtub3duIGxvY2FsICIsIGluZGV4LCAiIGxhc3Qgb25lIGlzICIsIG1fbG9jYWxzLnNpemUoKSk7
CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldExvY2FsKGluZGV4LCByZXN1bHQp
KTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChtX2xvY2Fsc1tpbmRleF0sIHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogewog
ICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsdWU7Cisg
ICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGluZGV4IGZvciBzZXRfbG9jYWwi
KTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInNl
dF9sb2NhbCIpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodmFs
dWUudHlwZSgpLCBtX2xvY2Fsc1tpbmRleF0pLCAic2V0X2xvY2FsIHRvIHR5cGUgIiwgdmFsdWUu
dHlwZSgpLCAiIGV4cGVjdGVkICIsIG1fbG9jYWxzW2luZGV4XSk7CiAgICAgICAgIFdBU01fVFJZ
X0FERF9UT19DT05URVhUKHNldExvY2FsKGluZGV4LCB2YWx1ZSkpOwogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KQEAgLTQwNyw3ICs1NDQsOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHVpbnQzMl90
IGluZGV4OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRl
eCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHRlZV9sb2NhbCIpOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImNhbid0IHRlZV9sb2NhbCBv
biBlbXB0eSBleHByZXNzaW9uIHN0YWNrIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKHNldExvY2FsKGluZGV4LCBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkpKTsKKyAgICAgICAg
VHlwZWRFeHByZXNzaW9uIHZhbHVlID0gbV9leHByZXNzaW9uU3RhY2subGFzdCgpOworICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodmFsdWUudHlwZSgpLCBtX2xvY2Fs
c1tpbmRleF0pLCAic2V0X2xvY2FsIHRvIHR5cGUgIiwgdmFsdWUudHlwZSgpLCAiIGV4cGVjdGVk
ICIsIG1fbG9jYWxzW2luZGV4XSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKHNl
dExvY2FsKGluZGV4LCB2YWx1ZSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAt
NDE1LDE2ICs1NTQsMjcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHBy
ZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICB1aW50MzJfdCBpbmRleDsKICAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgZ2V0X2dsb2JhbCdzIGluZGV4Iik7Cisg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmdsb2JhbHMuc2l6
ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMg
IiwgbV9pbmZvLmdsb2JhbHMuc2l6ZSgpKTsKKyAgICAgICAgVHlwZSByZXN1bHRUeXBlID0gbV9p
bmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CisgICAgICAgIEFTU0VSVChpc1ZhbHVlVHlwZShyZXN1
bHRUeXBlKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGdldEdsb2JhbChpbmRl
eCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmVzdWx0VHlwZSwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIFNldEdsb2Jh
bDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFs
dWU7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IHNldF9nbG9iYWwncyBp
bmRleCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVl
LCAic2V0X2dsb2JhbCB2YWx1ZSIpOworCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
aW5kZXggPj0gbV9pbmZvLmdsb2JhbHMuc2l6ZSgpLCAic2V0X2dsb2JhbCAiLCBpbmRleCwgIiBv
ZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9pbmZvLmdsb2JhbHMuc2l6ZSgpKTsKKyAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2luZm8uZ2xvYmFsc1tpbmRleF0ubXV0YWJp
bGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgaXMgaW1t
dXRhYmxlIik7CisKKyAgICAgICAgVHlwZSBnbG9iYWxUeXBlID0gbV9pbmZvLmdsb2JhbHNbaW5k
ZXhdLnR5cGU7CisgICAgICAgIEFTU0VSVChpc1ZhbHVlVHlwZShnbG9iYWxUeXBlKSk7CisgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZ2xvYmFsVHlwZSAhPSB2YWx1ZS50eXBlKCksICJz
ZXRfZ2xvYmFsICIsIGluZGV4LCAiIHdpdGggdHlwZSAiLCBnbG9iYWxUeXBlLCAiIHdpdGggYSB2
YXJpYWJsZSBvZiB0eXBlICIsIHZhbHVlLnR5cGUoKSk7CisKICAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSkpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KQEAgLTQ0MiwxNSArNTkyLDIyIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiBhcmdzOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRy
eVJlc2VydmVDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxsZWVTaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmly
c3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpKTsK
KyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5hdChp
KTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShhcmcudHlw
ZSgpLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkpLCAi
YXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnLnR5cGUoKSwgIiwgZXhw
ZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgp
KTsKKyAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGFyZyk7CiAgICAgICAgICAgICBt
X2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAgICAgICAgfQogICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAorICAgICAgICBSRUxF
QVNFX0FTU0VSVChjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgp
KTsKKwogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCBy
ZXN1bHRzKSk7CiAKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kVmVjdG9yKHJlc3Vs
dHMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVTaWduYXR1cmUucmV0dXJuQ291bnQo
KSA9PSByZXN1bHRzLnNpemUoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNhbGxlZVNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoY2FsbGVlU2lnbmF0dXJlLnJldHVyblR5cGUo
aSksIHJlc3VsdHNbaV0pOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNDY5LDE4
ICs2MjYsMjcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9u
KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxl
ZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgKyAxOyAvLyBBZGQgdGhlIGNhbGxlZSdzIGluZGV4
LgogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgPiBtX2V4cHJlc3Np
b25TdGFjay5zaXplKCksICJjYWxsX2luZGlyZWN0IGV4cGVjdHMgIiwgYXJndW1lbnRDb3VudCwg
IiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50bHkgaG9sZHMgIiwg
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCisgICAgICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5cGUoKSAhPSBJMzIsICJu
b24taTMyIGNhbGxfaW5kaXJlY3QgaW5kZXggIiwgbV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5
cGUoKSk7CisKICAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOwogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGFyZ3VtZW50Q291bnQsICIg
Y2FsbF9pbmRpcmVjdCBhcmd1bWVudHMiKTsKICAgICAgICAgc2l6ZV90IGZpcnN0QXJndW1lbnRJ
bmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGFyZ3VtZW50Q291bnQ7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQobV9leHBy
ZXNzaW9uU3RhY2suYXQoaSkpOworICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1f
ZXhwcmVzc2lvblN0YWNrLmF0KGkpOworICAgICAgICAgICAgaWYgKGkgPCBjYWxsZWVTaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpKQorICAgICAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIWlzU3VidHlwZShhcmcudHlwZSgpLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZp
cnN0QXJndW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsX2luZGly
ZWN0LCBnb3QgIiwgYXJnLnR5cGUoKSwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFy
Z3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpKTsKKyAgICAgICAgICAgIGFyZ3MudW5jaGVj
a2VkQXBwZW5kKGFyZyk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3Rh
Y2soKTsKICAgICAgICAgfQogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RB
cmd1bWVudEluZGV4KTsKIAorCisKICAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwogICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3QodGFibGVJbmRleCwgY2Fs
bGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LmFwcGVuZFZlY3RvcihyZXN1bHRzKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY2FsbGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChjYWxsZWVTaWduYXR1cmUucmV0dXJuVHlw
ZShpKSwgcmVzdWx0c1tpXSk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC00ODks
NiArNjU1LDEzIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lv
bigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0
dXJlOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1f
aW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBibG9jaydzIHNpZ25hdHVyZSIpOwog
CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgp
IDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IHZhbHVlcyBvbiBz
dGFjayBmb3IgYmxvY2suIEJsb2NrIGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJl
IHByZXNlbnQuIEJsb2NrIGhhcyBpbmxpbmVTaWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+
dG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsr
aSkgeworICAgICAgICAgICAgVHlwZSB0eXBlID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zmc2V0
ICsgaSkudHlwZSgpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0
eXBlKHR5cGUsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkpLCAiQmxvY2sgZXhwZWN0cyB0
aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlIGEgc3VidHlwZSBvZiAiLCBpbmxpbmVT
aWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlKTsK
KyAgICAgICAgfQorCiAgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7CiAgICAgICAgIENvbnRyb2xUeXBlIGJs
b2NrOwpAQCAtNTA1LDYgKzY3OCwxMyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIEJsb2NrU2lnbmF0dXJl
IGlubGluZVNpZ25hdHVyZTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VCbG9j
a1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgbG9vcCdzIHNp
Z25hdHVyZSIpOwogCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3
IHZhbHVlcyBvbiBzdGFjayBmb3IgbG9vcCBibG9jay4gTG9vcCBleHBlY3RzICIsIGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBMb29wIGhhcyBpbmxpbmVTaWduYXR1cmU6ICIsIGlu
bGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgVHlwZSB0eXBlID0gbV9leHByZXNzaW9u
U3RhY2suYXQob2Zmc2V0ICsgaSkudHlwZSgpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRighaXNTdWJ0eXBlKHR5cGUsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkpLCAi
TG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgYSBzdWJ0eXBl
IG9mICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICIgYnV0IGFyZ3VtZW50IGhhcyB0
eXBlICIsIHR5cGUpOworICAgICAgICB9CisKICAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAgICAgICBTdGFjayBuZXdTdGFjazsKICAgICAgICAg
Q29udHJvbFR5cGUgbG9vcDsKQEAgLTUxOSwxMCArNjk5LDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIGNh
c2UgSWY6IHsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwotICAgICAg
ICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb247CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBjb25k
aXRpb247CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlQmxvY2tTaWduYXR1cmUo
bV9pbmZvLCBpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGlmJ3Mgc2lnbmF0dXJlIik7CiAg
ICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiaWYg
Y29uZGl0aW9uIik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24u
dHlwZSgpICE9IEkzMiwgImlmIGNvbmRpdGlvbiBtdXN0IGJlIGkzMiwgZ290ICIsIGNvbmRpdGlv
bi50eXBlKCkpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0
YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBh
cmd1bWVudHMgb24gc3RhY2sgZm9yIGlmIGJsb2NrLiBJZiBleHBlY3RzICIsIGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5z
aXplKCksICIgd2VyZSBwcmVzZW50LiBJZiBibG9jayBoYXMgc2lnbmF0dXJlOiAiLCBpbmxpbmVT
aWduYXR1cmUtPnRvU3RyaW5nKCkpOworICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJl
c3Npb25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpOyArK2kpCisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5
cGUobV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0ICsgaV0udHlwZSgpLCBpbmxpbmVTaWduYXR1cmUt
PmFyZ3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAi
IHRvIGJlIGEgc3VidHlwZSBvZiAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1
dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkpOworCiAg
ICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsKICAgICAg
ICAgU3RhY2sgbmV3U3RhY2s7CiAgICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2w7CkBAIC01Mzcs
MzIgKzcyMyw0MCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Np
b24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBjYXNlIEVsc2U6IHsKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihtX2NvbnRyb2xTdGFjay5zaXplKCkgPT0gMSwgImNhbid0IHVzZSBlbHNl
IGJsb2NrIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBmdW5jdGlvbiIpOwotICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRFbHNlKG1fY29udHJvbFN0YWNrLmxhc3QoKS5jb250cm9sRGF0
YSwgbV9leHByZXNzaW9uU3RhY2spKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBXVEZN
b3ZlKG1fY29udHJvbFN0YWNrLmxhc3QoKS5lbHNlQmxvY2tTdGFjayk7CisKKyAgICAgICAgQ29u
dHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CisKKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShjb250cm9sRW50cnkuY29udHJvbERh
dGEpKTsKKworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlKGNvbnRyb2xF
bnRyeS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKKyAgICAgICAgbV9leHByZXNz
aW9uU3RhY2sgPSBXVEZNb3ZlKGNvbnRyb2xFbnRyeS5lbHNlQmxvY2tTdGFjayk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBCcjoKICAgICBjYXNlIEJySWY6IHsKICAg
ICAgICAgdWludDMyX3QgdGFyZ2V0OwotICAgICAgICBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24g
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24oKTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGNv
bmRpdGlvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFy
Z2V0KSwgImNhbid0IGdldCBiciAvIGJyX2lmJ3MgdGFyZ2V0Iik7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYodGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyIC8gYnJfaWYn
cyB0YXJnZXQgIiwgdGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29u
dHJvbFN0YWNrLnNpemUoKSk7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRPcGNvZGUgPT0gQnJJZikK
KyAgICAgICAgaWYgKG1fY3VycmVudE9wY29kZSA9PSBCcklmKSB7CiAgICAgICAgICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJyIC8gYnJfaWYgY29u
ZGl0aW9uIik7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoY29uZGl0aW9uLnR5cGUoKSAhPSBJMzIsICJjb25kaXRpb25hbCBicmFuY2ggd2l0aCBub24t
aTMyIGNvbmRpdGlvbiAiLCBjb25kaXRpb24udHlwZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOworICAgICAgICAgICAgY29uZGl0aW9u
ID0gVHlwZWRFeHByZXNzaW9uIHsgVm9pZCwgQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKCkgfTsK
KyAgICAgICAgfQogCiAgICAgICAgIENvbnRyb2xUeXBlJiBkYXRhID0gbV9jb250cm9sU3RhY2tb
bV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIHRhcmdldF0uY29udHJvbERhdGE7Ci0KKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhjaGVja0JyYW5jaFRhcmdldChkYXRhKSk7CiAg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEJyYW5jaChkYXRhLCBjb25kaXRpb24s
IG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
Y2FzZSBCclRhYmxlOiB7CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mVGFyZ2V0czsKLSAgICAg
ICAgdWludDMyX3QgZGVmYXVsdFRhcmdldDsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0
aW9uOworICAgICAgICB1aW50MzJfdCBkZWZhdWx0VGFyZ2V0SW5kZXg7CisgICAgICAgIFR5cGVk
RXhwcmVzc2lvbiBjb25kaXRpb247CiAgICAgICAgIFZlY3RvcjxDb250cm9sVHlwZSo+IHRhcmdl
dHM7CiAKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobnVtYmVy
T2ZUYXJnZXRzKSwgImNhbid0IGdldCB0aGUgbnVtYmVyIG9mIHRhcmdldHMgZm9yIGJyX3RhYmxl
Iik7CkBAIC01NzYsMTcgKzc3MCwyOSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICB0YXJnZXRzLnVu
Y2hlY2tlZEFwcGVuZCgmbV9jb250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAt
IHRhcmdldF0uY29udHJvbERhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIoZGVmYXVsdFRhcmdldCksICJjYW4ndCBnZXQgZGVmYXVs
dCB0YXJnZXQgZm9yIGJyX3RhYmxlIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGVm
YXVsdFRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJicl90YWJsZSdzIGRlZmF1bHQg
dGFyZ2V0ICIsIGRlZmF1bHRUYXJnZXQsICIgZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUgIiwg
bV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoZGVmYXVsdFRhcmdldEluZGV4KSwgImNhbid0IGdldCBkZWZhdWx0IHRhcmdl
dCBmb3IgYnJfdGFibGUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihkZWZhdWx0VGFy
Z2V0SW5kZXggPj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAiYnJfdGFibGUncyBkZWZhdWx0IHRh
cmdldCAiLCBkZWZhdWx0VGFyZ2V0SW5kZXgsICIgZXhjZWVkcyBjb250cm9sIHN0YWNrIHNpemUg
IiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKKyAgICAgICAgQ29udHJvbFR5cGUmIGRlZmF1bHRU
YXJnZXQgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gZGVmYXVs
dFRhcmdldEluZGV4XS5jb250cm9sRGF0YTsKIAogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVT
U0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImJyX3RhYmxlIGNvbmRpdGlvbiIpOwotICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRTd2l0Y2goY29uZGl0aW9uLCB0YXJnZXRzLCBt
X2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gZGVmYXVsdFRhcmdldF0u
Y29udHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CisgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYoY29uZGl0aW9uLnR5cGUoKSAhPSBJMzIsICJicl90YWJsZSB3aXRoIG5vbi1pMzIg
Y29uZGl0aW9uICIsIGNvbmRpdGlvbi50eXBlKCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0YXJnZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBDb250cm9sVHlw
ZSogdGFyZ2V0ID0gdGFyZ2V0c1tpXTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpICE9IHRhcmdldC0+YnJhbmNoVGFy
Z2V0QXJpdHkoKSwgImJyX3RhYmxlIHRhcmdldCB0eXBlIHNpemUgbWlzbWF0Y2guIERlZmF1bHQg
aGFzIHNpemU6ICIsIGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSwgImJ1dCB0YXJn
ZXQ6ICIsIGksICIgaGFzIHNpemU6ICIsIHRhcmdldC0+YnJhbmNoVGFyZ2V0QXJpdHkoKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAwOyB0eXBlIDwgZGVmYXVsdFRhcmdldC5i
cmFuY2hUYXJnZXRBcml0eSgpOyArK3R5cGUpCisgICAgICAgICAgICAgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRighaXNTdWJ0eXBlKGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0VHlwZSh0eXBl
KSwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpKSwgImJyX3RhYmxlIHRhcmdldCB0eXBl
IG1pc21hdGNoIGF0IG9mZnNldCAiLCB0eXBlLCAiIGV4cGVjdGVkOiAiLCBkZWZhdWx0VGFyZ2V0
LmJyYW5jaFRhcmdldFR5cGUodHlwZSksICIgYnV0IHNhdzogIiwgdGFyZ2V0LT5icmFuY2hUYXJn
ZXRUeXBlKHR5cGUpLCAiIHdoZW4gdGFyZ2V0aW5nIGJsb2NrOiAiLCB0YXJnZXQtPnNpZ25hdHVy
ZSgpLT50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFMoY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCkpOworICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChhZGRTd2l0Y2goY29uZGl0aW9uLCB0YXJnZXRzLCBkZWZhdWx0
VGFyZ2V0LCBtX2V4cHJlc3Npb25TdGFjaykpOwogCiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9j
a3MgPSAxOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgUmV0dXJuOiB7
CisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoY2hlY2tCcmFuY2hUYXJnZXQobV9j
b250cm9sU3RhY2tbMF0uY29udHJvbERhdGEpKTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkUmV0dXJuKG1fY29udHJvbFN0YWNrWzBdLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Np
b25TdGFjaykpOwogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTU5NCwxMyArODAwLDE1IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIGNhc2UgRW5kOiB7
CiAgICAgICAgIENvbnRyb2xFbnRyeSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsK
LSAgICAgICAgaWYgKG1fY29udGV4dC5pc0NvbnRyb2xUeXBlSWYoZGF0YS5jb250cm9sRGF0YSkp
IHsKKyAgICAgICAgaWYgKENvbnRyb2xUeXBlOjppc0lmKGRhdGEuY29udHJvbERhdGEpKSB7Cisg
ICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGRhdGEuY29udHJvbERh
dGEpKTsKICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVsc2UoZGF0YS5j
b250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrID0gV1RGTW92ZShkYXRhLmVsc2VCbG9ja1N0YWNrKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCBpbiB0aGF0IGl0IHdpbGwgbW9kaWZ5
IHRoZSBleHByZXNzaW9uU3RhY2sgZm9yIHRoZSByZXN1bHQgb2YgdGhlIGJsb2NrLgogICAgICAg
ICAvLyBUaGF0J3MgYSBsaXR0bGUgdG9vIGVmZmVjdGZ1bCBmb3IgbWUgYnV0IEkgZG9uJ3QgaGF2
ZSBhIGJldHRlciBBUEkgcmlnaHQgbm93LgogICAgICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTMKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hF
TFBFUl9GQUlMUyh1bmlmeShkYXRhLmNvbnRyb2xEYXRhKSk7CiAgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGVuZEJsb2NrKGRhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLnN3YXAoZGF0YS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjayk7CiAg
ICAgICAgIHJldHVybiB7IH07CkBAIC02MzAsMTIgKzgzOCwxMyBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDEocmVzZXJ2ZWQpLCAiY2FuJ3QgcGFy
c2UgcmVzZXJ2ZWQgdmFyVWludDEgZm9yIGdyb3dfbWVtb3J5Iik7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYocmVzZXJ2ZWQgIT0gMCwgInJlc2VydmVkIHZhclVpbnQxIGZvciBncm93X21l
bW9yeSBtdXN0IGJlIHplcm8iKTsKIAotICAgICAgICBFeHByZXNzaW9uVHlwZSBkZWx0YTsKKyAg
ICAgICAgVHlwZWRFeHByZXNzaW9uIGRlbHRhOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVT
U0lPTl9TVEFDS19JTlRPKGRlbHRhLCAiZXhwZWN0IGFuIGkzMiBhcmd1bWVudCB0byBncm93X21l
bW9yeSBvbiB0aGUgc3RhY2siKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihkZWx0
YS50eXBlKCkgIT0gSTMyLCAiZ3Jvd19tZW1vcnkgd2l0aCBub24taTMyIGRlbHRhIGFyZ3VtZW50
IGhhcyB0eXBlOiAiLCBkZWx0YS50eXBlKCkpOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJl
c3VsdDsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkR3Jvd01lbW9yeShkZWx0
YSwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQp
OwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNjQ5LDcgKzg1OCw3IEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZEN1cnJlbnRNZW1vcnkocmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQpAQCAtNjY0LDcgKzg3Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CiBhdXRvIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQobV91bnJlYWNoYWJsZUJsb2Nrcyk7Ci0jZGVmaW5l
IENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgorI2Rl
ZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgT3BUeXBlOjpuYW1lOgogICAgIHN3aXRj
aCAobV9jdXJyZW50T3Bjb2RlKSB7CiAgICAgY2FzZSBFbHNlOiB7CiAgICAgICAgIGlmIChtX3Vu
cmVhY2hhYmxlQmxvY2tzID4gMSkKQEAgLTY4MCw5ICs4ODksMTAgQEAgYXV0byBGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPT0g
MSkgewogICAgICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRyb2xTdGFjay50YWtl
TGFzdCgpOwotICAgICAgICAgICAgaWYgKG1fY29udGV4dC5pc0NvbnRyb2xUeXBlSWYoZGF0YS5j
b250cm9sRGF0YSkpIHsKKyAgICAgICAgICAgIGlmIChDb250cm9sVHlwZTo6aXNJZihkYXRhLmNv
bnRyb2xEYXRhKSkgewogICAgICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFk
ZEVsc2VUb1VucmVhY2hhYmxlKGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBt
X2V4cHJlc3Npb25TdGFjayA9IFdURk1vdmUoZGF0YS5lbHNlQmxvY2tTdGFjayk7CisgICAgICAg
ICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShkYXRhLmNvbnRyb2xEYXRh
KSk7CiAgICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soZGF0
YSwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVuZFRvVW5yZWFjaGFibGUoZGF0YSkpOwpA
QCAtODE0LDQgKzEwMjQsOCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVu
cmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIAorI3VuZGVmIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8K
KyN1bmRlZiBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVAorI3VuZGVmIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYKKwogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmluZGV4IDlhNTNiMzM5ZDQ2
NDU0ZmY1OWY0Yjg2MGM4MjQyNzEwYWZkMTc4Y2EuLmFlM2E3ZjFmMTRmMTljYmMyZmFkMTUxNTcx
OTM4NGI3ZDY1OTFmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50R2VuZXJhdG9yLmNwcApAQCAtNDgsOCArNDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogY2xhc3MgTExJbnRHZW5lcmF0b3IgOiBwdWJsaWMgQnl0ZWNvZGVHZW5l
cmF0b3JCYXNlPEdlbmVyYXRvclRyYWl0cz4gewogcHVibGljOgogICAgIHVzaW5nIEV4cHJlc3Np
b25UeXBlID0gVmlydHVhbFJlZ2lzdGVyOwotICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVj
dG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKLSAgICB1c2luZyBTdGFjayA9IFZlY3RvcjxFeHByZXNz
aW9uVHlwZSwgMTYsIFVuc2FmZVZlY3Rvck92ZXJmbG93PjsKIAogICAgIHN0cnVjdCBDb250cm9s
TG9vcCAgewogICAgICAgICBSZWY8TGFiZWw+IG1fYm9keTsKQEAgLTczLDE0ICs3MSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb250cm9sVHlw
ZSBsb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8
TGFiZWw+JiYgYm9keSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKKyAgICAgICAgc3Rh
dGljIENvbnRyb2xUeXBlIHRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWdu
ZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sTG9v
cCB7IFdURk1vdmUoYm9keSkgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2ln
bmF0dXJlLCBzdGFja1NpemUsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbFRvcExldmVs
IHsgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgdG9wTGV2ZWwo
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZlB0cjxMYWJl
bD4mJiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBsb29wKEJsb2Nr
U2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgYm9k
eSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplLCBXVEZNb3ZlKGNvbnRpbnVh
dGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xU
eXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdU
Rk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3ZlKGJvZHkpIH0pOwogICAg
ICAgICB9CiAKICAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGJsb2NrKEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0
aW9uKQpAQCAtOTMsNiArOTEsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIENvbnRy
b2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCks
IFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0p
OwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sVHlw
ZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sSWY+KGNv
bnRyb2wpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbFR5
cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbFRvcExl
dmVsPihjb250cm9sKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhY2tTaXplOyB9CisgICAgICAgIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CisKICAgICAgICAgUmVmUHRyPExhYmVsPiB0
YXJnZXRMYWJlbEZvckJyYW5jaCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPigqdGhpcykpCkBAIC0xMDAsMTQgKzEw
NCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbV9jb250aW51YXRpb247CiAgICAg
ICAgIH0KIAotICAgICAgICB1bnNpZ25lZCB0YXJnZXRBcml0eSgpIGNvbnN0CisgICAgICAgIFNp
Z25hdHVyZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAg
ICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTaXpl
OyB9CisgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOworICAg
ICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOworICAgICAg
ICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOworICAgICAgICB9CiAKICAg
ICAgICAgQmxvY2tTaWduYXR1cmUgbV9zaWduYXR1cmU7CiAgICAgICAgIHVuc2lnbmVkIG1fc3Rh
Y2tTaXplOwpAQCAtMTI2LDE0ICsxMzYsMTUgQEAgcHVibGljOgogCiAgICAgdXNpbmcgRXJyb3JU
eXBlID0gU3RyaW5nOwogICAgIHVzaW5nIFBhcnRpYWxSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBF
cnJvclR5cGU+OwotICAgIHVzaW5nIFJlc3VsdExpc3QgPSBFeHByZXNzaW9uTGlzdDsKICAgICB1
c2luZyBVbmV4cGVjdGVkUmVzdWx0ID0gVW5leHBlY3RlZDxFcnJvclR5cGU+OwogCiAgICAgdXNp
bmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+OjpDb250cm9s
RW50cnk7CisgICAgdXNpbmcgQ29udHJvbFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5l
cmF0b3I+OjpDb250cm9sU3RhY2s7CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9IEZ1bmN0aW9uUGFy
c2VyPExMSW50R2VuZXJhdG9yPjo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBTdGFjayA9IEZ1bmN0
aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPjo6U3RhY2s7CisgICAgdXNpbmcgVHlwZWRFeHByZXNz
aW9uID0gRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+OjpUeXBlZEV4cHJlc3Npb247CiAK
LSAgICBMTEludEdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGZpbmFsaXplKCk7CisgICAgc3Rh
dGljIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIHsgfTsgfTsKIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5FVkVSX0lOTElORSBVbmV4cGVj
dGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKQEAg
LTE0Miw2ICsxNTMsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVW5leHBlY3RlZFJlc3Vs
dChtYWtlU3RyaW5nKCJXZWJBc3NlbWJseS5Nb2R1bGUgZmFpbGVkIGNvbXBpbGluZzogIl9zLCBt
YWtlU3RyaW5nKGFyZ3MpLi4uKSk7CiAgICAgfQogCisgICAgTExJbnRHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4gZmluYWxpemUo
KTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0QSwgdHlwZW5hbWUgRXhw
cmVzc2lvbkxpc3RCPgogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgRXhwcmVz
c2lvbkxpc3RBJiBkZXN0aW5hdGlvbnMsIGNvbnN0IEV4cHJlc3Npb25MaXN0QiYgdmFsdWVzKQog
ICAgIHsKQEAgLTE2NiwxMCArMTgxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRQb3BWYWx1
ZUZyb21TdGFjaygpIHsgLS1tX3N0YWNrU2l6ZTsgfQogCi0gICAgc3RhdGljIEV4cHJlc3Npb25U
eXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IH07IH07Ci0g
ICAgU3RhY2sgY3JlYXRlU3RhY2soKSB7IHJldHVybiBTdGFjaygpOyB9Ci0gICAgYm9vbCBpc0Nv
bnRyb2xUeXBlSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQotCiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90
KTsKICAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCBpbnQ2NF90KTsKQEAgLTIy
MiwxNSArMjMzLDE1IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKTsKIAogICAgIC8v
IENhbGxzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50
MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uTGlz
dCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVh
Y2hhYmxlKCk7CiAKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmdMb2NhbHMoKTsKIAogICAgIHZv
aWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiogcGFyc2VyKSB7IG1f
cGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9s
RW50cnk+JiwgY29uc3QgU3RhY2sqKSB7IH0KKyAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0
YWNrJiwgY29uc3QgU3RhY2sqKSB7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgR2VuZXJpY0xh
YmVsPFdhc206OkdlbmVyYXRvclRyYWl0cz47CkBAIC0yMzgsOCArMjQ5LDggQEAgcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgTExJbnRDYWxsSW5mb3JtYXRpb24gewogICAgICAgICB1bnNpZ25lZCBzdGFj
a09mZnNldDsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0FyZ3VtZW50czsKLSAgICAg
ICAgRXhwcmVzc2lvbkxpc3QgYXJndW1lbnRzOwotICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKEV4cHJlc3Npb25MaXN0Jik+IGNvbW1pdFJlc3VsdHM7CisgICAgICAgIFJlc3VsdExpc3Qg
YXJndW1lbnRzOworICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc3VsdExpc3QmKT4g
Y29tbWl0UmVzdWx0czsKICAgICB9OwogCiAgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbElu
Zm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYpOwpAQCAtMjgxLDggKzI5Miw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBnZXREcm9wS2VlcENvdW50KGNvbnN0IENvbnRyb2xUeXBlJiB0
YXJnZXQsIHVuc2lnbmVkJiBzdGFydE9mZnNldCwgdW5zaWduZWQmIGRyb3AsIHVuc2lnbmVkJiBr
ZWVwKQogICAgIHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSB0YXJnZXQuc3RhY2tTaXplKCkgKyAx
OwotICAgICAgICBrZWVwID0gdGFyZ2V0LnRhcmdldEFyaXR5KCk7Ci0gICAgICAgIGRyb3AgPSBt
X3N0YWNrU2l6ZSAtIHRhcmdldC5zdGFja1NpemUoKSAtIHRhcmdldC50YXJnZXRBcml0eSgpOwor
ICAgICAgICBrZWVwID0gdGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCk7CisgICAgICAgIGRyb3Ag
PSBtX3N0YWNrU2l6ZSAtIHRhcmdldC5zdGFja1NpemUoKSAtIHRhcmdldC5icmFuY2hUYXJnZXRB
cml0eSgpOwogICAgIH0KIAogICAgIHZvaWQgZHJvcEtlZXAoU3RhY2smIHZhbHVlcywgY29uc3Qg
Q29udHJvbFR5cGUmIHRhcmdldCwgYm9vbCBkcm9wVmFsdWVzKQpAQCAtMzUxLDMyICszNjIsMzEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZXhwcmVzc2lvblN0YWNrLCBbJl0o
VmlydHVhbFJlZ2lzdGVyJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewotICAg
ICAgICAgICAgQVNTRVJUKGV4cHJlc3Npb24gPT0gc2xvdCB8fCBleHByZXNzaW9uLmlzQ29uc3Rh
bnQoKSB8fCBleHByZXNzaW9uLmlzQXJndW1lbnQoKSB8fCBleHByZXNzaW9uLnRvTG9jYWwoKSA8
IG1fY29kZUJsb2NrLT5tX251bVZhcnMpOwotICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0g
c2xvdCkKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhleHByZXNzaW9uU3RhY2ssIFsmXShU
eXBlZEV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAg
ICAgICAgICBBU1NFUlQoZXhwcmVzc2lvbi52YWx1ZSgpID09IHNsb3QgfHwgZXhwcmVzc2lvbi52
YWx1ZSgpLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9uLnZhbHVlKCkuaXNBcmd1bWVudCgpIHx8
IGV4cHJlc3Npb24udmFsdWUoKS50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsK
KyAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xvdCkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJl
c3Npb24pOwotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHNsb3Q7CisgICAgICAgICAgICBleHBy
ZXNzaW9uID0gVHlwZWRFeHByZXNzaW9uIHsgZXhwcmVzc2lvbi50eXBlKCksIHNsb3QgfTsKICAg
ICAgICAgfSk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAKLSAgICBTdGFj
ayBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIHN0YWNrKQorICAg
IHZvaWQgc3BsaXRTdGFjayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgU3RhY2smIG5ld1N0YWNrKQogICAgIHsKLSAgICAgICAgU3RhY2sgcmVzdWx0ID0g
SlNDOjpXYXNtOjpzcGxpdFN0YWNrKHNpZ25hdHVyZSwgc3RhY2spOworICAgICAgICBKU0M6Oldh
c206OnNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogCi0g
ICAgICAgIG1fc3RhY2tTaXplIC09IHJlc3VsdC5zaXplKCk7CisgICAgICAgIG1fc3RhY2tTaXpl
IC09IG5ld1N0YWNrLnNpemUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAg
ICB3YWxrRXhwcmVzc2lvblN0YWNrKHN0YWNrLCBbJl0oVmlydHVhbFJlZ2lzdGVyJiBleHByZXNz
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgewotICAgICAgICAgICAgQVNTRVJUKGV4cHJlc3Np
b24gPT0gc2xvdCB8fCBleHByZXNzaW9uLmlzQ29uc3RhbnQoKSB8fCBleHByZXNzaW9uLmlzQXJn
dW1lbnQoKSB8fCBleHByZXNzaW9uLnRvTG9jYWwoKSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnMp
OwotICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gPT0gc2xvdCB8fCBleHByZXNzaW9uLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhlbmNsb3NpbmdTdGFjaywgWyZd
KFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xvdCB8fCBleHByZXNzaW9u
LnZhbHVlKCkuaXNDb25zdGFudCgpIHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0FyZ3VtZW50KCkg
fHwgZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSA8IG1fY29kZUJsb2NrLT5tX251bVZhcnMp
OworICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24udmFsdWUoKSA9PSBzbG90IHx8IGV4cHJlc3Np
b24udmFsdWUoKS5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBleHByZXNzaW9uKTsKLSAgICAgICAgICAg
IGV4cHJlc3Npb24gPSBzbG90OworICAgICAgICAgICAgZXhwcmVzc2lvbiA9IFR5cGVkRXhwcmVz
c2lvbiB7IGV4cHJlc3Npb24udHlwZSgpLCBzbG90IH07CiAgICAgICAgIH0pOwogICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIG1fc3RhY2tTaXplICs9IHJlc3VsdC5zaXplKCk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIG1fc3RhY2tTaXplICs9IG5ld1N0YWNr
LnNpemUoKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgU3dpdGNoRW50cnkgewpAQCAtMzk3LDIzICs0
MDcsMjMgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPExhYmVsKiwgVmVjdG9yPFN3aXRjaEVudHJ5
Pj4gbV9zd2l0Y2hlczsKICAgICBFeHByZXNzaW9uVHlwZSBtX2pzTnVsbENvbnN0YW50OwogICAg
IEV4cHJlc3Npb25UeXBlIG1femVyb0NvbnN0YW50OwotICAgIEV4cHJlc3Npb25MaXN0IG1fdW5p
dGlhbGl6ZWRMb2NhbHM7CisgICAgUmVzdWx0TGlzdCBtX3VuaXRpYWxpemVkTG9jYWxzOwogICAg
IEhhc2hNYXA8RW5jb2RlZEpTVmFsdWUsIFZpcnR1YWxSZWdpc3RlciwgV1RGOjpJbnRIYXNoPEVu
Y29kZWRKU1ZhbHVlPiwgQ29uc3RhbnRNYXBIYXNoVHJhaXRzPiBtX2NvbnN0YW50TWFwOwogICAg
IFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IG1fcmVzdWx0czsKICAgICB1bnNpZ25lZCBtX3N0
YWNrU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX21heFN0YWNrU2l6ZSB7IDAgfTsKIH07CiAK
LUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90
IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2Vw
dGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4
X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogewotICAgIExMSW50R2VuZXJhdG9yIGxsaW50R2VuZXJhdG9yKGluZm8sIGZ1
bmN0aW9uSW5kZXgsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsKKyAgICBMTEludEdl
bmVyYXRvciBsbGludEdlbmVyYXRvcihpbmZvLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUpOwog
ICAgIEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPiBwYXJzZXIobGxpbnRHZW5lcmF0b3Is
IGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCiAgICAgcmV0dXJuIGxs
aW50R2VuZXJhdG9yLmZpbmFsaXplKCk7CiB9CiAKLUxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJl
JikKK0xMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJikKICAgICA6
IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPEZ1bmN0aW9uQ29kZUJsb2NrPihmdW5j
dGlvbkluZGV4KSwgMCkKICAgICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4
KGZ1bmN0aW9uSW5kZXgpCkBAIC00MjIsOSArNDMyLDYgQEAgTExJbnRHZW5lcmF0b3I6OkxMSW50
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlv
bkkKICAgICBtX3N0YWNrU2l6ZSA9IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzOwog
ICAgIG1fbWF4U3RhY2tTaXplID0gbnVtYmVyT2ZMTEludENhbGxlZVNhdmVSZWdpc3RlcnM7CiAK
LSAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQotICAgICAgICBUaHVua3M6OnNpbmdsZXRvbigp
LnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOwotCiAgICAgV2FzbUVu
dGVyOjplbWl0KHRoaXMpOwogfQogCkBAIC01MTcsOCArNTI0LDggQEAgYXV0byBMTEludEdlbmVy
YXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KSAtPiBMTEkKICAgICAgICAgbV9tYXhTdGFja1NpemUgPSBtX3N0YWNrU2l6ZTsKIAogCi0gICAg
RXhwcmVzc2lvbkxpc3QgYXJndW1lbnRzKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwotICAg
IEV4cHJlc3Npb25MaXN0IHRlbXBvcmFyeVJlc3VsdHMoc2lnbmF0dXJlLnJldHVybkNvdW50KCkp
OworICAgIFJlc3VsdExpc3QgYXJndW1lbnRzKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwor
ICAgIFJlc3VsdExpc3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWduYXR1cmUucmV0dXJuQ291bnQoKSk7
CiAKICAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IG1fc3RhY2tTaXplOwogICAgIGNv
bnN0IHVuc2lnbmVkIGJhc2UgPSBzdGFja09mZnNldCAtIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzOwpAQCAtNTgyLDcgKzU4OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJ
bmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAK
ICAgICBtX3N0YWNrU2l6ZSA9IGluaXRpYWxTdGFja1NpemU7CiAKLSAgICBhdXRvIGNvbW1pdFJl
c3VsdHMgPSBbdGhpcywgdGVtcG9yYXJ5UmVzdWx0cyA9IFdURk1vdmUodGVtcG9yYXJ5UmVzdWx0
cyldKEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSB7CisgICAgYXV0byBjb21taXRSZXN1bHRzID0g
W3RoaXMsIHRlbXBvcmFyeVJlc3VsdHMgPSBXVEZNb3ZlKHRlbXBvcmFyeVJlc3VsdHMpXShSZXN1
bHRMaXN0JiByZXN1bHRzKSB7CiAgICAgICAgIGZvciAoYXV0byB0ZW1wb3JhcnlSZXN1bHQgOiB0
ZW1wb3JhcnlSZXN1bHRzKSB7CiAgICAgICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQgPSBw
dXNoKCk7CiAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHJlc3VsdCwgdGVtcG9yYXJ5
UmVzdWx0KTsKQEAgLTY4OCwxNiArNjk1LDE1IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIG1fY29kZUJsb2NrLT5tX251bVZhcnMgKz0gY291bnQ7Ci0g
ICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgYXV0byBsb2NhbCA9IHB1c2goKTsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZTo6QW55cmVmOgotICAgICAgICBj
YXNlIFR5cGU6OkZ1bmNyZWY6Ci0gICAgICAgICAgICBtX3VuaXRpYWxpemVkTG9jYWxzLmFwcGVu
ZChsb2NhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBl
OjpBbnlyZWY6CisgICAgY2FzZSBUeXBlOjpGdW5jcmVmOgorICAgICAgICB3aGlsZSAoY291bnQt
LSkKKyAgICAgICAgICAgIG1fdW5pdGlhbGl6ZWRMb2NhbHMuYXBwZW5kKHB1c2goKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fc3RhY2tTaXplICs9IGNvdW50Owor
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTc0OSwxMSArNzU1
LDExIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiAgICAgVmlydHVhbFJlZ2lzdGVyIHRhcmdl
dCA9IHZpcnR1YWxSZWdpc3RlckZvcldhc21Mb2NhbChpbmRleCk7CiAKICAgICAvLyBJZiB0aGlz
IGxvY2FsIGlzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2sgd2UgbmVlZCB0byBtYXRlcmlhbGl6ZSBp
dCwgb3RoZXJ3aXNlIGl0J2xsIHNlZSB0aGUgbmV3IHZhbHVlIGluc3RlYWQgb2YgdGhlIG9sZCBv
bmUKLSAgICB3YWxrRXhwcmVzc2lvblN0YWNrKG1fcGFyc2VyLT5leHByZXNzaW9uU3RhY2soKSwg
WyZdKFZpcnR1YWxSZWdpc3RlciYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsK
LSAgICAgICAgaWYgKGV4cHJlc3Npb24gIT0gdGFyZ2V0KQorICAgIHdhbGtFeHByZXNzaW9uU3Rh
Y2sobV9wYXJzZXItPmV4cHJlc3Npb25TdGFjaygpLCBbJl0oVHlwZWRFeHByZXNzaW9uJiBleHBy
ZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAgICAgICBpZiAoZXhwcmVzc2lvbi52
YWx1ZSgpICE9IHRhcmdldCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgV2FzbU1vdjo6
ZW1pdCh0aGlzLCBzbG90LCBleHByZXNzaW9uKTsKLSAgICAgICAgZXhwcmVzc2lvbiA9IHNsb3Q7
CisgICAgICAgIGV4cHJlc3Npb24gPSBUeXBlZEV4cHJlc3Npb24geyBleHByZXNzaW9uLnR5cGUo
KSwgc2xvdCB9OwogICAgIH0pOwogCiAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCB0YXJnZXQsIHZh
bHVlKTsKQEAgLTc4MCw3ICs3ODYsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpzZXRHbG9iYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUgogCiBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2sm
IGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgYmxvY2ssIFN0YWNrJiBuZXdTdGFjaywgdWlu
dDMyX3QgbG9vcEluZGV4KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgbmV3U3RhY2sgPSBzcGxp
dFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2lnbmF0
dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIG1hdGVyaWFsaXplQ29uc3RhbnRz
QW5kTG9jYWxzKG5ld1N0YWNrKTsKIAogICAgIFJlZjxMYWJlbD4gYm9keSA9IG5ld0VtaXR0ZWRM
YWJlbCgpOwpAQCAtNzk5LDcgKzgwNSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3Ao
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiAgICAg
ICAgIG9zckVudHJ5RGF0YS5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOwogICAg
IGZvciAodW5zaWduZWQgY29udHJvbEluZGV4ID0gMDsgY29udHJvbEluZGV4IDwgbV9wYXJzZXIt
PmNvbnRyb2xTdGFjaygpLnNpemUoKTsgKytjb250cm9sSW5kZXgpIHsKICAgICAgICAgU3RhY2sm
IGV4cHJlc3Npb25TdGFjayA9IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKVtjb250cm9sSW5kZXhd
LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwotICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24g
OiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGZvciAoVHlwZWRFeHByZXNzaW9uIGV4cHJlc3Np
b24gOiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgICAgICBvc3JFbnRyeURhdGEuYXBwZW5kKGV4
cHJlc3Npb24pOwogICAgIH0KIApAQCAtODE3LDcgKzgyMyw3IEBAIGF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkgLT4gQ29udHJvbFR5cGUK
IAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBuZXdCbG9jaywgU3RhY2smIG5l
d1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNp
Z25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNs
b3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIG5ld0Jsb2NrID0gQ29udHJvbFR5cGU6OmJsb2Nr
KHNpZ25hdHVyZSwgbV9zdGFja1NpemUsIG5ld0xhYmVsKCkpOwogICAgIHJldHVybiB7IH07CiB9
CkBAIC04MjcsNyArODMzLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFMKICAgICBSZWY8TGFi
ZWw+IGFsdGVybmF0ZSA9IG5ld0xhYmVsKCk7CiAgICAgUmVmPExhYmVsPiBjb250aW51YXRpb24g
PSBuZXdMYWJlbCgpOwogCi0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5j
bG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywg
bmV3U3RhY2spOwogCiAgICAgV2FzbUpmYWxzZTo6ZW1pdCh0aGlzLCBjb25kaXRpb24sIGFsdGVy
bmF0ZS0+YmluZCh0aGlzKSk7CiAKQEAgLTk0Nyw4ICs5NTMsMTEgQEAgYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFj
ayYgZXhwcmUKICAgICAgICAgLy8gc2luY2UgdGhleSBtaWdodCBub3QgaGF2ZSB0aGUgcmlnaHQg
bnVtYmVyIG9mIHZhbHVlcyBpbiB0aGUgZXhwcmVzc2lvbiBzdGFjay4KICAgICAgICAgLy8gSW5z
dGVhZCwgd2UgZG8gYSBzdHJpY3RlciBjb25zaXN0ZW5jeSBjaGVjayBiZWxvdy4KICAgICAgICAg
YXV0byB0bXAgPSBwdXNoKE5vQ29uc2lzdGVuY3lDaGVjayk7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQoZXhwcmVzc2lvblN0YWNrLCB1bnJlYWNoYWJsZSB8fCB0bXAgPT0gZXhwcmVzc2lvblN0YWNr
W2ldKTsKLSAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHRtcCk7
CisgICAgICAgIEFTU0VSVCh1bnJlYWNoYWJsZSB8fCB0bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ld
LnZhbHVlKCkpOworICAgICAgICBpZiAodW5yZWFjaGFibGUpCisgICAgICAgICAgICBlbnRyeS5l
bmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5tX3NpZ25hdHVy
ZS0+cmV0dXJuVHlwZShpKSwgdG1wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnku
ZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7CiAgICAg
fQogCiAgICAgaWYgKG1fbGFzdE9wY29kZUlEID09IHdhc21fam1wICYmIGRhdGEubV9jb250aW51
YXRpb24tPnVucmVzb2x2ZWRKdW1wcygpLnNpemUoKSA9PSAxICYmIGRhdGEubV9jb250aW51YXRp
b24tPnVucmVzb2x2ZWRKdW1wcygpWzBdID09IHN0YXRpY19jYXN0PGludD4obV9sYXN0SW5zdHJ1
Y3Rpb24ub2Zmc2V0KCkpKSB7CkBAIC05NzYsNyArOTg1LDcgQEAgYXV0byBMTEludEdlbmVyYXRv
cjo6ZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBjb25zdCBTdGFjayYgZXhw
cmVzc2kKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFT
U0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBMTElu
dENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVy
ZSk7CkBAIC05OTAsNyArOTk5LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICByZXR1
cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWdu
ZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBFeHByZXNz
aW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxhc3QoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaAppbmRleCBlZDUwNzhiZWM5YWIz
NDM3NDg5NzJmNDc4MWVmOTkwNDE3Mzc5Y2ZmLi44OWNkYzcxMGYxOGEyOTUyMDRiNDdiMDE3MjI0
MDBlOTU1NGY0NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TExJbnRHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuaApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29k
ZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRocm93V2FzbUV4Y2VwdGlvbiA9
IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCmluZGV4IGJjZWViMjg2YmEzY2IzMTk3
ZWJmYjgwYjRlNWVmNTE2ZmFiNGQ1OWEuLjgyYWE3NTc1NGY3ZjFlZWRhZjM0ZWNjMjc2ZWNhYThh
ZGYxYTgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dFBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4u
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlRHVtcGVyLmgiCiAjaW5jbHVkZSAiQ2FsbGVlQml0cy5oIgorI2luY2x1ZGUg
IkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgpAQCAtNDQsNiArNDUsMjEgQEAgbmFtZXNw
YWNlIFdhc21MTEludFBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiB9CiAKK0xMSW50UGxhbjo6TExJbnRQbGFuKENvbnRleHQqIGNvbnRleHQsIFZlY3Rv
cjx1aW50OF90PiYmIHNvdXJjZSwgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKKyAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCB3b3JrLCBXVEZNb3ZlKHRh
c2spKQoreworICAgIGlmIChwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwg
bV9zb3VyY2Uuc2l6ZSgpKSkKKyAgICAgICAgcHJlcGFyZSgpOworfQorCitMTEludFBsYW46OkxM
SW50UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIGNv
bnN0IFJlZjxMTEludENhbGxlZT4qIGNhbGxlZXMsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKKyAg
ICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgQXN5bmNXb3JrOjpGdWxsQ29tcGlsZSwg
V1RGTW92ZSh0YXNrKSkKKyAgICAsIG1fY2FsbGVlcyhjYWxsZWVzKQoreworICAgIHByZXBhcmUo
KTsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5z
aXplKCk7Cit9CisKIGJvb2wgTExJbnRQbGFuOjpwcmVwYXJlSW1wbCgpCiB7CiAgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwpAQCAtNjIs
MTAgKzc4LDkgQEAgdm9pZCBMTEludFBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eFNwYWNlID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0aW9uSW5kZXg7CiAg
ICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
PnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
ID09IHNpZ25hdHVyZUluZGV4KTsKLSAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlv
biwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVCeXRl
Y29kZShmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVy
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgZnVuY3Rpb25JbmRleCwgbV90aHJvd1dhc21F
eGNlcHRpb24pOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9j
az4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQnl0ZWNv
ZGUoZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKQEAgLTc4LDQxICs5MywxNSBAQCB2b2lkIExMSW50UGxhbjo6Y29t
cGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgfQogCiAgICAgbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBp
bGVSZXN1bHQpOwotCi0gICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMo
ZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9u
cygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgIEVtYmVkZXJUb1dhc21GdW5j
dGlvbiBlbnRyeTsKLSAgICAgICAgZW50cnkuaml0ID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+
KCk7Ci0gICAgICAgIGVudHJ5LmZ1bmN0aW9uID0gbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoKmVu
dHJ5LmppdCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KTsK
LSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRl
eCwgV1RGTW92ZShlbnRyeSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOwotICAgIH0KIH0KIAogdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29t
cGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKIHsKLSAgICBmb3IgKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7Ci0gICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5j
dGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7Ci0KLSAgICAgICAgaWYgKGF1dG8gaXQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbnMuZmluZChmdW5jdGlvbkluZGV4KTsgaXQgIT0gbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKml0
LT52YWx1ZS5qaXQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgICAg
ICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewotICAgICAg
ICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJs
ZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJl
cihmdW5jdGlvbkluZGV4KSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaXQtPnZhbHVlLmZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAotICAgICAgICAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkVtYmVkZGVyLT5XZWJB
c3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKLSAgICAgICAgICAgICAgICBudWxscHRyKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHVuc2lnbmVkIGZ1bmN0aW9uQ291bnQgPSBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9ucy5zaXplKCk7Ci0gICAgaWYgKGZ1bmN0aW9uQ291bnQpIHsKKyAgICBpZiAoIW1f
Y2FsbGVlcyAmJiBmdW5jdGlvbkNvdW50KSB7CiAgICAgICAgIC8vIExMSW50IGVudHJ5cG9pbnQg
dGh1bmtzIGdlbmVyYXRpb24KICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKLSAgICAgICAgbV9j
YWxsZWVzLnJlc2l6ZShmdW5jdGlvbkNvdW50KTsKKyAgICAgICAgbV9jYWxsZWVzVmVjdG9yLnJl
c2l6ZShmdW5jdGlvbkNvdW50KTsKICAgICAgICAgVmVjdG9yPENDYWxsSGVscGVyczo6TGFiZWw+
IGVudHJ5cG9pbnRzKGZ1bmN0aW9uQ291bnQpOwogICAgICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJz
OjpKdW1wPiBqdW1wcyhmdW5jdGlvbkNvdW50KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewpAQCAtMTIxLDcgKzExMCw3IEBAIHZvaWQgTExJ
bnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIpCiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZFdhc21C
eXRlY29kZXMoKSkpCiAgICAgICAgICAgICAgICAgQnl0ZWNvZGVEdW1wZXI6OmR1bXBCbG9jayht
X3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpXS5nZXQoKSwgbV9tb2R1bGVJbmZvcm1hdGlvbiwgV1RG
OjpkYXRhRmlsZSgpKTsKIAotICAgICAgICAgICAgbV9jYWxsZWVzW2ldID0gV2FzbTo6TExJbnRD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ldKSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSkpOworICAgICAgICAgICAgbV9jYWxsZWVzVmVjdG9yW2ldID0gTExJbnRD
YWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ldKSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSkpOwogICAgICAgICAgICAgZW50cnlwb2ludHNbaV0gPSBqaXQubGFiZWwo
KTsKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNh
bGxlZVNsb3QoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihD
UFVSZWdpc3RlcikpOwpAQCAtMTMwLDcgKzExOSw3IEBAIHZvaWQgTExJbnRQbGFuOjpkaWRDb21w
bGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAjZWxzZQogI2Vy
cm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZS4KICNlbmRpZgotICAgICAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihDYWxsZWVCaXRzOjpib3hXYXNtKG1f
Y2FsbGVlc1tpXS5wdHIoKSkpLCBjYWxsZWVTbG90KTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoQ2FsbGVlQml0czo6Ym94V2FzbShtX2NhbGxl
ZXNWZWN0b3JbaV0ucHRyKCkpKSwgY2FsbGVlU2xvdCk7CiAgICAgICAgICAgICBqdW1wc1tpXSA9
IGppdC5qdW1wKCk7CiAgICAgICAgIH0KIApAQCAtMTQxLDE4ICsxMzAsNTEgQEAgdm9pZCBMTElu
dFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
cikKICAgICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlv
bkNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIG1fY2FsbGVlc1tpXS0+c2V0RW50cnlwb2ludChs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50c1tpXSkpOwor
ICAgICAgICAgICAgbV9jYWxsZWVzVmVjdG9yW2ldLT5zZXRFbnRyeXBvaW50KGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnRzW2ldKSk7CiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbms8SklUVGh1bmtQdHJUYWc+KGp1bXBzW2ldLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRUaHVua1B0clRhZz4oTExJbnQ6Ondhc21GdW5jdGlvbkVudHJ5VGh1bmsoKS5jb2Rl
KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZW50cnlUaHVua3MgPSBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXYXNtIExMSW50IGVudHJ5IHRodW5r
cyIpOworICAgICAgICBtX2NhbGxlZXMgPSBtX2NhbGxlZXNWZWN0b3IuZGF0YSgpOworICAgIH0K
KworICAgIGlmIChtX2FzeW5jV29yayA9PSBBc3luY1dvcms6OlZhbGlkYXRpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9u
SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyBmdW5jdGlvbklu
ZGV4KyspIHsKKyAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMo
ZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9u
cygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CisgICAgICAgICAgICBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKKyAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gZnVuY3Rpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIo
aml0LCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhd
LCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOworCisg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKKyAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwgbWFr
ZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IGluIGZ1bmN0aW9uIGVudHJ5cG9pbnQg
YXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAg
ICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywg
IkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgs
IHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICBu
dWxscHRyKTsKKworICAgICAgICAgICAgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY2Fs
bGVlID0gRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+
ZW50cnlwb2ludCkpOworICAgICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHJlcGF0Y2hQ
b2ludGVyIC0ganVzdCBwYXNzIGluIHRoZSBjYWxsZWUgZGlyZWN0bHkKKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAg
ICAgIGlmIChmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uKQorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworCisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fZW1iZWRkZXJDYWxsZWVzLmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGNh
bGxlZSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlu
a2VkKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBleGVjdXRhYmxlQWRkcmVzczsKICAgICAgICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9u
LT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2
ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4g
VGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogaW1wb3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0
ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUg
cmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4KKyAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCiAgICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmNvZGUoKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGVBZGRyZXNzID0gbV9jYWxsZWVzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlIC0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpXS0+ZW50cnlwb2ludCgp
OwpAQCAtMTYxLDIxICsxODMsMjUgQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICB9CiB9CiAKLXZvaWQgTExJ
bnRQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYWxsZWVJbml0aWFsaXplciYgY2FsbGJh
Y2spCit2b2lkIExMSW50UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0g
ICAgQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9u
SW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
cy5zaXplKCk7ICsraW50ZXJuYWxGdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIFJlZlB0cjxXYXNt
OjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8gaXQg
PSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZmluZChpbnRlcm5hbEZ1bmN0aW9u
SW5kZXgpOyBpdCAhPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZW5kKCkpIHsK
LSAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50
cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoaXQtPnZhbHVlLmZ1bmN0aW9uLT5lbnRyeXBv
aW50KSk7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb24pCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGl0
LT52YWx1ZS5mdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSksIFdURk1vdmUobV9jYWxsZWVzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDoKKyAgICAgICAg
Y29tcGlsZUZ1bmN0aW9ucyhlZmZvcnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXRl
OjpDb21waWxlZDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogfQogCitib29sIExMSW50UGxhbjo6ZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNp
Z25lZCwgY29uc3QgRnVuY3Rpb25EYXRhJikKK3sKKyAgICAvLyBWYWxpZGF0aW9uIGlzIGRvbmUg
aW5saW5lIGJ5IHRoZSBwYXJzZXIKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uaAppbmRleCA2YzkxZDI3YmYyMzljYzM2
Zjc4YzU3NGZkZDFkZmQzM2QwZjlhODdmLi40MmRlODEzM2I3MmZjNWZlNTE5OWMxOWY2ZTMyM2U5
ZTM3YjFjOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5o
CkBAIC0zNywxNCArMzcsMTYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvOwogbmFtZXNwYWNlIFdhc20g
ewogCiBjbGFzcyBMTEludENhbGxlZTsKK2NsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsK
KwordXNpbmcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlTWFwID0gSGFzaE1hcDx1aW50MzJfdCwg
UmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVp
bnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJf
dD4+OwogCiBjbGFzcyBMTEludFBsYW4gZmluYWwgOiBwdWJsaWMgRW50cnlQbGFuIHsKLXB1Ymxp
YzoKICAgICB1c2luZyBCYXNlID0gRW50cnlQbGFuOwogCi0gICAgdXNpbmcgQmFzZTo6QmFzZTsK
LQotICAgIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5pdGlhbGl6ZXImKSBv
dmVycmlkZTsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBMTEludFBsYW4oQ29udGV4
dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYpOworICAg
IExMSW50UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgY29uc3QgUmVmPExM
SW50Q2FsbGVlPiosIENvbXBsZXRpb25UYXNrJiYpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+JiYgdGFrZUVudHJ5VGh1bmtzKCkKICAgICB7CkBAIC01
MiwyMCArNTQsMzcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5VGh1
bmtzKTsKICAgICB9CiAKKyAgICBWZWN0b3I8UmVmPExMSW50Q2FsbGVlPj4mJiB0YWtlQ2FsbGVl
cygpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmso
KSk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fY2FsbGVlc1ZlY3Rvcik7CisgICAgfQorCisg
ICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlTWFwJiYgdGFrZUVtYmVkZGVyQ2FsbGVlcygpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Cisg
ICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW1iZWRkZXJDYWxsZWVzKTsKKyAgICB9CisKKyAgICBi
b29sIGhhc1dvcmsoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3Rh
dGUgPCBTdGF0ZTo6Q29tcGlsZWQ7CisgICAgfQorCisgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9u
RWZmb3J0KSBvdmVycmlkZTsKKworICAgIGJvb2wgZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNp
Z25lZCwgY29uc3QgRnVuY3Rpb25EYXRhJikgb3ZlcnJpZGU7CisKIHByb3RlY3RlZDoKICAgICBi
b29sIHByZXBhcmVJbXBsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb21waWxlRnVuY3Rpb24odWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDb21wbGV0ZUNvbXBp
bGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAg
c3RydWN0IEVtYmVkZXJUb1dhc21GdW5jdGlvbiB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
Q2FsbEhlbHBlcnM+IGppdDsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGZ1bmN0aW9uOwotICAgIH07Ci0KICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7Ci0gICAgVmVjdG9yPFJlZjxM
TEludENhbGxlZT4+IG1fY2FsbGVlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBFbWJlZGVyVG9X
YXNtRnVuY3Rpb24sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9uczsKKyAgICBjb25zdCBSZWY8TExJbnRDYWxsZWU+KiBtX2NhbGxlZXMg
eyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlZjxMTEludENhbGxlZT4+IG1fY2FsbGVlc1ZlY3Rv
cjsKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVNYXAgbV9lbWJlZGRlckNhbGxlZXM7CiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IG1fZW50cnlUaHVu
a3M7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4
IDQ0YTI3NDMxOGIxZmZjNjZiN2E2MWMyOTQ3Nzk4NjBjNDZiMDU4MjYuLjNjODQzMmVjZGE2NmU2
ZjcyMjdiYmZiYzA3YjZjMjY5Y2VkZjZiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuY3BwCkBAIC0yOCwxNCArMjgsMjIgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIAorI2luY2x1ZGUgIldhc21CQlFQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50UGxh
bi5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21X
b3JrbGlzdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1Nb2R1bGU6
Ok1vZHVsZShSZWY8TW9kdWxlSW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCi0gICAg
OiBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pKQorTW9kdWxl
OjpNb2R1bGUoTExJbnRQbGFuJiBwbGFuKQorICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihwbGFu
LnRha2VNb2R1bGVJbmZvcm1hdGlvbigpKQorICAgICwgbV9sbGludENhbGxlZXMocGxhbi50YWtl
Q2FsbGVlcygpKQorICAgICwgbV9sbGludEVudHJ5VGh1bmtzKHBsYW4udGFrZUVudHJ5VGh1bmtz
KCkpCit7Cit9CisKK01vZHVsZTo6TW9kdWxlKEJCUVBsYW4mIHBsYW4pCisgICAgOiBtX21vZHVs
ZUluZm9ybWF0aW9uKHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCkpCiB7CiB9CiAKQEAgLTQ2
LDM2ICs1NCw1MCBAQCBXYXNtOjpTaWduYXR1cmVJbmRleCBNb2R1bGU6OnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdAogICAgIHJldHVybiBtX21vZHVs
ZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleFNwYWNlKTsKIH0KIAotc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtl
VmFsaWRhdGlvblJlc3VsdChFbnRyeVBsYW4mIHBsYW4pCit0ZW1wbGF0ZTx0eXBlbmFtZSBQbGFu
Pgorc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtlVmFsaWRhdGlvblJlc3VsdChQ
bGFuJiBwbGFuKQogewogICAgIEFTU0VSVCghcGxhbi5oYXNXb3JrKCkpOwogICAgIGlmIChwbGFu
LmZhaWxlZCgpKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxTdHJpbmc+KHBsYW4uZXJyb3JN
ZXNzYWdlKCkpOwotICAgIHJldHVybiBNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQoTW9kdWxlOjpj
cmVhdGUocGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSkpOworICAgIHJldHVybiBNb2R1bGU6
OlZhbGlkYXRpb25SZXN1bHQoTW9kdWxlOjpjcmVhdGUocGxhbikpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQbGFuVD4KIHN0YXRpYyBQbGFuOjpDb21wbGV0aW9uVGFzayBtYWtlVmFsaWRhdGlv
bkNhbGxiYWNrKE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsK
ICAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXSAoUGxhbiYgcGxhbikgewogICAgICAgICBBU1NFUlQoIXBs
YW4uaGFzV29yaygpKTsKLSAgICAgICAgY2FsbGJhY2stPnJ1bihtYWtlVmFsaWRhdGlvblJlc3Vs
dChzdGF0aWNfY2FzdDxMTEludFBsYW4mPihwbGFuKSkpOworICAgICAgICBjYWxsYmFjay0+cnVu
KG1ha2VWYWxpZGF0aW9uUmVzdWx0KHN0YXRpY19jYXN0PFBsYW5UJj4ocGxhbikpKTsKICAgICB9
KTsKIH0KIAogTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IE1vZHVsZTo6dmFsaWRhdGVTeW5jKENv
bnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKIHsKLSAgICBSZWY8TExJ
bnRQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgV1RGTW92ZShz
b3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpLCBudWxs
cHRyLCBudWxscHRyKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKSB7CisgICAg
ICAgIFJlZjxMTEludFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0
LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5UGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpKTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uZ2V0
KCkpOworICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgICAgICByZXR1cm4g
bWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7CisgICAgfQorCisgICAgUmVmPEJCUVBs
YW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2Up
LCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgcGxh
bi0+cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpOwogICAgIHJldHVybiBtYWtlVmFsaWRhdGlvblJl
c3VsdChwbGFuLmdldCgpKTsKIH0KIAogdm9pZCBNb2R1bGU6OnZhbGlkYXRlQXN5bmMoQ29udGV4
dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRh
dGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5UGxhbjo6VmFs
aWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSksIG51bGxw
dHIsIG51bGxwdHIpKTsKLSAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUoV1RGTW92
ZShwbGFuKSk7CisgICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKSB7CisgICAgICAgIFJl
ZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgV1RGTW92ZShz
b3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2s8TExJ
bnRQbGFuPihXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICAgICAgV2FzbTo6ZW5zdXJlV29ya2xp
c3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZjxQ
bGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNl
KSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRhdGlvbkNhbGxiYWNrPEJCUVBsYW4+
KFdURk1vdmUoY2FsbGJhY2spKSkpOworICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVu
cXVldWUoV1RGTW92ZShwbGFuKSk7CisgICAgfQogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6
OmdldE9yQ3JlYXRlQ29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwg
Q3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21F
eGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpnZXRP
ckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUpCiB7CiAg
ICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKQEAgLTg2LDIyICsxMDgsMjUgQEAgUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpn
ZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIEMK
ICAgICAvLyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBiYWNrIG9mZiByZXRyeWluZyBhdCBzb21l
IHBvaW50OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzA2MDcKICAgICBpZiAoIWNvZGVCbG9jayB8fCAoY29kZUJsb2NrLT5jb21waWxhdGlvbkZpbmlz
aGVkKCkgJiYgIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsKLSAgICAgICAgY29kZUJsb2NrID0g
Q29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwgY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1h
dGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBl
ciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgIGNvbnN0IFJlZjxMTEludENhbGxlZT4q
IGxsaW50Q2FsbGVlcyA9IG51bGxwdHI7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJ
bnQoKSkKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlcyA9IG1fbGxpbnRDYWxsZWVzLmRhdGEoKTsK
KyAgICAgICAgY29kZUJsb2NrID0gQ29kZUJsb2NrOjpjcmVhdGUoY29udGV4dCwgbW9kZSwgY29u
c3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZUluZm9ybWF0aW9uKCkpLCBsbGludENh
bGxlZXMpOwogICAgICAgICBtX2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSld
ID0gY29kZUJsb2NrOwogICAgIH0KICAgICByZXR1cm4gY29kZUJsb2NrLnJlbGVhc2VOb25OdWxs
KCk7CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29u
dGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJl
ZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitSZWY8
Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVTeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1v
ZGUgbW9kZSkKIHsKLSAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNv
ZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRo
cm93V2FzbUV4Y2VwdGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JD
cmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSk7CiAgICAgY29kZUJsb2NrLT53YWl0VW50aWxG
aW5pc2hlZCgpOwogICAgIHJldHVybiBjb2RlQmxvY2s7CiB9CiAKLXZvaWQgTW9kdWxlOjpjb21w
aWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDb2RlQmxvY2s6OkFz
eW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNy
ZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlv
bikKK3ZvaWQgTW9kdWxlOjpjb21waWxlQXN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9k
ZSBtb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmIHRhc2spCiB7Ci0g
ICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4
dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pOworICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2Nr
KGNvbnRleHQsIG1vZGUpOwogICAgIGNvZGVCbG9jay0+Y29tcGlsZUFzeW5jKGNvbnRleHQsIFdU
Rk1vdmUodGFzaykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgK
aW5kZXggNjUyZGRkMzdkYjhlNTc4OGQwNTg3NWQyYzJkZmM3ZmFkYzllNzM2NS4uMmRhZGI2YTli
YWY3MDNmMTlmOTAzNjhhNzU1ZDI1MTAxNWNkYTVmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuaApAQCAtMzcsOSArMzcsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgQkJRUGxhbjsKK2NsYXNzIExMSW50UGxhbjsKIHN0cnVj
dCBDb250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwotY2xhc3MgUGxhbjsKIAogdXNp
bmcgU2lnbmF0dXJlSW5kZXggPSB1aW50NjRfdDsKIApAQCAtNTIsMjYgKzUzLDM0IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgVmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZVN5bmMoQ29udGV4dCosIFZl
Y3Rvcjx1aW50OF90PiYmIHNvdXJjZSk7CiAgICAgc3RhdGljIHZvaWQgdmFsaWRhdGVBc3luYyhD
b250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBNb2R1bGU6OkFzeW5jVmFsaWRhdGlv
bkNhbGxiYWNrJiYpOwogCi0gICAgc3RhdGljIFJlZjxNb2R1bGU+IGNyZWF0ZShSZWY8TW9kdWxl
SW5mb3JtYXRpb24+JiYgbW9kdWxlSW5mb3JtYXRpb24pCisgICAgc3RhdGljIFJlZjxNb2R1bGU+
IGNyZWF0ZShCQlFQbGFuJiBwbGFuKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTW9kdWxlKFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE1vZHVsZShwbGFuKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZjxNb2R1
bGU+IGNyZWF0ZShMTEludFBsYW4mIHBsYW4pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBNb2R1bGUocGxhbikpOwogICAgIH0KIAogICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7
IH0KIAotICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlNb2Rl
LCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICB2b2lk
IGNvbXBpbGVBc3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBp
bGF0aW9uQ2FsbGJhY2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1v
ZGUpOworICAgIHZvaWQgY29tcGlsZUFzeW5jKENvbnRleHQqLCBNZW1vcnlNb2RlLCBDb2RlQmxv
Y2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayYmKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5Nb2R1bGUoKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yKE1lbW9yeU1vZGUgbW9k
ZSkgeyByZXR1cm4gbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpXS5nZXQo
KTsgfQogcHJpdmF0ZToKLSAgICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9jayhD
b250ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4
dCosIE1lbW9yeU1vZGUpOwogCi0gICAgTW9kdWxlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4mJik7
CisgICAgTW9kdWxlKEJCUVBsYW4mKTsKKyAgICBNb2R1bGUoTExJbnRQbGFuJik7CiAgICAgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIFJlZlB0cjxDb2Rl
QmxvY2s+IG1fY29kZUJsb2Nrc1tXYXNtOjpOdW1iZXJPZk1lbW9yeU1vZGVzXTsKKyAgICBWZWN0
b3I8UmVmPExMSW50Q2FsbGVlPj4gbV9sbGludENhbGxlZXM7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEIzQ29tcGlsYXRpb25QdHJUYWc+IG1fbGxpbnRFbnRyeVRodW5rczsKICAgICBMb2Nr
IG1fbG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAppbmRleCA2ZjRkZGNhYzdkZTI3ODJiODE2ZjZhZDk0MjI4ODRjYzQ4MDkyNDk0Li41ZDQ5YzNl
OTJhMDAzZWQyZTVlNDk0MmY5YzExOWQ0MDIyM2RjYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0xMjIsMTAgKzEyMiwxMSBAQCB2b2lkIE9NR1Bs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5z
ZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKICAgICAgICAgICAgICAgICBiYnFDYWxs
ZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3Vu
dDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKExMSW50Q2FsbGVlKiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhsbGludENhbGxlZS0+dGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0gICAg
ICAgICAgICAgICAgbGxpbnRDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkp
OwotICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9jb21waWxh
dGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBp
bGVkOworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAg
ICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xs
aW50Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpOworICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGF1dG8mIGNhbGwg
OiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewpAQCAtMTYxLDEwICsxNjIsMTEgQEAg
dm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2FzbVRv
V2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoTExJbnRDYWxsZWUqIGxsaW50Q2Fs
bGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW2ldLmdldCgpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS0+cmVw
bGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMp
IHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9j
ay0+bV9sbGludENhbGxlZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKEpJVENhbGxl
ZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudCgpKQogICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21D
YWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBv
c3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAg
ICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENh
bGxlZS5vc3JFbnRyeUNhbGxlZSgpKQogICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMo
b3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFD
YWxsZWVzW2ldLmdldCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAK
aW5kZXggMWVkNmNmZmZhMGQ0NGQwMTMxYWJjN2JlMzcwY2EwMmNkNTQ2Y2ZlNy4uNWE1M2I5NTkw
ODM2Zjk0YmNhNGZkMTAzN2Y0NDZhMmMxZTM1Y2MyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcApAQCAtNDgsMTkgKzQ4LDExIEBAIG5hbWVzcGFjZSBXYXNtUGxhbklu
dGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLVBs
YW46OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBD
b21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK1BsYW46
OlBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21w
bGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUoaW5m
bykpCi0gICAgLCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVy
V3JhcHBlcikpCi0gICAgLCBtX3Rocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24p
CiB7CiAgICAgbV9jb21wbGV0aW9uVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRleHQs
IFdURk1vdmUodGFzaykpKTsKIH0KLQotUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IFBs
YW4oY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgbnVsbHB0ciwgbnVsbHB0
cikKLXsKLX0KLQogUGxhbjo6UGxhbihDb250ZXh0KiBjb250ZXh0LCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCiAgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKE1vZHVsZUluZm9ybWF0aW9uOjpjcmVh
dGUoKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IDExMTIzNGY2
YjkzNmVlNWZmMjU2Y2YxN2Q1Y2ZiYWQ2YzhlYTZjZDEuLjliZTZjZTI1MjcwNTNiZDdkOWI5OTg3
NmQyNTBmNDBjMzE4ODY1MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApA
QCAtNTEsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQ29tcGxldGlvblRhc2sgPSBSZWZQ
dHI8U2hhcmVkVGFzazxDYWxsYmFja1R5cGU+PjsKIAogICAgIHN0YXRpYyBDb21wbGV0aW9uVGFz
ayBkb250RmluYWxpemUoKSB7IHJldHVybiBjcmVhdGVTaGFyZWRUYXNrPENhbGxiYWNrVHlwZT4o
W10oUGxhbiYpIHsgfSk7IH0KLSAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+LCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNt
RXhjZXB0aW9uKTsKICAgICBQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBD
b21wbGV0aW9uVGFzayYmKTsKIAogICAgIC8vIE5vdGU6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxk
IG9ubHkgYmUgdXNlZCBpZiB5b3UgYXJlIG5vdCBhY3R1YWxseSBidWlsZGluZyBhIG1vZHVsZSBl
LmcuIHZhbGlkYXRpb24vZnVuY3Rpb24gdGVzdHMKQEAgLTg4LDkgKzg3LDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb250ZXh0KiwgQ29tcGxldGlvblRhc2s+LCAxPiBt
X2NvbXBsZXRpb25UYXNrczsKIAotICAgIENyZWF0ZUVtYmVkZGVyV3JhcHBlciBtX2NyZWF0ZUVt
YmVkZGVyV3JhcHBlcjsKLSAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRp
b24geyBudWxscHRyIH07Ci0KICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgTWVtb3J5
TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIExvY2sgbV9s
b2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRo
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAppbmRl
eCAxNmYzZGFjNzMzNzcyY2YxZThjNDE5ZjRjNmE0ZDE3ZTkxZjY5YmQyLi4yMTI1YTgwYjgzNGFh
NjdjZTg5ZDM3MjM3Mzg0NDU0ZmQyY2YwNjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtNDA0LDcgKzQwNCw3IEBAIFdBU01fU0xPV19QQVRI
X0RFQ0woc2V0X2dsb2JhbF9yZWYpCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93
X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElu
c3RydWN0aW9uKiBwYywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25U
eXBlIGV4Y2VwdGlvblR5cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICBXQVNNX1JF
VFVSTl9UV08oV2FzbTo6VGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKShj
YWxsRnJhbWUsIGV4Y2VwdGlvblR5cGUsIGluc3RhbmNlKSwgMCk7CisgICAgV0FTTV9SRVRVUk5f
VFdPKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVHlwZSwg
aW5zdGFuY2UpLCAwKTsKIH0KIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19w
YXRoX3dhc21fcG9wY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCB1aW50MzJfdCB4KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAppbmRleCBmMmIzZWUxNWZkOWFm
MjA1MmU0ZjFiM2NhYTRiN2Y0Y2UyODAyN2E0Li5mOTM0ZjFhMTg2MGFjN2RhMjFjYTZkNWI5YWRj
MzQxODZiZTJmODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNw
cApAQCAtNTYsMTAgKzU2LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QKICAgICBqaXQuZmFy
SnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAg
ICAgaml0LmJyZWFrcG9pbnQoKTsgLy8gV2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgogCi0gICAg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9u
KCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhj
ZXB0aW9uKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQp
OwotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KHRocm93V2FzbUV4Y2VwdGlvbikpOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRo
cm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKTsKIH0KIApAQCAtMTEzLDE5ICsxMTEsNiBAQCBUaHVu
a3MmIFRodW5rczo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gKnRodW5rczsKIH0KIAotdm9pZCBU
aHVua3M6OnNldFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAv
LyBUaGUgdGh1bmtzIGFyZSB1bmlxdWUgZm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3Jl
IGNoYW5naW5nIHRoZSB0aHJvd2luZyBmdW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBv
ZiBXZWJBc3NlbWJseS4KLSAgICBSRUxFQVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24g
fHwgbV90aHJvd1dhc21FeGNlcHRpb24gPT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBtX3Ro
cm93V2FzbUV4Y2VwdGlvbiA9IHRocm93V2FzbUV4Y2VwdGlvbjsKLX0KLQotVGhyb3dXYXNtRXhj
ZXB0aW9uIFRodW5rczo6dGhyb3dXYXNtRXhjZXB0aW9uKCkKLXsKLSAgICByZXR1cm4gbV90aHJv
d1dhc21FeGNlcHRpb247Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gVGh1bmtzOjpzdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1
bmtzLmgKaW5kZXggODFjYzY2OTUwZmZkOThhNDhiN2RkYjcwNGFhYWU2YWU0OGQ1OTI1OS4uYTI4
YWJhOTZjZjAzZDQxZDViNDMwZjM4Mzg0NmI2NWU5NTk3ZDYzYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuaApAQCAtNDUsOSArNDUsNiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHN0YXRpYyBUaHVua3MmIHNpbmdsZXRvbigpOwog
Ci0gICAgdm9pZCBzZXRUaHJvd1dhc21FeGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAg
ICBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKCk7Ci0KICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc3R1Yihjb25zdCBBYnN0cmFj
dExvY2tlciYsIFRodW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGV4aXN0aW5nU3R1YihUaHVua0dlbmVyYXRvcik7CkBAIC01Niw3ICs1Myw2
IEBAIHByaXZhdGU6CiAgICAgVGh1bmtzKCkgPSBkZWZhdWx0OwogCiAgICAgSGFzaE1hcDxUaHVu
a0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gbV9zdHVi
czsKLSAgICBUaHJvd1dhc21FeGNlcHRpb24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRy
IH07CiAgICAgTG9jayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVZhbGlkYXRlLmNwcAppbmRleCA1YTNmNDNjM2JkMGFkOTJlM2FlYzFhZDY1Mzc2NzkzMDA2
NWI4ZWM5Li5mOWMwYTNhZWJhNTlmMDNhYTQ3MGQxYjU5MWJiYTM5ZjdlOWNkNDg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKQEAgLTQ2LDYgKzQ2LDE5
IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wg
aXNJZihjb25zdCBDb250cm9sRGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwo
Y29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsgfQorCisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUo
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrVHlwZTsgfQorICAgICAgICBCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQorCisgICAgICAgIHVuc2ln
bmVkIGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpMb29wID8gc2lnbmF0dXJlKCktPmFyZ3VtZW50Q291bnQoKSA6IHNpZ25hdHVyZSgp
LT5yZXR1cm5Db3VudCgpOyB9CisgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25l
ZCBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdl
dEFyaXR5KCkpOworICAgICAgICAgICAgcmV0dXJuIGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
TG9vcCA/IHNpZ25hdHVyZSgpLT5hcmd1bWVudChpKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5UeXBl
KGkpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2tUeXBlKCkpIHsKQEAgLTY2
LDM0ICs3OSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBvdXQucHJpbnQoc2lnKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrVHlwZTsgfQotICAgICAgICBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3NpZ25hdHVyZTsgfQotCi0gICAgICAgIHVuc2lnbmVkIGJyYW5jaFRhcmdldEFyaXR5
KCkgY29uc3QgeyByZXR1cm4gYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wID8gc2lnbmF0
dXJlKCktPmFyZ3VtZW50Q291bnQoKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyB9Ci0g
ICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCA/IHNpZ25hdHVyZSgpLT5h
cmd1bWVudChpKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOwotICAgICAgICB9Ci0KICAg
ICBwcml2YXRlOgogICAgICAgICBCbG9ja1R5cGUgbV9ibG9ja1R5cGU7CiAgICAgICAgIEJsb2Nr
U2lnbmF0dXJlIG1fc2lnbmF0dXJlOwogICAgIH07CiAKLSAgICB0eXBlZGVmIFN0cmluZyBFcnJv
clR5cGU7Ci0gICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3Vs
dDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUmVzdWx0OwotICAgIHVz
aW5nIEV4cHJlc3Npb25UeXBlID0gVHlwZTsKLSAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZl
Y3RvcjxFeHByZXNzaW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlz
dDsKLSAgICB0eXBlZGVmIENvbnRyb2xEYXRhIENvbnRyb2xUeXBlOwotICAgIHR5cGVkZWYgRXhw
cmVzc2lvbkxpc3QgUmVzdWx0TGlzdDsKLSAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPFZhbGlk
YXRlPjo6Q29udHJvbEVudHJ5IENvbnRyb2xFbnRyeTsKKyAgICBlbnVtIEV4cHJlc3Npb25UeXBl
IHsgRW1wdHlFeHByZXNzaW9uIH07CisKKyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7Cisg
ICAgdXNpbmcgVW5leHBlY3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1
c2luZyBSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+OworICAgIHVzaW5nIENvbnRy
b2xUeXBlID0gQ29udHJvbERhdGE7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25U
eXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIFZvaWQ7IH0KLSAgICBTdGFjayBjcmVhdGVT
dGFjaygpIHsgcmV0dXJuIFN0YWNrKCk7IH0KLSAgICBib29sIGlzQ29udHJvbFR5cGVJZihjb25z
dCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6OklmOyB9CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8
VmFsaWRhdGU+OjpDb250cm9sRW50cnk7CisgICAgdXNpbmcgQ29udHJvbFN0YWNrID0gRnVuY3Rp
b25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sU3RhY2s7CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9
IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBTdGFjayA9
IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6U3RhY2s7CisKKyAgICBzdGF0aWMgRXhwcmVzc2lv
blR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gRW1wdHlFeHByZXNzaW9uOyB9OwogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0
ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoY29uc3QgQXJncyYuLi4gYXJncykgY29u
c3QKQEAgLTExMywxOCArMTE2LDE4IEBAIHB1YmxpYzoKIAogICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwotICAgIEV4cHJlc3Npb25U
eXBlIGFkZENvbnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QpIHsgcmV0dXJuIHR5cGU7IH0KKyAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCkgeyByZXR1cm4gRW1w
dHlFeHByZXNzaW9uOyB9CiAKICAgICAvLyBSZWZlcmVuY2VzCi0gICAgUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUmIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVs
bChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIC8vIFRhYmxlcwotICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRU
YWJsZVNldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYg
dmFsdWUpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWdu
ZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlU2V0KHVuc2lnbmVkLCBFeHByZXNzaW9u
VHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVGFibGVTaXplKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
LSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhw
cmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBkZWx0YSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5z
aWduZWQsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHBy
ZXNzaW9uVHlwZSYgY291bnQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFi
bGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0
YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lv
blR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgY291bnQpOwogICAgIC8vIExvY2FscwogICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKTsKQEAgLTE2NywxNDIgKzE3MCw4
MSBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVuc2ln
bmVkIGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwg
Y29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwogCi0gICAg
Ym9vbCBoYXNNZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1fbW9kdWxlLm1lbW9yeTsgfQotCi0g
ICAgVmFsaWRhdGUoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZSkKLSAgICAgICAgOiBt
X21vZHVsZShtb2R1bGUpCisgICAgVmFsaWRhdGUoKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lk
IGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopOworICAgIHZv
aWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayopOwogICAgIHZvaWQgc2V0
UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiopIHsgfQogICAgIHZvaWQgZGlkRmluaXNo
UGFyc2luZ0xvY2FscygpIHsgfQogICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0K
IAogcHJpdmF0ZToKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5KGNvbnN0IFN0
YWNrJiwgY29uc3QgQ29udHJvbERhdGEmKTsKLQotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gY2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbERhdGEmIHRhcmdldCwgY29uc3QgU3RhY2smIGV4
cHJlc3Npb25TdGFjayk7Ci0KLSAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7Ci0gICAgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIG1fbW9kdWxlOwogfTsKIAotYXV0byBWYWxpZGF0ZTo6YWRkQXJn
dW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKSAtPiBSZXN1bHQKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhhZGRMb2NhbChzaWduYXR1cmUuYXJndW1lbnQo
aSksIDEpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdl
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVHZXQodW5zaWdu
ZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX21vZHVsZS50YWJsZUNvdW50KCks
ICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1f
bW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0gICAgcmVzdWx0ID0gbV9tb2R1bGUudGFibGVzW3RhYmxl
SW5kZXhdLndhc21UeXBlKCk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIg
IT0gaW5kZXgsICJ0YWJsZS5nZXQgaW5kZXggdG8gdHlwZSAiLCBtYWtlU3RyaW5nKGluZGV4KSwg
IiBleHBlY3RlZCAiLCBtYWtlU3RyaW5nKFR5cGU6OkkzMikpOwotCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhw
cmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFJlc3VsdAorYXV0
byBWYWxpZGF0ZTo6YWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNz
aW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUlu
ZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgs
ICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1bGUudGFibGVDb3VudCgpKTsKLSAgICBh
dXRvIHR5cGUgPSBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKTsKLSAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBpbmRleCwgInRhYmxlLnNldCBpbmRl
eCB0byB0eXBlICIsIGluZGV4LCAiIGV4cGVjdGVkICIsIFR5cGU6OkkzMik7Ci0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZhbHVlLCB0eXBlKSwgInRhYmxlLnNldCB2YWx1
ZSB0byB0eXBlICIsIHZhbHVlLCAiIGV4cGVjdGVkICIsIHR5cGUpOwotICAgIFJFTEVBU0VfQVNT
RVJUKG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50VHlw
ZTo6QW55cmVmIHx8IG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVF
bGVtZW50VHlwZTo6RnVuY3JlZik7Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlk
YXRlOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRUYWJsZVNpemUodW5zaWduZWQsIEV4
cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gVHlwZTo6STMyOwotICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX21vZHVsZS50YWJsZUNvdW50
KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIs
IG1fbW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZh
bGlkYXRlOjphZGRUYWJsZUdyb3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUm
IGZpbGwsIEV4cHJlc3Npb25UeXBlJiBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdyb3codW5zaWduZWQsIEV4cHJlc3Npb25U
eXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBy
ZXN1bHQgPSBUeXBlOjpJMzI7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4
ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIg
aXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1bGUudGFibGVDb3VudCgpKTsKLSAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoZmlsbCwgbV9tb2R1bGUudGFibGVzW3RhYmxl
SW5kZXhdLndhc21UeXBlKCkpLCAidGFibGUuZ3JvdyBleHBlY3RzIGZpbGwgdmFsdWUgb2YgdHlw
ZSAiLCBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSwgIiBnb3QgIiwgZmls
bCk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIgIT0gZGVsdGEsICJ0YWJs
ZS5ncm93IGV4cGVjdHMgYW4gaTMyIGRlbHRhIHZhbHVlLCBnb3QgIiwgbWFrZVN0cmluZyhkZWx0
YSkpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVGaWxs
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25U
eXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0
ZTo6YWRkVGFibGVGaWxsKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUs
IEV4cHJlc3Npb25UeXBlKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KHRhYmxlSW5kZXggPj0gbV9tb2R1bGUudGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwgdGFi
bGVJbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX21vZHVsZS50YWJsZUNvdW50KCkp
OwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShmaWxsLCBtX21vZHVsZS50
YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSksICJ0YWJsZS5maWxsIGV4cGVjdHMgZmlsbCB2
YWx1ZSBvZiB0eXBlICIsIG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpLCAi
IGdvdCAiLCBmaWxsKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBv
ZmZzZXQsICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4gaTMyIG9mZnNldCB2YWx1ZSwgZ290ICIsIG1h
a2VTdHJpbmcob2Zmc2V0KSk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIg
IT0gY291bnQsICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4gaTMyIGNvdW50IHZhbHVlLCBnb3QgIiwg
bWFrZVN0cmluZyhjb3VudCkpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0
ZTo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5
cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gVHlwZTo6STMy
OwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZSwgVHlwZTo6QW55
cmVmKSwgInJlZi5pc19udWxsIHRvIHR5cGUgIiwgbWFrZVN0cmluZyh2YWx1ZSksICIgZXhwZWN0
ZWQgIiwgbWFrZVN0cmluZyhUeXBlOjpBbnlyZWYpKTsKLQogICAgIHJldHVybiB7IH07CiB9CiAK
LWF1dG8gVmFsaWRhdGU6OmFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkUmVmRnVuYyh1aW50MzJfdCwg
RXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBUeXBlOjpGdW5jcmVm
OwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZnVuY3Rpb25J
bmRleFNwYWNlU2l6ZSgpLCAicmVmLmZ1bmMgaW5kZXggIiwgaW5kZXgsICIgaXMgdG9vIGxhcmdl
LCBtYXggaXMgIiwgbV9tb2R1bGUuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBtX21v
ZHVsZS5hZGRSZWZlcmVuY2VkRnVuY3Rpb24oaW5kZXgpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4g
UmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRMb2NhbChUeXBlLCB1aW50MzJfdCkgLT4gUmVzdWx0
CiB7Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBtX2xvY2Fscy5zaXplKCkgKyBjb3VudDsKLSAgICBB
U1NFUlQoIShDaGVja2VkVWludDMyKGNvdW50KSArIG1fbG9jYWxzLnNpemUoKSkuaGFzT3ZlcmZs
b3dlZCgpKTsKLSAgICBBU1NFUlQobmV3U2l6ZSA8PSBtYXhGdW5jdGlvbkxvY2Fscyk7Ci0gICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG5ld1Np
emUpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBuZXdTaXplLCAiIGxvY2FscyIpOwot
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fbG9j
YWxzLnVuY2hlY2tlZEFwcGVuZCh0eXBlKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZh
bGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjpnZXRMb2NhbCh1aW50MzJfdCwgRXhwcmVzc2lvblR5
cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1f
bG9jYWxzLnNpemUoKSwgImF0dGVtcHQgdG8gdXNlIHVua25vd24gbG9jYWwgIiwgaW5kZXgsICIg
bGFzdCBvbmUgaXMgIiwgbV9sb2NhbHMuc2l6ZSgpKTsKLSAgICByZXN1bHQgPSBtX2xvY2Fsc1tp
bmRleF07CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwodWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OnNldExvY2FsKHVpbnQzMl90LCBFeHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAg
RXhwcmVzc2lvblR5cGUgbG9jYWxUeXBlOwotICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
Z2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlwZSkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
IWlzU3VidHlwZSh2YWx1ZSwgbG9jYWxUeXBlKSwgInNldF9sb2NhbCB0byB0eXBlICIsIHZhbHVl
LCAiIGV4cGVjdGVkICIsIGxvY2FsVHlwZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBW
YWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJfdCwgRXhwcmVzc2lv
blR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49
IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtu
b3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpOwotICAgIHJl
c3VsdCA9IG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLnR5cGU7Ci0gICAgQVNTRVJUKGlzVmFsdWVU
eXBlKHJlc3VsdCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OnNldEds
b2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFJlc3VsdAorYXV0
byBWYWxpZGF0ZTo6c2V0R2xvYmFsKHVpbnQzMl90LCBFeHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0
CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX21vZHVsZS5nbG9iYWxz
LnNpemUoKSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgb2YgdW5rbm93biBnbG9iYWwsIGxpbWl0
IGlzICIsIG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFi
bGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlzIGltbXV0YWJsZSIpOwotCi0gICAgRXhwcmVz
c2lvblR5cGUgZ2xvYmFsVHlwZSA9IG1fbW9kdWxlLmdsb2JhbHNbaW5kZXhdLnR5cGU7Ci0gICAg
QVNTRVJUKGlzVmFsdWVUeXBlKGdsb2JhbFR5cGUpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKGdsb2JhbFR5cGUgIT0gdmFsdWUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIHdpdGggdHlw
ZSAiLCBnbG9iYWxUeXBlLCAiIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlICIsIHZhbHVlKTsKICAg
ICByZXR1cm4geyB9OwogfQogCkBAIC0zMTEsMTc4ICsyNTMsMTE0IEBAIFZhbGlkYXRlOjpDb250
cm9sVHlwZSBWYWxpZGF0ZTo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQog
ICAgIHJldHVybiBDb250cm9sRGF0YShCbG9ja1R5cGU6OlRvcExldmVsLCBzaWduYXR1cmUpOwog
fQogCi1zdGF0aWMgVmFsaWRhdGU6OlN0YWNrIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCBWYWxpZGF0ZTo6U3RhY2smIHN0YWNrKQotewotICAgIFZhbGlkYXRlOjpTdGFjayBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCkpOwotICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCkpOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0YWNrLnNpemUoKSAtIHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKHN0YWNrW2kgKyBvZmZzZXRdKTsKLSAgICBzdGFjay5zaHJpbmsob2Zmc2V0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBhdXRvIFZhbGlkYXRlOjphZGRCbG9jayhCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIG5ld0Jsb2Nr
LCBTdGFjayYgbmV3U3RhY2spIC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoZW5jbG9zaW5nU3RhY2suc2l6ZSgpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJU
b28gZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgYmxvY2suIEJsb2NrIGV4cGVjdHMgIiwgc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIGVuY2xvc2luZ1N0YWNrLnNpemUo
KSwgIiB3ZXJlIHByZXNlbnQuIEJsb2NrIGhhcyBzaWduYXR1cmU6ICIsICpzaWduYXR1cmUpOwot
ICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAg
ICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICBu
ZXdCbG9jayA9IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6QmxvY2ssIHNpZ25hdHVyZSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kp
Ci0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShuZXdTdGFja1tpXSwg
c2lnbmF0dXJlLT5hcmd1bWVudChpKSksICJMb29wIGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGlu
ZGV4IiwgaSwgIiB0byBiZSBhIHN1YnR5cGUgb2YgIiwgc2lnbmF0dXJlLT5hcmd1bWVudChpKSwg
IiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbmV3U3RhY2tbaV0pOwogICAgIHJldHVybiB7IH07
CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBT
dGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBsb29wLCBTdGFjayYgbmV3U3RhY2ss
IHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGVuY2xv
c2luZ1N0YWNrLnNpemUoKSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2
YWx1ZXMgb24gc3RhY2sgZm9yIGxvb3AgYmxvY2suIExvb3AgZXhwZWN0cyAiLCBzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgZW5jbG9zaW5nU3RhY2suc2l6ZSgpLCAi
IHdlcmUgcHJlc2VudC4gTG9vcCBoYXMgc2lnbmF0dXJlOiAiLCAqc2lnbmF0dXJlKTsKLSAgICBu
ZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3Bs
aXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgbG9vcCA9
IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6TG9vcCwgc2lnbmF0dXJlKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKG5ld1N0YWNrW2ldLCBzaWduYXR1cmUt
PmFyZ3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAi
IHRvIGJlIGEgc3VidHlwZSBvZiAiLCBzaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1
bWVudCBoYXMgdHlwZSAiLCBuZXdTdGFja1tpXSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0
byBWYWxpZGF0ZTo6YWRkU2VsZWN0KEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgRXhwcmVzc2lv
blR5cGUgbm9uWmVybywgRXhwcmVzc2lvblR5cGUgemVybywgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQK
IHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbiAhPSBJMzIsICJzZWxlY3Qg
Y29uZGl0aW9uIG11c3QgYmUgaTMyLCBnb3QgIiwgY29uZGl0aW9uKTsKLSAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKG5vblplcm8gIT0gemVybywgInNlbGVjdCByZXN1bHQgdHlwZXMgbXVzdCBt
YXRjaCwgZ290ICIsIG5vblplcm8sICIgYW5kICIsIHplcm8pOwotICAgIHJlc3VsdCA9IHplcm87
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkSWYoRXhwcmVzc2lvblR5
cGUgY29uZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdT
dGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKSAtPiBSZXN1bHQKK2F1
dG8gVmFsaWRhdGU6OmFkZElmKEV4cHJlc3Npb25UeXBlLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5l
d1N0YWNrKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlv
biAhPSBJMzIsICJpZiBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAiLCBtYWtlU3RyaW5nKGNv
bmRpdGlvbikpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZW5jbG9zaW5nU3RhY2suc2l6
ZSgpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBz
dGFjayBmb3IgaWYgYmxvY2suIElmIGV4cGVjdHMgIiwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksICIsIGJ1dCBvbmx5ICIsIGVuY2xvc2luZ1N0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQu
IElmIGJsb2NrIGhhcyBzaWduYXR1cmU6ICIsICpzaWduYXR1cmUpOwotICAgIG5ld1N0YWNrID0g
c3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNp
Z25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICByZXN1bHQgPSBDb250cm9s
RGF0YShCbG9ja1R5cGU6OklmLCBzaWduYXR1cmUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUobmV3U3RhY2tbaV0sIHNpZ25hdHVyZS0+YXJndW1lbnQo
aSkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgYSBz
dWJ0eXBlIG9mICIsIHNpZ25hdHVyZS0+YXJndW1lbnQoaSksICIgYnV0IGFyZ3VtZW50IGhhcyB0
eXBlICIsIG5ld1N0YWNrW2ldKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRl
OjphZGRFbHNlKENvbnRyb2xUeXBlJiBjdXJyZW50LCBjb25zdCBTdGFjayYgdmFsdWVzKSAtPiBS
ZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0
IFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlm
eSh2YWx1ZXMsIGN1cnJlbnQpKTsKICAgICByZXR1cm4gYWRkRWxzZVRvVW5yZWFjaGFibGUoY3Vy
cmVudCk7CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJiBjdXJyZW50KSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGN1
cnJlbnQuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpJZiwgImVsc2UgYmxvY2sgaXNuJ3QgYXNz
b2NpYXRlZCB0byBhbiBpZiIpOwogICAgIGN1cnJlbnQgPSBDb250cm9sRGF0YShCbG9ja1R5cGU6
OkJsb2NrLCBjdXJyZW50LnNpZ25hdHVyZSgpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IFZhbGlkYXRlOjphZGRSZXR1cm4oQ29udHJvbFR5cGUmIHRvcExldmVsLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZFJldHVy
bihDb250cm9sVHlwZSYsIGNvbnN0IFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgQVNTRVJUKHRv
cExldmVsLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWwpOwotICAgIHJldHVybiBj
aGVja0JyYW5jaFRhcmdldCh0b3BMZXZlbCwgcmV0dXJuVmFsdWVzKTsKLX0KLQotYXV0byBWYWxp
ZGF0ZTo6Y2hlY2tCcmFuY2hUYXJnZXQoQ29udHJvbFR5cGUmIHRhcmdldCwgY29uc3QgU3RhY2sm
IGV4cHJlc3Npb25TdGFjaykgLT4gUmVzdWx0Ci17Ci0gICAgaWYgKCF0YXJnZXQuYnJhbmNoVGFy
Z2V0QXJpdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgp
LCB0YXJnZXQuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCA/ICJicmFuY2ggb3V0
IG9mIGZ1bmN0aW9uIiA6ICJicmFuY2ggdG8gYmxvY2siLCAiIG9uIGV4cHJlc3Npb24gc3RhY2sg
b2Ygc2l6ZSAiLCBleHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiLCBidXQgYmxvY2ssICIsIHRhcmdl
dCAsICIgZXhwZWN0cyAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSwgIiB2YWx1ZXMiKTsK
LQotCi0gICAgdW5zaWduZWQgZXhwcmVzc2lvblN0YWNrT2Zmc2V0ID0gZXhwcmVzc2lvblN0YWNr
LnNpemUoKSAtIHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKTsgKytpKQotICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUoaSks
IGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2tPZmZzZXQgKyBpXSksICJicmFuY2gncyBz
dGFjayB0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb2YgYmxvY2sncyB0eXBlIGJyYW5jaCB0YXJnZXQg
dHlwZS4gU3RhY2sgdmFsdWUgaGFzIHR5cGUiLCBleHByZXNzaW9uU3RhY2tbZXhwcmVzc2lvblN0
YWNrT2Zmc2V0ICsgaV0sICIgYnV0IGJyYW5jaCB0YXJnZXQgZXhwZWN0cyBhIHZhbHVlIHdpdGgg
c3VidHlwZSBvZiAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgIiBhdCBpbmRleCAiLCBp
KTsKLQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZEJyYW5jaChDb250
cm9sVHlwZSYgdGFyZ2V0LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiBz
dGFjaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRCcmFuY2goQ29udHJvbFR5cGUmLCBF
eHByZXNzaW9uVHlwZSwgY29uc3QgU3RhY2smKSAtPiBSZXN1bHQKIHsKLSAgICAvLyBWb2lkIG1l
YW5zIHRoaXMgaXMgYW4gdW5jb25kaXRpb25hbCBicmFuY2guCi0gICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihjb25kaXRpb24gIT0gVm9pZCAmJiBjb25kaXRpb24gIT0gSTMyLCAiY29uZGl0aW9u
YWwgYnJhbmNoIHdpdGggbm9uLWkzMiBjb25kaXRpb24gIiwgY29uZGl0aW9uKTsKLSAgICByZXR1
cm4gY2hlY2tCcmFuY2hUYXJnZXQodGFyZ2V0LCBzdGFjayk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFy
Z2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OmFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSwgY29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4m
LCBDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihjb25kaXRpb24gIT0gSTMyLCAiYnJfdGFibGUgd2l0aCBub24taTMyIGNv
bmRpdGlvbiAiLCBjb25kaXRpb24pOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRh
cmdldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byogdGFyZ2V0ID0gdGFyZ2V0c1tpXTsK
LSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdl
dEFyaXR5KCkgIT0gdGFyZ2V0LT5icmFuY2hUYXJnZXRBcml0eSgpLCAiYnJfdGFibGUgdGFyZ2V0
IHR5cGUgc2l6ZSBtaXNtYXRjaC4gRGVmYXVsdCBoYXMgc2l6ZTogIiwgZGVmYXVsdFRhcmdldC5i
cmFuY2hUYXJnZXRBcml0eSgpLCAiYnV0IHRhcmdldDogIiwgaSwgIiBoYXMgc2l6ZTogIiwgdGFy
Z2V0LT5icmFuY2hUYXJnZXRBcml0eSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB0eXBlID0g
MDsgdHlwZSA8IGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKTsgKyt0eXBlKQotICAg
ICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGRlZmF1bHRUYXJnZXQu
YnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpKSwg
ImJyX3RhYmxlIHRhcmdldCB0eXBlIG1pc21hdGNoIGF0IG9mZnNldCAiLCB0eXBlLCAiIGV4cGVj
dGVkOiAiLCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUodHlwZSksICIgYnV0IHNhdzog
IiwgdGFyZ2V0LT5icmFuY2hUYXJnZXRUeXBlKHR5cGUpLCAiIHdoZW4gdGFyZ2V0aW5nIGJsb2Nr
IiwgKnRhcmdldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNoZWNrQnJhbmNoVGFyZ2V0KGRlZmF1
bHRUYXJnZXQsIGV4cHJlc3Npb25TdGFjayk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBW
YWxpZGF0ZTo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRHcm93TWVtb3J5KEV4cHJl
c3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoZGVsdGEgIT0gSTMyLCAiZ3Jvd19tZW1vcnkgd2l0aCBub24taTMyIGRlbHRh
IGFyZ3VtZW50IGhhcyB0eXBlOiAiLCBkZWx0YSk7Ci0gICAgcmVzdWx0ID0gSTMyOwogICAgIHJl
dHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDdXJyZW50TWVtb3J5
KEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gSTMyOwogICAgIHJl
dHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50
cnksIFN0YWNrJiBzdGFjaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjplbmRCbG9jayhDb250
cm9sRW50cnkmIGVudHJ5LCBTdGFjayYpIC0+IFJlc3VsdAogewotICAgIFdBU01fRkFJTF9JRl9I
RUxQRVJfRkFJTFModW5pZnkoc3RhY2ssIGVudHJ5LmNvbnRyb2xEYXRhKSk7CiAgICAgcmV0dXJu
IGFkZEVuZFRvVW5yZWFjaGFibGUoZW50cnkpOwogfQogCiBhdXRvIFZhbGlkYXRlOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnkpIC0+IFJlc3VsdAogewogICAgIGF1dG8g
YmxvY2sgPSBlbnRyeS5jb250cm9sRGF0YTsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGJsb2NrLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6SWYpOwotCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3Vu
dCgpOyArK2kpCi0gICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChi
bG9jay5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSk7CisgICAgICAgIGVudHJ5LmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChibG9jay5zaWduYXR1cmUoKS0+cmV0
dXJuVHlwZShpKSwgRW1wdHlFeHByZXNzaW9uKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
Y29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpIC0+IFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFyZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZShhcmdzW2ldLCBzaWduYXR1cmUuYXJndW1lbnQoaSkpLCAiYXJndW1lbnQgdHlwZSBt
aXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnc1tpXSwgIiwgZXhwZWN0ZWQgIiwgc2lnbmF0dXJl
LmFyZ3VtZW50KGkpKTsKLQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUu
cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICByZXN1bHRzLmFwcGVuZChzaWduYXR1cmUucmV0
dXJuVHlwZShpKSk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKEVtcHR5RXhwcmVzc2lvbik7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBSZXN1bHQKK2F1
dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mLCBSZXN1bHRMaXN0JiByZXN1
bHRzKSAtPiBSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZUluZGV4IDwgbV9tb2R1
bGUudGFibGVDb3VudCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX21vZHVsZS50YWJsZXNbdGFi
bGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYpOwotICAgIGNvbnN0
IGF1dG8gYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoYXJndW1lbnRDb3VudCA9PSBhcmdzLnNpemUoKSAtIDEpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZ3NbaV0sIHNpZ25hdHVyZS5hcmd1bWVudChp
KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmdz
W2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJndW1lbnQoaSkpOwotCi0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRihhcmdzLmxhc3QoKSAhPSBJMzIsICJub24taTMyIGNhbGxfaW5kaXJl
Y3QgaW5kZXggIiwgYXJncy5sYXN0KCkpOwotCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKGkpKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoRW1wdHlFeHBy
ZXNzaW9uKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjp1bmlmeShjb25z
dCBTdGFjayYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlwZSYgYmxvY2spIC0+IFJlc3VsdAorYXV0
byBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUmLCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihi
bG9jay5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSAhPSB2YWx1ZXMuc2l6ZSgpLCAiIGJsb2Nr
IHdpdGggdHlwZTogIiwgKmJsb2NrLnNpZ25hdHVyZSgpLCAiIHJldHVybnM6ICIsIGJsb2NrLnNp
Z25hdHVyZSgpLT5yZXR1cm5Db3VudCgpLCAiIGJ1dCBzdGFjayBoYXM6ICIsIHZhbHVlcy5zaXpl
KCksICIgdmFsdWVzIik7CisgICAgcmV0dXJuIHsgfTsKK30KIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodmFsdWVzW2ldLCBibG9jay5zaWdu
YXR1cmUoKS0+cmV0dXJuVHlwZShpKSksICJjb250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhw
ZWN0ZWQgdHlwZS4gIiwgdmFsdWVzW2ldLCAiIGlzIG5vdCBhIHN1YnR5cGUgb2YgIiwgYmxvY2su
c2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSkpOworYXV0byBWYWxpZGF0ZTo6c3RvcmUoU3RvcmVP
cFR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgdWludDMyX3QpIC0+IFJlc3Vs
dAoreworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPE9wVHlwZT4KK2F1dG8gVmFsaWRh
dGU6OmFkZE9wKEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAorewor
ICAgIHJldHVybiB7IH07Cit9CiAKLSAgICAvLyBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHZhbHVl
cy5zaXplKCkgIT0gMSwgImJsb2NrIHdpdGggdHlwZTogIiwgbWFrZVN0cmluZygqYmxvY2suc2ln
bmF0dXJlKCkpLCAiIGVuZHMgd2l0aCBhIHN0YWNrIGNvbnRhaW5pbmcgbW9yZSB0aGFuIG9uZSB2
YWx1ZSIpOwordGVtcGxhdGU8T3BUeXBlPgorYXV0byBWYWxpZGF0ZTo6YWRkT3AoRXhwcmVzc2lv
blR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAorewogICAg
IHJldHVybiB7IH07CiB9CiAKQEAgLTQ5MCwxMCArMzY4LDEwIEBAIHN0YXRpYyB2b2lkIGR1bXBF
eHByZXNzaW9uU3RhY2soY29uc3QgQ29tbWFQcmludGVyJiBjb21tYSwgY29uc3QgVmFsaWRhdGU6
OlN0YWNrCiB7CiAgICAgZGF0YUxvZyhjb21tYSwgIiBFeHByZXNzaW9uU3RhY2s6Iik7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lvblN0YWNrKQotICAgICAgICBk
YXRhTG9nKGNvbW1hLCBtYWtlU3RyaW5nKGV4cHJlc3Npb24pKTsKKyAgICAgICAgZGF0YUxvZyhj
b21tYSwgbWFrZVN0cmluZyhleHByZXNzaW9uLnR5cGUoKSkpOwogfQogCi12b2lkIFZhbGlkYXRl
OjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0
YWNrKiBleHByZXNzaW9uU3RhY2spCit2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IENvbnRyb2xT
dGFjayYgY29udHJvbFN0YWNrLCBjb25zdCBTdGFjayogZXhwcmVzc2lvblN0YWNrKQogewogICAg
IGZvciAoc2l6ZV90IGkgPSBjb250cm9sU3RhY2suc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIGRh
dGFMb2coIiAgIiwgY29udHJvbFN0YWNrW2ldLmNvbnRyb2xEYXRhKTsKQEAgLTUwNyw3ICszODUs
NyBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250
cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZQogCiBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZh
bGlkYXRlRnVuY3Rpb24oY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGUpCiB7Ci0gICAg
VmFsaWRhdGUgY29udGV4dChtb2R1bGUpOworICAgIFZhbGlkYXRlIGNvbnRleHQ7CiAgICAgRnVu
Y3Rpb25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRvcihjb250ZXh0LCBmdW5jdGlvbi5kYXRhLmRh
dGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbW9kdWxlKTsKICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHZhbGlkYXRvci5wYXJzZSgpKTsKICAgICByZXR1cm4geyB9
OwpAQCAtNTE1LDYgKzM5Myw0IEBAIEV4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5j
dGlvbihjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduCiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCiAKLSNpbmNsdWRlICJXYXNtVmFsaWRhdGVJbmxpbmVzLmgiCi0K
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVdvcmtsaXN0LmNwcAppbmRleCBkZjhiM2U4OWNiYTZmNmQxMjc5NDUwZWY0YmQ0YmQw
NDM3OTg5M2YwLi5mYTcxNmUyMjViZTkxMmMwMzc2YjQ4ZDEyMjBmZWFkYWI2OGZjNWM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xpc3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKQEAgLTE1Miw4ICsx
NTIsMTIgQEAgdm9pZCBXb3JrbGlzdDo6ZW5xdWV1ZShSZWY8UGxhbj4gcGxhbikKICAgICB9CiAK
ICAgICBkYXRhTG9nTG5JZihXYXNtV29ya2xpc3RJbnRlcm5hbDo6dmVyYm9zZSwgIkVucXVldWlu
ZyBwbGFuIik7Ci0gICAgbV9xdWV1ZS5lbnF1ZXVlKHsgUHJpb3JpdHk6OlByZXBhcmF0aW9uLCBu
ZXh0VGlja2V0KCksICBXVEZNb3ZlKHBsYW4pIH0pOwotICAgIG1fcGxhbkVucXVldWVkLT5ub3Rp
ZnlPbmUobG9ja2VyKTsKKyAgICBib29sIG11bHRpVGhyZWFkZWQgPSBwbGFuLT5tdWx0aVRocmVh
ZGVkKCk7CisgICAgbV9xdWV1ZS5lbnF1ZXVlKHsgbXVsdGlUaHJlYWRlZCA/IFByaW9yaXR5OjpD
b21waWxhdGlvbiA6IFByaW9yaXR5OjpQcmVwYXJhdGlvbiwgbmV4dFRpY2tldCgpLCAgV1RGTW92
ZShwbGFuKSB9KTsKKyAgICBpZiAobXVsdGlUaHJlYWRlZCkKKyAgICAgICAgbV9wbGFuRW5xdWV1
ZWQtPm5vdGlmeUFsbChsb2NrZXIpOworICAgIGVsc2UKKyAgICAgICAgbV9wbGFuRW5xdWV1ZWQt
Pm5vdGlmeU9uZShsb2NrZXIpOwogfQogCiB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZVBsYW5TeW5j
aHJvbm91c2x5KFBsYW4mIHBsYW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKaW5kZXggYjEzYTVlMjRjNGY0NjJhNDE1ZTUwODk4
YzM4MmE4MGRiODA4NjQ0Ny4uY2IwMjgxYjlhYzUzYmQ5YWRkZTg2YzJjOGIzNGJlM2E3ZDhlZjcz
OCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3Bz
SGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9w
c0hlYWRlci5weQpAQCAtNDAsMTAgKzQwLDE2IEBAIG9wY29kZXMgPSB3YXNtLm9wY29kZXMKIHdh
c21PcHNIRmlsZSA9IG9wZW4oYXJnc1syXSwgInciKQogCiAKLWRlZiBjcHBNYWNybyh3YXNtT3Bj
b2RlLCB2YWx1ZSwgYjMsIGluYyk6Ci0gICAgcmV0dXJuICIgXFxcbiAgICBtYWNybygiICsgd2Fz
bS50b0NwcCh3YXNtT3Bjb2RlKSArICIsICIgKyBoZXgoaW50KHZhbHVlKSkgKyAiLCAiICsgYjMg
KyAiLCAiICsgc3RyKGluYykgKyAiKSIKK2RlZiBjcHBUeXBlKHR5cGUpOgorICAgIGlmIHR5cGUg
PT0gImJvb2wiOgorICAgICAgICByZXR1cm4gIkkzMiIKKyAgICByZXR1cm4gdHlwZS5jYXBpdGFs
aXplKCkKIAogCitkZWYgY3BwTWFjcm8od2FzbU9wY29kZSwgdmFsdWUsIGIzLCBpbmMsICpleHRy
YUFyZ3MpOgorICAgIGV4dHJhQXJnc1N0ciA9ICIsICIgKyAiLCAiLmpvaW4oZXh0cmFBcmdzKSBp
ZiBsZW4oZXh0cmFBcmdzKSBlbHNlICIiCisgICAgcmV0dXJuICIgXFxcbiAgICBtYWNybygiICsg
d2FzbS50b0NwcCh3YXNtT3Bjb2RlKSArICIsICIgKyBoZXgoaW50KHZhbHVlKSkgKyAiLCAiICsg
YjMgKyAiLCAiICsgc3RyKGluYykgKyBleHRyYUFyZ3NTdHIgKyAiKSIKKwogZGVmIHR5cGVNYWNy
b2l6ZXIoKToKICAgICBpbmMgPSAwCiAgICAgZm9yIHR5IGluIHdhc20udHlwZXM6CkBAIC01NSwz
MyArNjEsNTUgQEAgdHlwZV9kZWZpbml0aW9ucy5leHRlbmQoW3QgZm9yIHQgaW4gdHlwZU1hY3Jv
aXplcigpXSkKIHR5cGVfZGVmaW5pdGlvbnMgPSAiIi5qb2luKHR5cGVfZGVmaW5pdGlvbnMpCiAK
IAotZGVmIG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG9wY29kZUZpZWxkPSJ2YWx1ZSIpOgorZGVm
IG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG9wY29kZUZpZWxkPSJ2YWx1ZSIsIG1vZGlmaWVyPU5v
bmUpOgogICAgIGluYyA9IDAKICAgICBmb3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihmaWx0
ZXIpOgogICAgICAgICBiM29wID0gIk9vcHMiCiAgICAgICAgIGlmIGlzU2ltcGxlKG9wWyJvcGNv
ZGUiXSk6CiAgICAgICAgICAgICBiM29wID0gb3BbIm9wY29kZSJdWyJiM29wIl0KLSAgICAgICAg
eWllbGQgY3BwTWFjcm8ob3BbIm5hbWUiXSwgb3BbIm9wY29kZSJdW29wY29kZUZpZWxkXSwgYjNv
cCwgaW5jKQorICAgICAgICBleHRyYUFyZ3MgPSBbXQorICAgICAgICBpZiBtb2RpZmllcjoKKyAg
ICAgICAgICAgIGV4dHJhQXJncyA9IG1vZGlmaWVyKG9wWyJvcGNvZGUiXSkKKyAgICAgICAgeWll
bGQgY3BwTWFjcm8ob3BbIm5hbWUiXSwgb3BbIm9wY29kZSJdW29wY29kZUZpZWxkXSwgYjNvcCwg
aW5jLCAqZXh0cmFBcmdzKQogICAgICAgICBpbmMgKz0gMQogCisKK2RlZiBvcGNvZGVXaXRoVHlw
ZXNNYWNyb2l6ZXIoZmlsdGVyKToKKyAgICBkZWYgbW9kaWZpZXIob3ApOgorICAgICAgICByZXR1
cm4gW2NwcFR5cGUodHlwZSkgZm9yIHR5cGUgaW4gb3BbInBhcmFtZXRlciJdICsgb3BbInJldHVy
biJdXQorICAgIHJldHVybiBvcGNvZGVNYWNyb2l6ZXIoZmlsdGVyLCBtb2RpZmllcj1tb2RpZmll
cikKKworCitkZWYgbWVtb3J5TG9hZE1hY3JvaXplcigpOgorICAgIGRlZiBtb2RpZmllcihvcCk6
CisgICAgICAgIHJldHVybiBbY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pXQorICAgIHJldHVybiBv
cGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiAob3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5k
IGxlbihvcFsicmV0dXJuIl0pID09IDEpLCBtb2RpZmllcj1tb2RpZmllcikKKworCitkZWYgbWVt
b3J5U3RvcmVNYWNyb2l6ZXIoKToKKyAgICBkZWYgbW9kaWZpZXIob3ApOgorICAgICAgICByZXR1
cm4gW2NwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKV0KKyAgICByZXR1cm4gb3Bjb2RlTWFjcm9p
emVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIGFuZCBsZW4ob3BbInJl
dHVybiJdKSA9PSAwKSwgbW9kaWZpZXI9bW9kaWZpZXIpCisKKwogZGVmaW5lcyA9IFsiI2RlZmlu
ZSBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1AobWFjcm8pIl0KIGRlZmluZXMuZXh0ZW5kKFtvcCBm
b3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogbm90IChpc1VuYXJ5KG9wKSBvciBp
c0JpbmFyeShvcCkgb3Igb3BbImNhdGVnb3J5Il0gPT0gImNvbnRyb2wiIG9yIG9wWyJjYXRlZ29y
eSJdID09ICJtZW1vcnkiIG9yIG9wWyJjYXRlZ29yeSJdID09ICJleHR0YWJsZSIpKV0pCiBkZWZp
bmVzLmFwcGVuZCgiXG5cbiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AobWFj
cm8pIikKIGRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJk
YSBvcDogb3BbImNhdGVnb3J5Il0gPT0gImNvbnRyb2wiKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5c
biNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TSU1QTEVfVU5BUllfT1AobWFjcm8pIikKLWRlZmluZXMu
ZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogaXNVbmFyeShv
cCkgYW5kIGlzU2ltcGxlKG9wKSldKQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNv
ZGVXaXRoVHlwZXNNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc1VuYXJ5KG9wKSBhbmQgaXNTaW1wbGUo
b3ApKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9VTkFSWV9P
UChtYWNybykgXFxcbiAgICBGT1JfRUFDSF9XQVNNX1NJTVBMRV9VTkFSWV9PUChtYWNybykiKQot
ZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBp
c1VuYXJ5KG9wKSBhbmQgbm90IChpc1NpbXBsZShvcCkpKV0pCitkZWZpbmVzLmV4dGVuZChbb3Ag
Zm9yIG9wIGluIG9wY29kZVdpdGhUeXBlc01hY3JvaXplcihsYW1iZGEgb3A6IGlzVW5hcnkob3Ap
IGFuZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBG
T1JfRUFDSF9XQVNNX1NJTVBMRV9CSU5BUllfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtv
cCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnkob3ApIGFuZCBp
c1NpbXBsZShvcCkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlV2l0aFR5
cGVzTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnkob3ApIGFuZCBpc1NpbXBsZShvcCkpXSkK
IGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChtYWNy
bykgXFxcbiAgICBGT1JfRUFDSF9XQVNNX1NJTVBMRV9CSU5BUllfT1AobWFjcm8pIikKLWRlZmlu
ZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5h
cnkob3ApIGFuZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Ig
b3AgaW4gb3Bjb2RlV2l0aFR5cGVzTWFjcm9pemVyKGxhbWJkYSBvcDogaXNCaW5hcnkob3ApIGFu
ZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1Jf
RUFDSF9XQVNNX01FTU9SWV9MT0FEX09QKG1hY3JvKSIpCi1kZWZpbmVzLmV4dGVuZChbb3AgZm9y
IG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAibWVt
b3J5IiBhbmQgbGVuKG9wWyJyZXR1cm4iXSkgPT0gMSkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBm
b3Igb3AgaW4gbWVtb3J5TG9hZE1hY3JvaXplcigpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2Rl
ZmluZSBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChtYWNybykiKQotZGVmaW5lcy5leHRl
bmQoW29wIGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiAob3BbImNhdGVnb3J5
Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJuIl0pID09IDApKV0pCitkZWZpbmVzLmV4
dGVuZChbb3AgZm9yIG9wIGluIG1lbW9yeVN0b3JlTWFjcm9pemVyKCldKQogZGVmaW5lcy5hcHBl
bmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fRVhUX1RBQkxFX09QKG1hY3JvKSIpCi1kZWZp
bmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsi
Y2F0ZWdvcnkiXSA9PSAiZXh0dGFibGUiKSwgImV4dGVuZGVkT3AiKV0pCitkZWZpbmVzLmV4dGVu
ZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnki
XSA9PSAiZXh0dGFibGUiKSwgb3Bjb2RlRmllbGQ9ImV4dGVuZGVkT3AiKV0pCiBkZWZpbmVzLmFw
cGVuZCgiXG5cbiIpCiAKIGRlZmluZXMgPSAiIi5qb2luKGRlZmluZXMpCkBAIC0xMzMsMTMgKzE2
MSwxMyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGV4cGVjdGVkVmVyc2lvbk51bWJlciA9
ICIiIiArIHdhc20uZXhwZWN0ZWRWZXJzaW9uTnVtYgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBudW1UeXBlcyA9ICIiIiArIHN0cihsZW4odHlwZXMpKSArICIiIjsKIAogIiIiICsgdHlwZV9k
ZWZpbml0aW9ucyArICIiIgotI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgYjN0
eXBlLCBpbmMpIG5hbWUgPSBpZCwKKyNkZWZpbmUgQ1JFQVRFX0VOVU1fVkFMVUUobmFtZSwgaWQs
IC4uLikgbmFtZSA9IGlkLAogZW51bSBUeXBlIDogaW50OF90IHsKICAgICBGT1JfRUFDSF9XQVNN
X1RZUEUoQ1JFQVRFX0VOVU1fVkFMVUUpCiB9OwogI3VuZGVmIENSRUFURV9FTlVNX1ZBTFVFCiAK
LSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgaW5jKSBjYXNlIGlkOiByZXR1
cm4gdHJ1ZTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIC4uLikgY2FzZSBpZDogcmV0
dXJuIHRydWU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50PgogaW5saW5lIGJvb2wgaXNWYWxpZFR5
cGUoSW50IGkpCiB7CkBAIC0xNTIsNyArMTgwLDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFR5cGUo
SW50IGkpCiB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1l
LCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJuIGIzdHlwZTsKKyNkZWZpbmUgQ1JF
QVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgLi4uKSBjYXNlIG5hbWU6IHJldHVybiBiM3R5cGU7
CiBpbmxpbmUgQjM6OlR5cGUgdG9CM1R5cGUoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewpAQCAtMTYzLDcgKzE5MSw3IEBAIGlubGluZSBCMzo6VHlwZSB0b0IzVHlwZShUeXBlIHR5
cGUpCiB9CiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBp
ZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOworI2RlZmluZSBDUkVBVEVf
Q0FTRShuYW1lLCAuLi4pIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lOwogaW5saW5lIGNvbnN0IGNo
YXIqIG1ha2VTdHJpbmcoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTc0
LDcgKzIwMiw3IEBAIGlubGluZSBjb25zdCBjaGFyKiBtYWtlU3RyaW5nKFR5cGUgdHlwZSkKIH0K
ICN1bmRlZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5
cGUsIGluYykgY2FzZSBpZDogcmV0dXJuIGluYzsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwg
aWQsIGIzdHlwZSwgaW5jLCAuLi4pIGNhc2UgaWQ6IHJldHVybiBpbmM7CiBpbmxpbmUgaW50IGxp
bmVhcml6ZVR5cGUoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtMTg1LDcg
KzIxMyw3IEBAIGlubGluZSBpbnQgbGluZWFyaXplVHlwZShUeXBlIHR5cGUpCiB9CiAjdW5kZWYg
Q1JFQVRFX0NBU0UKIAotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMp
IGNhc2UgaW5jOiByZXR1cm4gbmFtZTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIz
dHlwZSwgaW5jLCAuLi4pIGNhc2UgaW5jOiByZXR1cm4gbmFtZTsKIGlubGluZSBUeXBlIGxpbmVh
cml6ZWRUb1R5cGUoaW50IGkpCiB7CiAgICAgc3dpdGNoIChpKSB7CkBAIC0yMDcsNyArMjM1LDcg
QEAgaW5saW5lIFR5cGUgbGluZWFyaXplZFRvVHlwZShpbnQgaSkKICAgICBGT1JfRUFDSF9XQVNN
X01FTU9SWV9TVE9SRV9PUChtYWNybykgXFwKICAgICBtYWNybyhFeHRUYWJsZSwgMHhGQywgT29w
cywgMCkKIAotI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBu
YW1lID0gaWQsCisjZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkLCAuLi4pIG5hbWUg
PSBpZCwKIAogZW51bSBPcFR5cGUgOiB1aW50OF90IHsKICAgICBGT1JfRUFDSF9XQVNNX09QKENS
RUFURV9FTlVNX1ZBTFVFKQpAQCAtMjQ2LDcgKzI3NCw3IEBAIGVudW0gY2xhc3MgRXh0VGFibGVP
cFR5cGUgOiB1aW50OF90IHsKIGlubGluZSBib29sIGlzQ29udHJvbE9wKE9wVHlwZSBvcCkKIHsK
ICAgICBzd2l0Y2ggKG9wKSB7Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBp
bmMpIGNhc2UgT3BUeXBlOjpuYW1lOgorI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNh
c2UgT3BUeXBlOjpuYW1lOgogICAgIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKENSRUFU
RV9DQVNFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjU5
LDcgKzI4Nyw3IEBAIGlubGluZSBib29sIGlzQ29udHJvbE9wKE9wVHlwZSBvcCkKIGlubGluZSBi
b29sIGlzU2ltcGxlKFVuYXJ5T3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAob3ApIHsKLSNkZWZp
bmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBVbmFyeU9wVHlwZTo6bmFt
ZToKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgLi4uKSBjYXNlIFVuYXJ5T3BUeXBlOjpuYW1l
OgogICAgIEZPUl9FQUNIX1dBU01fU0lNUExFX1VOQVJZX09QKENSRUFURV9DQVNFKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjcyLDcgKzMwMCw3IEBAIGlu
bGluZSBib29sIGlzU2ltcGxlKFVuYXJ5T3BUeXBlIG9wKQogaW5saW5lIGJvb2wgaXNTaW1wbGUo
QmluYXJ5T3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAob3ApIHsKLSNkZWZpbmUgQ1JFQVRFX0NB
U0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBCaW5hcnlPcFR5cGU6Om5hbWU6CisjZGVmaW5l
IENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBCaW5hcnlPcFR5cGU6Om5hbWU6CiAgICAgRk9S
X0VBQ0hfV0FTTV9TSU1QTEVfQklOQVJZX09QKENSRUFURV9DQVNFKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICN1bmRlZiBDUkVBVEVfQ0FTRQpAQCAtMjk0LDcgKzMyMiw3IEBAIGlubGluZSB1aW50
MzJfdCBtZW1vcnlMb2cyQWxpZ25tZW50KE9wVHlwZSBvcCkKICAgICByZXR1cm4gMDsKIH0KIAot
I2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgbmFtZTogcmV0
dXJuICNuYW1lOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgbmFtZTogcmV0
dXJuICNuYW1lOwogaW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoT3BUeXBlIG9wKQogewog
ICAgIHN3aXRjaCAob3ApIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggNzg2ZDA5NmI2NmU2ODJkZDY1NzdkMmRlMjY1MDgyYjcyMTE1
NmJjYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
Ci0KLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0jIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0j
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIFRoaXMgdG9vbCBoYXMg
YSBjb3VwbGUgb2YgaGVscGZ1bCBtYWNyb3MgdG8gcHJvY2VzcyBXYXNtIGZpbGVzIGZyb20gdGhl
IHdhc20uanNvbi4KLQotZnJvbSBnZW5lcmF0ZVdhc20gaW1wb3J0ICoKLWltcG9ydCBvcHRwYXJz
ZQotaW1wb3J0IHN5cwotCi1wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVz
YWdlOiAlcHJvZyA8d2FzbS5qc29uPiA8V2FzbU9wcy5oPiIpCi0ob3B0aW9ucywgYXJncykgPSBw
YXJzZXIucGFyc2VfYXJncyhzeXMuYXJndlswOl0pCi1pZiBsZW4oYXJncykgIT0gMzoKLSAgICBw
YXJzZXIuZXJyb3IocGFyc2VyLnVzYWdlKQotCi13YXNtID0gV2FzbShhcmdzWzBdLCBhcmdzWzFd
KQotb3Bjb2RlcyA9IHdhc20ub3Bjb2Rlcwotd2FzbVZhbGlkYXRlSW5saW5lc0hGaWxlID0gb3Bl
bihhcmdzWzJdLCAidyIpCi0KLQotZGVmIGNwcFR5cGUobmFtZSk6Ci0gICAgcmVzdWx0ID0gewot
ICAgICAgICAiYm9vbCI6ICJJMzIiLAotICAgICAgICAiYWRkciI6ICJJMzIiLAotICAgICAgICAi
aTMyIjogIkkzMiIsCi0gICAgICAgICJpNjQiOiAiSTY0IiwKLSAgICAgICAgImYzMiI6ICJGMzIi
LAotICAgICAgICAiZjY0IjogIkY2NCIsCi0gICAgfS5nZXQobmFtZSwgTm9uZSkKLSAgICBpZiBy
ZXN1bHQgPT0gTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biB0eXBlIG5h
bWU6ICIgKyBuYW1lKQotICAgIHJldHVybiByZXN1bHQKLQotCi1kZWYgdG9DcHAobmFtZSk6Ci0g
ICAgcmV0dXJuIHdhc20udG9DcHAobmFtZSkKLQotCi1kZWYgdW5hcnlNYWNybyhuYW1lKToKLSAg
ICBvcCA9IG9wY29kZXNbbmFtZV0KLSAgICByZXR1cm4gIiIiCi10ZW1wbGF0ZTw+IGF1dG8gVmFs
aWRhdGU6OmFkZE9wPE9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25U
eXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIi
KSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRh
dGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwotCi0g
ICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJl
dHVybiB7IH07Ci19Ci0iIiIKLQotCi1kZWYgYmluYXJ5TWFjcm8obmFtZSk6Ci0gICAgb3AgPSBv
cGNvZGVzW25hbWVdCi0gICAgcmV0dXJuICIiIgotdGVtcGxhdGU8PiBhdXRvIFZhbGlkYXRlOjph
ZGRPcDxPcFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiPihFeHByZXNzaW9uVHlwZSBsZWZ0
LCBFeHByZXNzaW9uVHlwZSByaWdodCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0
Ci17Ci0gICAgaWYgKFVOTElLRUxZKGxlZnQgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVy
Il1bMF0pICsgIiIiKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90
eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgbGVmdCB2YWx1ZSB0eXBl
IG1pc21hdGNoIik7Ci0KLSAgICBpZiAoVU5MSUtFTFkocmlnaHQgIT0gIiIiICsgY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMV0pICsgIiIiKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVz
dWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgcmln
aHQgdmFsdWUgdHlwZSBtaXNtYXRjaCIpOwotCi0gICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShv
cFsicmV0dXJuIl1bMF0pICsgIiIiOwotICAgIHJldHVybiB7IH07Ci19Ci0iIiIKLQotZGVmIGxv
YWRNYWNybyhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0KLSAgICByZXR1cm4gIiIiCi0g
ICAgY2FzZSBMb2FkT3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAgICAgICBp
ZiAoVU5MSUtFTFkocG9pbnRlciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkg
KyAiIiIpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBl
PigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgcG9pbnRlciB0eXBlIG1pc21h
dGNoIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gIiIiICsgY3BwVHlwZShvcFsicmV0dXJuIl1bMF0p
ICsgIiIiOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0iIiIKLQotCi1kZWYgc3RvcmVNYWNy
byhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0KLSAgICByZXR1cm4gIiIiCi0gICAgY2Fz
ZSBTdG9yZU9wVHlwZTo6IiIiICsgdG9DcHAobmFtZSkgKyAiIiI6IHsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHBvaW50ZXIgIT0gIiIiICsgY3BwVHlwZShvcFsicGFyYW1ldGVyIl1bMF0pICsgIiIi
KSkKLSAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFJlc3VsdDo6ZXJyb3JfdHlwZT4oInZh
bGlkYXRpb24gZmFpbGVkOiAiIiIgKyBuYW1lICsgIiIiIHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIp
OwotCi0gICAgICAgIGlmIChVTkxJS0VMWSh2YWx1ZSAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJh
bWV0ZXIiXVsxXSkgKyAiIiIpKQotICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0
OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6ICIiIiArIG5hbWUgKyAiIiIgdmFsdWUg
dHlwZSBtaXNtYXRjaCIpOwotCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfSIiIgotCi0KLXVu
YXJ5U3BlY2lhbGl6YXRpb25zID0gIiIuam9pbihbb3AgZm9yIG9wIGluIHdhc20ub3Bjb2RlSXRl
cmF0b3IoaXNVbmFyeSwgdW5hcnlNYWNybyldKQotYmluYXJ5U3BlY2lhbGl6YXRpb25zID0gIiIu
am9pbihbb3AgZm9yIG9wIGluIHdhc20ub3Bjb2RlSXRlcmF0b3IoaXNCaW5hcnksIGJpbmFyeU1h
Y3JvKV0pCi1sb2FkQ2FzZXMgPSAiIi5qb2luKFtvcCBmb3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVy
YXRvcihsYW1iZGEgb3A6IG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIGFuZCBsZW4ob3BbInJl
dHVybiJdKSA9PSAxLCBsb2FkTWFjcm8pXSkKLXN0b3JlQ2FzZXMgPSAiIi5qb2luKFtvcCBmb3Ig
b3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihsYW1iZGEgb3A6IG9wWyJjYXRlZ29yeSJdID09ICJt
ZW1vcnkiIGFuZCBsZW4ob3BbInJldHVybiJdKSA9PSAwLCBzdG9yZU1hY3JvKV0pCi0KLWNvbnRl
bnRzID0gd2FzbS5oZWFkZXIgKyAiIiIKLS8vIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBp
bmxpbmVkIGJ5IFdhc21WYWxpZGF0ZS5jcHAgb25seSEgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCBlbHNld2hlcmUuCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1J
R05PUkVfUkVUVVJOX1RZUEVfV0FSTklOR1NfQkVHSU4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewotCi0iIiIgKyB1bmFyeVNwZWNpYWxpemF0aW9ucyArIGJpbmFy
eVNwZWNpYWxpemF0aW9ucyArICIiIgotCi1hdXRvIFZhbGlkYXRlOjpsb2FkKExvYWRPcFR5cGUg
b3AsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQz
Ml90KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoVU5MSUtFTFkoIWhhc01lbW9yeSgpKSkKLSAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWls
ZWQ6IGxvYWQgaW5zdHJ1Y3Rpb24gd2l0aG91dCBtZW1vcnkiKTsKLQotICAgIHN3aXRjaCAob3Ap
IHsKLSIiIiArIGxvYWRDYXNlcyArICIiIgotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotYXV0byBWYWxpZGF0ZTo6c3RvcmUoU3RvcmVPcFR5cGUgb3AsIEV4cHJlc3Npb25U
eXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCkgLT4gUmVzdWx0Ci17
Ci0gICAgaWYgKFVOTElLRUxZKCFoYXNNZW1vcnkoKSkpCi0gICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPFJlc3VsdDo6ZXJyb3JfdHlwZT4oInZhbGlkYXRpb24gZmFpbGVkOiBzdG9yZSBpbnN0cnVj
dGlvbiB3aXRob3V0IG1lbW9yeSIpOwotCi0gICAgc3dpdGNoIChvcCkgewotIiIiICsgc3RvcmVD
YXNlcyArICIiIgotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KLQotI2lmIEFTU0VSVF9ESVNBQkxFRAotSUdOT1JFX1JFVFVS
Tl9UWVBFX1dBUk5JTkdTX0VORAotI2VuZGlmCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0KLSIiIgotCi13YXNtVmFsaWRhdGVJbmxpbmVzSEZpbGUud3JpdGUoY29udGVudHMpCi13
YXNtVmFsaWRhdGVJbmxpbmVzSEZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAppbmRleCAxMDkwODgzMWJiMjZkZGEyM2E4NjQ2
ZDc0MTBhZjYwY2Y3YWJiMDRiLi42YzBiN2Y4NjRmYThjZTIyZWRiN2ZmNTI2YjliYWE3ZWIxNDMz
OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmNwcApAQCAtMjI4LDcgKzIyOCw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlCiAgICAgICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpOwogICAgICAgICAgICAgcmVzb2x2ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBpbnN0
YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGNvZGVCbG9jay5yZWxlYXNlTm9uTnVsbCgpLCBy
ZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlKTsKICAgICAgICAgfSk7Ci0gICAgfSksICZXYXNtOjpj
cmVhdGVKU1RvV2FzbVdyYXBwZXIsICZXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbik7
CisgICAgfSkpOwogfQogCiBzdGF0aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UsIGNvbnN0
IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNWYWx1ZSBidWZmZXIsIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QsIFJlc29sdmUgcmVzb2x2ZUtpbmQsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1v
ZGUpCkBAIC0zMjgsMTIgKzMyOCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBhdXRvIFtiYXNlLCBieXRlU2l6ZV0gPSBnZXRXYXNtQnVmZmVy
RnJvbVZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgQkJRUGxhbiBw
bGFuKCZ2bS53YXNtQ29udGV4dCwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNl
cHRpb24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxNQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHBsYW4ucGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShi
YXNlLCBieXRlU2l6ZSkpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291
cmNlQnVmZmVyRnJvbVZhbHVlKHZtLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwor
ICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2
bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih2YWxpZGF0aW9uUmVzdWx0Lmhhc192YWx1ZSgpKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlU3RyZWFtaW5nSW50ZXJu
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA2MDAyOWVmZTBlODY3YTY5Yjg2ZDNk
Y2U1MmQ2NGIxMTBjNjlmZmUyLi45MGY2MmRjZTMxMTY3NWU0ZWI3ZTBjYjMyZjExYWM1NjBjMTk3
NmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eUluc3RhbmNlKEpTR2xvYmFsT2JqZWMKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVQcml2YXRlTW9kdWxlS2V5KCksIG1vZHVsZSwgaW1w
b3J0T2JqZWN0LCBpbnN0YW5jZVN0cnVjdHVyZSwgUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5t
b2R1bGUoKSksIFdhc206OkNyZWF0aW9uTW9kZTo6RnJvbUpTKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCwgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlU3luYygmdm0ud2FzbUNvbnRl
eHQsIGluc3RhbmNlLT5tZW1vcnlNb2RlKCksICZXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIs
ICZXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiksIGltcG9ydE9iamVjdCwgV2FzbTo6
Q3JlYXRpb25Nb2RlOjpGcm9tSlMpOworICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoJnZtLndhc21Db250
ZXh0LCBpbnN0YW5jZS0+bWVtb3J5TW9kZSgpKSwgaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlv
bk1vZGU6OkZyb21KUyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384859</attachid>
            <date>2019-12-04 16:03:59 -0800</date>
            <delta_ts>2019-12-04 19:57:30 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204474-20191204160358.patch</filename>
            <type>text/plain</type>
            <size>224264</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ODA5ZDNjZGEyNWY2MTRjYjZjNzNhZDc0YmU2NTQxYjU2MjQxN2YyLi4zMzc4ZTc4OGFkODNkMWE0
ZTc4NDM4ODY3MzVmMDkwZjBkZjIzNzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMzUgQEAKKzIwMTktMTEtMjIgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBWYWxpZGF0ZSBhbmQgZ2VuZXJhdGUgYnl0ZWNv
ZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNDQ3NAorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAg
ICAgIEN1cnJlbnRseSwgd2UgdHJhdmVyc2UgdGhlIFdlYkFzc2VtYmx5IGNvZGUgdHdpY2U6Cisg
ICAgICAgIC0gYSBmaXJzdCBzZXJpYWwgcGFzcyB0aGF0IHZhbGlkYXRlcyBhbGwgZnVuY3Rpb25z
CisgICAgICAgIC0gYSBzZWNvbmQgY29uY3VycmVudCBwYXNzIHRoYXQgY29tcGlsZXMgYWxsIGZ1
bmN0aW9ucy4KKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgbW92ZSB0aGUgdmFsaWRhdGlvbiBp
bnRvIHRoZSBwYXJzZXIgYW5kIHVwZGF0ZSB0aGUgTExJbnRQbGFuIHNvIHRoYXQgd2Ugbm8gbG9u
Z2VyIGhhdmUKKyAgICAgICAgdGhlIGZpcnN0IHBhc3MuIEluc3RlYWQsIHdlIG5vdyB2YWxpZGF0
ZSBjb25jdXJyZW50bHkgYXQgdGhlIHNhbWUgdGltZSB3ZSBnZW5lcmF0ZSBieXRlY29kZS4KKwor
ICAgICAgICBBcyBhIHJlc3VsdCwgd2hlbiB3ZSBjYWxsIFdlYkFzc2VtYmx5LnZhbGlkYXRlLCB3
ZSdsbCBzdGlsbCBnZW5lcmF0ZSBieXRlY29kZSBmb3IgdGhlIG1vZHVsZSwgYnV0IGl0IHdpbGwK
KyAgICAgICAgYmUgdGhyb3duIGF3YXkuIElmIHRoZSBtb2R1bGUgaXMgY29uc3RydWN0ZWQgd2l0
aCBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlLCB3ZSdsbCBhbHNvIGVhZ2VybHkgZ2VuZXJhdGUKKyAg
ICAgICAgYnl0ZWNvZGUsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGJ5dGVjb2RlIGlzIGtlcHQgYW5k
IHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbnRpYXRpb25zIG9mIHRoaXMgbW9kdWxlLgorCisgICAg
ICAgIFRoaXMgaXMgYSAxLjV4IHNwZWVkdXAgd2hlbiBjb21waWxpbmcgdGhlIFplbkdhcmRlbiBk
ZW1vLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiB3YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGE6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5jaFRhcmdldEFyaXR5IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJn
ZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtcHR5
RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0Q2Fs
bFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6dG1wc0Zv
clNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0UGF0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRSZWZJc051bGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpk
dW1wRXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNUb3BMZXZlbCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpzaWduYXR1cmUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aGFzTm9uVm9pZHJl
c3VsdCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xE
YXRhOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZFJlZklzTnVsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkVGFibGVTZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRUYWJsZUdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUZpbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJV
cENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTG9vcCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpkdW1wRXhwcmVzc2lvblN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6
Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5oOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6d29yayk6
CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206OkJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QkJRUGxhbjo6ZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSk6CisgICAgICAgICogd2FzbS9X
YXNtQkJRUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICogd2FzbS9XYXNtRW50cnlQbGFuLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RW50cnlQbGFuOjpFbnRyeVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpFbnRyeVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpFbnRyeVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpFbnRyeVBsYW46OmNv
bXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpFbnRyeVBsYW46OmNvbXBsZXRl
KToKKyAgICAgICAgKiB3YXNtL1dhc21FbnRyeVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpzcGxpdFN0YWNrKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OlR5cGVkRXhwcmVzc2lvbjo6VHlwZWRFeHBy
ZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OlR5cGVkRXhwcmVz
c2lvbjo6dHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpU
eXBlZEV4cHJlc3Npb246OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25QYXJzZXI6OlR5cGVkRXhwcmVzc2lvbjo6b3BlcmF0b3IgRXhwcmVzc2lvblR5cGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6VHlwZWRFeHByZXNzaW9uOjpv
cGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OmNv
bnRyb2xTdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjp2YWxpZGF0
aW9uRmFpbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpiaW5hcnlDYXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnVuYXJ5Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmNo
ZWNrQnJhbmNoVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnVuaWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbik6CisgICAgICAgICogd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6Q29udHJvbFR5cGU6OnRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OkNvbnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OkNvbnRyb2xUeXBlOjppc0lmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OkNvbnRyb2xUeXBlOjppc1RvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpzdGFja1NpemUgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnNpZ25hdHVyZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6YnJhbmNoVGFy
Z2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29u
dHJvbFR5cGU6OmJyYW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpt
YXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fscyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjpzcGxpdFN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21w
aWxlQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6TExJbnRH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9y
bWF0aW9uRm9yQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFk
ZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21MTEludFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dFBsYW46OkxMSW50UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpkaWRDb21wbGV0ZUNv
bXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjp3b3JrKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKToKKyAgICAg
ICAgKiB3YXNtL1dhc21MTEludFBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6Ok1vZHVsZSk6CisgICAgICAgIChKU0M6Oldh
c206Om1ha2VWYWxpZGF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVZhbGlk
YXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5j
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6Y29tcGlsZVN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6
OmNvbXBpbGVBc3luYyk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlBsYW4pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZG9udEZpbmFsaXpl
KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTElu
dDo6c2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21U
aHVua3MuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdh
c20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNvbnRy
b2xEYXRhOjppc0lmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNvbnRyb2xEYXRh
Ojppc1RvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNvbnRyb2xEYXRh
OjpibG9ja1R5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJv
bERhdGE6OnNpZ25hdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpD
b250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6Q29udHJvbERhdGE6OmJyYW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OlZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRUYWJsZUdldCk6CisgICAgICAg
IChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRUYWJsZVNldCk6CisgICAgICAgIChKU0M6Oldhc206
OlZhbGlkYXRlOjphZGRUYWJsZVNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
YWRkVGFibGVHcm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlRmls
bCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZWZJc051bGwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkUmVmRnVuYyk6CisgICAgICAgIChKU0M6Oldhc206
OlZhbGlkYXRlOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpnZXRM
b2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6Oldhc206OlZhbGlkYXRlOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpW
YWxpZGF0ZTo6c2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEJs
b2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZExvb3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFs
aWRhdGU6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEVsc2UpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VmFsaWRhdGU6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjph
ZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkR3Jvd01lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxp
ZGF0ZTo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRDYWxsSW5k
aXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6bG9hZCk6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjphZGRPcCk6CisgICAgICAgIChKU0M6Oldhc206OmR1bXBFeHByZXNzaW9uU3RhY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnZh
bGlkYXRlRnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAqIHdhc20vZ2VuZXJh
dGVXYXNtT3BzSGVhZGVyLnB5OgorICAgICAgICAoY3BwVHlwZSk6CisgICAgICAgIChjcHBNYWNy
byk6CisgICAgICAgIChvcGNvZGVNYWNyb2l6ZXIpOgorICAgICAgICAob3Bjb2RlV2l0aFR5cGVz
TWFjcm9pemVyKToKKyAgICAgICAgKG9wY29kZVdpdGhUeXBlc01hY3JvaXplci5tb2RpZmllcik6
CisgICAgICAgIChtZW1vcnlMb2FkTWFjcm9pemVyKToKKyAgICAgICAgKG1lbW9yeUxvYWRNYWNy
b2l6ZXIubW9kaWZpZXIpOgorICAgICAgICAobWVtb3J5U3RvcmVNYWNyb2l6ZXIpOgorICAgICAg
ICAobWVtb3J5U3RvcmVNYWNyb2l6ZXIubW9kaWZpZXIpOgorICAgICAgICAqIHdhc20vZ2VuZXJh
dGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAg
ICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKwogMjAxOS0xMS0yMiAgUGVyIEFybmUgVm9sbGFuICA8
cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNvbXBpbGUgZXJyb3IgaW4gcmVsZWFz
ZSBtb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGY4YzQxOTQwNjRm
ZjAzYTdjMDY4MDQwNmE0ZmNmNmVhZGM2MDQyMy4uOWE5MWJlMTc1ZmY0YTdjZjk1NzMxYzc5OTk4
MzkwOTEwZWE1Y2MyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMzY4
LDcgKzM2OCw2IEBAIG1hY3JvKEdFTkVSQVRFX1BZVEhPTiBfZ2VuZXJhdG9yIF9hZGRpdGlvbmFs
X2RlcHMgX2lucHV0IF9vdXRwdXQpCiAgICAgV0VCS0lUX0FERF9TT1VSQ0VfREVQRU5ERU5DSUVT
KCR7X2lucHV0fSAke19vdXRwdXR9KQogZW5kbWFjcm8oKQogR0VORVJBVEVfUFlUSE9OKCR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weSAke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc20ucHkgJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vV2FzbU9wcy5oKQotR0VORVJBVEVfUFlUSE9OKCR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAke0NN
QUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc20ucHkgJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vV2FzbVZhbGlkYXRlSW5saW5lcy5oKQogR0VORVJBVEVfUFlUSE9OKCR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxp
bmVzSGVhZGVyLnB5ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2Fz
bS5weSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XYXNtQjNJUkdlbmVyYXRvcklubGluZXMuaCkK
IAogIyBMVVQgZ2VuZXJhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDg2ZDdiNmM2NGE2YzNjOGRlNTJhMGQ2
MjI1NzI1NGFlMDZmODI2ZGEuLmFhYjljYTNkN2QxYjBjYzE4ZjU1NmQ5ZGMzMmZmN2Y1YzcyZGUy
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1p
bnB1dC54Y2ZpbGVsaXN0CkBAIC0xNzMsNyArMTczLDYgQEAgJChQUk9KRUNUX0RJUikvdWNkL2xh
bmd1YWdlLXN1YnRhZy1yZWdpc3RyeS50eHQKICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVX
YXNtLnB5CiAkKFBST0pFQ1RfRElSKS93YXNtL2dlbmVyYXRlV2FzbUIzSVJHZW5lcmF0b3JJbmxp
bmVzSGVhZGVyLnB5CiAkKFBST0pFQ1RfRElSKS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5w
eQotJChQUk9KRUNUX0RJUikvd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIu
cHkKICQoUFJPSkVDVF9ESVIpL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKICQoUFJPSkVDVF9E
SVIpL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKICQoUFJP
SkVDVF9ESVIpL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QKaW5kZXggMTRhYTQyMGNmM2Y0YzI3M2Q5YThhYWIzOTEwODMwZjk2YzhkNGY0My4u
ZDQxOTA3MGNhMWJkNGE5NzNlMDAzMDU0YWIzYjQzMGRjNGI3NDA5NCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApA
QCAtNjEsNyArNjEsNiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUvVW5pY29kZVBhdHRlcm5UYWJsZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dhc21CM0lSR2VuZXJhdG9ySW5saW5lcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2Fz
bUxMSW50R2VuZXJhdG9ySW5saW5lcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbU9wcy5oCi0kKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbVZhbGlkYXRlSW5saW5lcy5oCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JDb25zdHJ1Y3Rvci5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBl
Lmx1dC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGY1OTIxMmZmMDFjYzlkODJhMjEwMDViMjEy
ODU3MWU3ZDIzMDNlNzQuLjMwZGQyNThhNDBlZGM2MjQ3MGQ4OTMwMGRkOGVhMDczNGMzM2IyOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC02MCw3ICs2
MCw2IEBAIGFsbCA6IFwKICAgICBVbmljb2RlUGF0dGVyblRhYmxlcy5oIFwKICAgICB5YXJyL1lh
cnJDYW5vbmljYWxpemVVbmljb2RlLmNwcCBcCiAgICAgV2FzbU9wcy5oIFwKLSAgICBXYXNtVmFs
aWRhdGVJbmxpbmVzLmggXAogICAgIFdhc21CM0lSR2VuZXJhdG9ySW5saW5lcy5oIFwKICMKIApA
QCAtMzUyLDkgKzM1MSw2IEBAIEludGxDYW5vbmljYWxpemVMYW5ndWFnZS5oOiAkKEphdmFTY3Jp
cHRDb3JlKS9TY3JpcHRzL2dlbmVyYXRlSW50bENhbm9uaWNhbGl6ZUxhCiBXYXNtT3BzLmg6ICQo
SmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5ICQoSmF2YVNjcmlw
dENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtLnB5ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vd2FzbS5q
c29uCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVh
ZGVyLnB5ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vd2FzbS5qc29uIC4vV2FzbU9wcy5oCiAKLVdh
c21WYWxpZGF0ZUlubGluZXMuaDogJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21W
YWxpZGF0ZUlubGluZXNIZWFkZXIucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdh
c20ucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS93YXNtLmpzb24KLQkkKFBZVEhPTikgJChKYXZh
U2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkgJChK
YXZhU2NyaXB0Q29yZSkvd2FzbS93YXNtLmpzb24gLi9XYXNtVmFsaWRhdGVJbmxpbmVzLmgKLQog
V2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzLmg6ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJh
dGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkgJChKYXZhU2NyaXB0Q29yZSkvd2Fz
bS9nZW5lcmF0ZVdhc20ucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS93YXNtLmpzb24KIAkkKFBZ
VEhPTikgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21CM0lSR2VuZXJhdG9ySW5s
aW5lc0hlYWRlci5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL3dhc20uanNvbiAuL1dhc21CM0lS
R2VuZXJhdG9ySW5saW5lcy5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IDYzYzY2OGZhZmE0MDc2NTUzMzAxNWMwMTViZGMz
MjdiMWZlYTgzYTguLjI1NGY1NTljOGVmNjllYzY5NDMxNTA1OWU0NzRkZDcwYmUxZDhlNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNw
cApAQCAtMTI5LDEyICsxMjksMTMgQEAgcHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKIH07CiAK
LXVzaW5nIFR5cGVkVG1wcyA9IFZlY3RvcjxUeXBlZFRtcCwgMT47Ci0KIGNsYXNzIEFpcklSR2Vu
ZXJhdG9yIHsKIHB1YmxpYzoKKyAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFR5cGVkVG1wOwor
ICAgIHVzaW5nIFJlc3VsdExpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDg+OworCiAgICAg
c3RydWN0IENvbnRyb2xEYXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEoQjM6Ok9yaWdpbiBvcmln
aW4sIEJsb2NrU2lnbmF0dXJlIHJlc3VsdCwgVHlwZWRUbXBzIHJlc3VsdFRtcHMsIEJsb2NrVHlw
ZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBu
dWxscHRyKQorICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9yaWdpbiwgQmxvY2tTaWdu
YXR1cmUgcmVzdWx0LCBSZXN1bHRMaXN0IHJlc3VsdFRtcHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwgPSBudWxscHRyKQogICAg
ICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCiAgICAgICAgICAgICAsIGNvbnRpbnVh
dGlvbihjb250aW51YXRpb24pCiAgICAgICAgICAgICAsIHNwZWNpYWwoc3BlY2lhbCkKQEAgLTE0
OCw2ICsxNDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHN0
YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRy
b2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBp
c1RvcExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJs
b2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKwogICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChi
bG9ja1R5cGUoKSkgewpAQCAtMTk0LDMxICsxOTgsNDYgQEAgcHVibGljOgogICAgICAgICAgICAg
c3BlY2lhbCA9IG51bGxwdHI7CiAgICAgICAgIH0KIAorICAgICAgICBTaWduYXR1cmVBcmdDb3Vu
dCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChi
bG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
dHVyblR5cGUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBl
LT5yZXR1cm5Db3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgVHlwZSBicmFuY2hUYXJnZXRU
eXBlKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwg
YnJhbmNoVGFyZ2V0QXJpdHkoKSk7CisgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5hcmd1bWVu
dChpKTsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpOworICAg
ICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQWlySVJHZW5lcmF0
b3I7CiAgICAgICAgIEJsb2NrVHlwZSBjb250cm9sQmxvY2tUeXBlOwogICAgICAgICBCYXNpY0Js
b2NrKiBjb250aW51YXRpb247CiAgICAgICAgIEJhc2ljQmxvY2sqIHNwZWNpYWw7Ci0gICAgICAg
IFR5cGVkVG1wcyByZXN1bHRzOworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAg
IEJsb2NrU2lnbmF0dXJlIHJldHVyblR5cGU7CiAgICAgfTsKIAotICAgIHVzaW5nIEV4cHJlc3Np
b25UeXBlID0gVHlwZWRUbXA7CiAgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsK
LSAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47Ci0g
ICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKLSAgICB1c2luZyBSZXN1bHRMaXN0ID0g
VHlwZWRUbXBzOwotICAgIHVzaW5nIENvbnRyb2xFbnRyeSA9IEZ1bmN0aW9uUGFyc2VyPEFpcklS
R2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OwogCi0gICAgc3RhdGljIEV4cHJlc3Npb25UeXBlIGVt
cHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIHsgfTsgfTsKLSAgICBTdGFjayBjcmVhdGVTdGFjaygp
IHsgcmV0dXJuIFN0YWNrKCk7IH0KLSAgICBib29sIGlzQ29udHJvbFR5cGVJZihjb25zdCBDb250
cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6OklmOyB9CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8QWlySVJH
ZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisgICAgdXNpbmcgQ29udHJvbFN0YWNrID0gRnVuY3Rp
b25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sU3RhY2s7CisgICAgdXNpbmcgU3RhY2sg
PSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OlN0YWNrOworICAgIHVzaW5nIFR5cGVk
RXhwcmVzc2lvbiA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6VHlwZWRFeHByZXNz
aW9uOwogCiAgICAgdXNpbmcgRXJyb3JUeXBlID0gU3RyaW5nOwogICAgIHVzaW5nIFVuZXhwZWN0
ZWRSZXN1bHQgPSBVbmV4cGVjdGVkPEVycm9yVHlwZT47CiAgICAgdXNpbmcgUmVzdWx0ID0gRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+OwogICAg
IHVzaW5nIFBhcnRpYWxSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+OwogCisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxSZXN1bHRMaXN0LCBGdW5jdGlvblBhcnNlcjxB
aXJJUkdlbmVyYXRvcj46OlJlc3VsdExpc3Q+KTsKKworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlw
ZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiB7IH07IH07CisKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewpAQCAtMjMxLDcgKzI1
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVy
ZSYpOworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlBy
b2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNv
bnN0IFNpZ25hdHVyZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI0MCwxNSArMjU5LDE1
IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBhZGRCb3R0b20oQmFzaWNCbG9jayosIFR5
cGUpOwogCiAgICAgLy8gUmVmZXJlbmNlcwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklz
TnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmRnVuYyh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICAvLyBUYWJsZXMKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdldCh1bnNpZ25lZCwgRXhwcmVzc2lv
blR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUm
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFRhYmxlR2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBpbmRleCwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
VGFibGVTaXplKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdyb3codW5zaWduZWQsIEV4cHJlc3Np
b25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlRmlsbCh1
bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4
cHJlc3Npb25UeXBlJiBjb3VudCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVGaWxsKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBv
ZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KTsKIAogICAg
IC8vIExvY2FscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGdldExvY2Fs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTI3OSw3ICsyOTgs
NyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxz
ZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0
YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0
IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29u
c3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgVmVjdG9yPENv
bnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0VGFyZ2V0cywgY29uc3Qg
U3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CkBA
IC0yODgsMjkgKzMwNywyMSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJikgeyByZXR1
cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJl
c3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRp
cmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+JiByZXN1bHRzKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxl
ZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKLSAgICBC
Mzo6UGF0Y2hwb2ludFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50
KEJhc2ljQmxvY2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5
cGUsIDE+JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29u
c3RyYWluZWRUbXA+JiYgZXh0cmFBcmdzID0geyB9KTsKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVl
KiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqLCBjb25z
dCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlw
ZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0cmFBcmdzID0geyB9KTsK
IAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFpcjo6T3Bjb2RlLCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihCMzo6QWlyOjpPcGNvZGUs
IEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9pbnRBYnMoQjM6OkFpcjo6
T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAg
ICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3AoVHlwZSwgQjM6OkFpcjo6T3Bj
b2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJocywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CiAKLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4m
IGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBk
dW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spOwog
ICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiogcGFyc2Vy
KSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2Fs
cygpIHsgfQogICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAotICAgIHN0YXRp
YyBWZWN0b3I8VG1wPiB0b1RtcFZlY3Rvcihjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiB2ZWN0b3Ip
Ci0gICAgewotICAgICAgICBWZWN0b3I8VG1wPiByZXN1bHQ7Ci0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgaXRlbSA6IHZlY3RvcikKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS50bXAo
KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgY29uc3QgQmFnPEIzOjpQ
YXRjaHBvaW50VmFsdWUqPiYgcGF0Y2hwb2ludHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fcGF0Y2hwb2ludHM7CkBAIC00MDEsOSArNDEyLDkgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgIH0KIAotICAgIFR5cGVkVG1wcyB0bXBzRm9yU2lnbmF0dXJlKEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSkKKyAgICBSZXN1bHRMaXN0IHRtcHNGb3JTaWduYXR1cmUoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlKQogICAgIHsKLSAgICAgICAgVHlwZWRUbXBzIHJlc3VsdChzaWduYXR1cmUt
PnJldHVybkNvdW50KCkpOworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdChzaWduYXR1cmUtPnJl
dHVybkNvdW50KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJl
LT5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgICAgICByZXN1bHRbaV0gPSB0bXBGb3JUeXBl
KHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00
MjYsMTYgKzQzNywxNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5Bcmdz
PgogICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFzaWNCbG9jaywgQjM6OlBh
dGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQsIEFyZ3MuLi4gdGhlQXJncykKICAgICB7
Ci0gICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBhdGNoLCBWZWN0b3I8VG1wLCAx
PiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNpemVvZi4uLihBcmdzKT46OmZy
b20odGhlQXJncy4uLikpOworICAgICAgICBlbWl0UGF0Y2hwb2ludChiYXNpY0Jsb2NrLCBwYXRj
aCwgVmVjdG9yPFRtcCwgOD4geyByZXN1bHQgfSwgVmVjdG9yPENvbnN0cmFpbmVkVG1wLCBzaXpl
b2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsKICAgICB9CiAKICAgICB2b2lkIGVtaXRQ
YXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBh
dGNoLCBUbXAgcmVzdWx0KQogICAgIHsKLSAgICAgICAgZW1pdFBhdGNocG9pbnQoYmFzaWNCbG9j
aywgcGF0Y2gsIFZlY3RvcjxUbXAsIDE+IHsgcmVzdWx0IH0sIFZlY3RvcjxDb25zdHJhaW5lZFRt
cD4oKSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBhdGNoLCBWZWN0b3I8
VG1wLCA4PiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+KCkpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUbXBUeXBlLCBzaXplX3QgaW5saW5lU2l6ZT4K
LSAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRj
aHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8UmVzdWx0VG1wVHlwZSwgMT4mICByZXN1
bHRzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKKyAgICB2b2lk
IGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRjaHBvaW50VmFs
dWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8UmVzdWx0VG1wVHlwZSwgOD4mICByZXN1bHRzLCBWZWN0
b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKICAgICB7CiAgICAgICAgIGlm
ICghbV9wYXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAgIG1fcGF0Y2hwb2ludFNwZWNpYWwg
PSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2NvZGUuYWRkU3BlY2lhbCht
YWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwpAQCAtNjMzLDcgKzY0NCw3IEBA
IHByaXZhdGU6CiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChMb2FkT3BUeXBlLCBFeHBy
ZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwogICAgIHZvaWQgZW1pdFN0b3Jl
T3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBlIHZh
bHVlLCB1aW50MzJfdCBvZmZzZXQpOwogCi0gICAgdm9pZCB1bmlmeShjb25zdCBFeHByZXNzaW9u
VHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKTsKKyAgICB2b2lkIHVuaWZ5
KGNvbnN0IEV4cHJlc3Npb25UeXBlIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKTsK
ICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNrJiByZXN1bHRTdGFjaywg
Y29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5
cGU+CkBAIC03NDMsNyArNzU0LDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ssIFR5cGVkVG1wIGluc3QKICAgICBlbWl0
UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKIH0KIAotQWly
SVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9u
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0
aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKQorQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFs
RnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQog
ICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVuY3Rpb25J
bmRleChmdW5jdGlvbkluZGV4KQpAQCAtNzcxLDkgKzc4Miw2IEBAIEFpcklSR2VuZXJhdG9yOjpB
aXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVy
ZSYgcHJvCiAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX21lbW9yeVNpemVHUFIpOwogICAg
IH0KIAotICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgICAgIFRodW5rczo6c2luZ2xl
dG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbik7Ci0KICAgICBp
ZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKICAgICAgICAgY2Fz
ZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKQEAgLTEwNDUsNyArMTA1Myw3IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkg
LT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiBy
ZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJlZklzTnVs
bChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
bFJlc3VsdAogewogICAgIEFTU0VSVCh2YWx1ZS50bXAoKSk7CiAgICAgcmVzdWx0ID0gdG1wRm9y
VHlwZShUeXBlOjpJMzIpOwpAQCAtMTA2Niw3ICsxMDc0LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGkKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJs
ZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgLy8gRklYTUU6IEVt
aXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTg1MDY+LgogICAgIEFTU0VSVChpbmRleC50bXAoKSk7CkBAIC0xMDgzLDcgKzEwOTEsNyBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgaW5kZXgsIEV4cAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBl
JiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9u
VHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgQVNTRVJUKGluZGV4LnRtcCgpKTsKQEAgLTExMTIs
NyArMTEyMCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCB0
YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRh
YmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNz
aW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIEFTU0VSVChmaWxsLnRtcCgpKTsKICAgICBBU1NFUlQoaXNTdWJ0eXBlKGZpbGwudHlw
ZSgpLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkpKTsKQEAgLTExMjUsNyAr
MTEzMyw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJs
ZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlw
ZSYgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxl
RmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Np
b25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgQVNTRVJUKGZpbGwudG1wKCkpOwogICAgIEFTU0VSVChpc1N1YnR5cGUoZmlsbC50eXBlKCks
IG1faW5mby50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSkpOwpAQCAtMTcxNCw5ICsxNzIy
LDkgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBDaGVjayh1aW50MzJfdCBs
b29wSW5kZXgpCiAgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxzKQogICAgICAgICBwYXRj
aEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGxvY2FsLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1f
cGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7Ci0gICAgICAg
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNr
KClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKLSAgICAgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFjaykKLSAgICAgICAgICAgIHBhdGNoQXJncy5hcHBl
bmQoQ29uc3RyYWluZWRUbXAodmFsdWUsIEIzOjpWYWx1ZVJlcDo6Q29sZEFueSkpOworICAgICAg
ICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xTdGFjaygpW2NvbnRy
b2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAgIGZvciAoVHlwZWRFeHBy
ZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAgICAgcGF0Y2hBcmdzLmFw
cGVuZChDb25zdHJhaW5lZFRtcCh2YWx1ZS52YWx1ZSgpLCBCMzo6VmFsdWVSZXA6OkNvbGRBbnkp
KTsKICAgICB9CiAKICAgICBUaWVyVXBDb3VudDo6VHJpZ2dlclJlYXNvbiogZm9yY2VFbnRyeVRy
aWdnZXIgPSAmKG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCkubGFzdCgpKTsKQEAgLTE3NDUs
NyArMTc1Myw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWlu
dDMyX3QgbG9vcEluZGV4KQogICAgICAgICB9KTsKICAgICB9KTsKIAotICAgIGVtaXRQYXRjaHBv
aW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgMT4oKSwgV1RGTW92ZShwYXRj
aEFyZ3MpKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFJlc3Vs
dExpc3QgeyB9LCBXVEZNb3ZlKHBhdGNoQXJncykpOwogfQogCiBBaXJJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSkKQEAgLTE3NTgsOCArMTc2NiwxMiBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRMb29w
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogICAg
IEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsKICAgICBCYXNpY0Jsb2NrKiBj
b250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKIAotICAgIG5ld1N0YWNrID0gc3BsaXRT
dGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKLSAgICBibG9jayA9IENvbnRyb2xEYXRh
KG9yaWdpbigpLCBzaWduYXR1cmUsIG5ld1N0YWNrLCBCbG9ja1R5cGU6Okxvb3AsIGNvbnRpbnVh
dGlvbiwgYm9keSk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBu
ZXdTdGFjayk7CisgICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAgIHJlc3VsdHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShuZXdTdGFjay5zaXplKCkpOworICAgIGZvciAoYXV0byBpdGVtIDogbmV3
U3RhY2spCisgICAgICAgIHJlc3VsdHMudW5jaGVja2VkQXBwZW5kKGl0ZW0pOworICAgIGJsb2Nr
ID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgV1RGTW92ZShyZXN1bHRzKSwgQmxv
Y2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOwogCiAgICAgYXBwZW5kKEp1bXApOwog
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOwpAQCAtMTc3Miw3ICsxNzg0
LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KIAogYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
QmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bnRyb2xUeXBlJiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwor
ICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAg
IG5ld0Jsb2NrID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgdG1wc0ZvclNpZ25h
dHVyZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OkJsb2NrLCBtX2NvZGUuYWRkQmxvY2soKSk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE3ODgsNyArMTgwMCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlLCBTCiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnModGFrZW4sIG5vdFRha2Vu
KTsKIAogICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0
YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJl
LCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKG9y
aWdpbigpLCBzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUoc2lnbmF0dXJlKSwgQmxvY2tUeXBl
OjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE4
MDksNyArMTgyMSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxl
KENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRh
LCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRhdGEsIGNv
bnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBDYWxsSW5m
b3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9y
bWF0aW9uRm9yKCpkYXRhLnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6Q2FsbGVlKTsKICAgICBpZiAo
IXdhc21DYWxsSW5mby5yZXN1bHRzLnNpemUoKSkgewpAQCAtMTg0Nyw3ICsxODU5LDcgQEAgYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25z
dCBFeHByZXNzaW9uTGlzdCYgcmUKICAgICAgICAgcmV0dXJuQ29uc3RyYWludHMuYXBwZW5kKENv
bnN0cmFpbmVkVG1wKHRtcCwgd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV0pKTsKICAgICB9CiAKLSAg
ICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDE+KCks
IFdURk1vdmUocmV0dXJuQ29uc3RyYWludHMpKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJl
bnRCbG9jaywgcGF0Y2gsIFJlc3VsdExpc3QgeyB9LCBXVEZNb3ZlKHJldHVybkNvbnN0cmFpbnRz
KSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMTk2MiwxMiArMTk3NCwxNCBAQCBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNv
bnN0IFN0YWNrJiBleHByZQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5z
aWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaSA8IGV4
cHJlc3Npb25TdGFjay5zaXplKCkpCiAgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGFk
ZEJvdHRvbShtX2N1cnJlbnRCbG9jaywgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSkp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgVHlwZSB0eXBlID0gZGF0YS5z
aWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3Nl
ZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQodHlwZSwgYWRkQm90dG9tKG1fY3Vy
cmVudEJsb2NrLCB0eXBlKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlc3VsdCA6IGRhdGEucmVzdWx0cykKLSAgICAg
ICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291
bnQoKTsgKytpKQorICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29u
c3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSksIGRhdGEucmVz
dWx0c1tpXSk7CiAgICAgfQogCiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29k
ZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVy
ZS4KQEAgLTE5NzcsNyArMTk5MSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotQjM6OlBhdGNocG9pbnRWYWx1ZSogQWlySVJHZW5lcmF0b3I6OmVtaXRD
YWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJlc3VsdHMsIGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4mJiBwYXRjaEFyZ3MpCitC
Mzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJh
c2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0
TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPiYmIHBhdGNoQXJncykKIHsKICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0
Y2hwb2ludCh0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKSk7CiAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMjAwMiw3ICsyMDE2LDcgQEAgQjM6OlBhdGNo
cG9pbnRWYWx1ZSogQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2Nr
KiBibG9jaywgY29uc3QKICAgICByZXR1cm4gcGF0Y2hwb2ludDsKIH0KIAotYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgVmVjdG9yPEV4cHJlc3Np
b25UeXBlLCAxPiYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
ID09IGFyZ3Muc2l6ZSgpKTsKIApAQCAtMjA5Miw3ICsyMTA2LDcgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwg
MT4mIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50
YWtlTGFzdCgpOwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Mu
c2l6ZSgpKTsKQEAgLTIyNDgsNyArMjI2Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBBaXJJUkdlbmVyYXRvcjo6dW5pZnkoY29uc3QgRXhw
cmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNvdXJjZSkKK3ZvaWQgQWly
SVJHZW5lcmF0b3I6OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIGRzdCwgY29uc3QgRXhwcmVz
c2lvblR5cGUgc291cmNlKQogewogICAgIEFTU0VSVChpc1N1YnR5cGUoc291cmNlLnR5cGUoKSwg
ZHN0LnR5cGUoKSkpOwogICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5cGUoZHN0LnR5cGUoKSks
IHNvdXJjZSwgZHN0KTsKQEAgLTIyNjYsMTAgKzIyODAsMTAgQEAgc3RhdGljIHZvaWQgZHVtcEV4
cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBBaXJJUkdlbmVy
YXRvcjoKIHsKICAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0YWNrOiIpOwogICAgIGZv
ciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKLSAgICAgICAgZGF0
YUxvZyhjb21tYSwgZXhwcmVzc2lvbik7CisgICAgICAgIGRhdGFMb2coY29tbWEsIGV4cHJlc3Np
b24udmFsdWUoKSk7CiB9CiAKLXZvaWQgQWlySVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9y
PENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIHN0YWNrKQordm9pZCBB
aXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBDb250cm9sU3RhY2smIGNvbnRyb2xTdGFjaywgY29u
c3QgU3RhY2sqIHN0YWNrKQogewogICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBHcmFwaDoiKTsK
ICAgICBkYXRhTG9nKG1fY29kZSk7CkBAIC0yMjkxLDcgKzIzMDUsNyBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCiAgICAgcmV0dXJuIEIzOjpPcmlnaW4oKTsK
IH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4
dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlv
biB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9y
eU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkK
IHsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApA
QCAtMjMxNCw3ICsyMzI4LDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGkKICAgICAKICAgICBw
cm9jZWR1cmUuc2V0T3B0TGV2ZWwoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJPcHRpbWl6YXRp
b25MZXZlbCgpKTsKIAotICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2Nl
ZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rp
b25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgQWly
SVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIHNpZ25h
dHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVy
YXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1
cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkp
OwogCkBAIC0yOTAzLDcgKzI5MTcsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHByZXNzaW9uVAogICAgIH0p
OwogCiAgICAgcmVzdWx0ID0gZzY0KCk7Ci0gICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50Qmxv
Y2ssIHBhdGNocG9pbnQsIFZlY3RvcjxUbXAsIDE+IHsgcmVzdWx0IH0sIFdURk1vdmUoYXJncykp
OworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCBWZWN0b3I8
VHlwZWRUbXAsIDg+IHsgcmVzdWx0IH0sIFdURk1vdmUoYXJncykpOwogICAgIHJldHVybiB7IH07
CiB9CiAKQEAgLTI5NzgsNyArMjk5Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJlc3Npb25UCiAgICAg
fSk7CiAKICAgICByZXN1bHQgPSBnNjQoKTsKLSAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRC
bG9jaywgcGF0Y2hwb2ludCwgVmVjdG9yPFRtcCwgMT4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdz
KSk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIFZlY3Rv
cjxUeXBlZFRtcCwgOD4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdzKSk7CiAKICAgICByZXR1cm4g
eyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuaAppbmRleCAzMzFiNGIwYWQzMTNlNjIzY2E3ZmY0YmQ4ZGU4YTE1ODZmYzdkNTA1Li4xYzNm
NWJhZjA5MTZkNGNhNzhjNWZiYjRiM2U2MjdjNzIzODQ1Zjg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBp
bGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
TWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0
ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVt
b3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0cik7
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA5MDRkNjk0YzVhZTZkZGI3ZjI3
MTBlNzQxNGViOTJmNTU1MjMxZWZjLi5iZDMyOGViNGJiNDkzNTNmNDZmZjhkYmM1MTAyNDczYjQz
ZDIyYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCkBAIC04NiwxMiArODYsMTMgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIAogY2xhc3MgQjNJUkdlbmVyYXRvciB7CiBwdWJsaWM6Ci0gICAgdXNpbmcg
UmVzdWx0TGlzdCA9IFZlY3RvcjxWYWx1ZSosIDE+OyAvLyBWYWx1ZSBtdXN0IGJlIGEgUGhpCisg
ICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYWx1ZSo7CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9
IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgOD47CiAKICAgICBzdHJ1Y3QgQ29udHJvbERhdGEgewog
ICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdpbiBvcmlnaW4sIEJsb2Nr
U2lnbmF0dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCiAgICAgICAgICAgICA6IGNvbnRy
b2xCbG9ja1R5cGUodHlwZSkKLSAgICAgICAgICAgICwgc2lnbmF0dXJlKHNpZ25hdHVyZSkKKyAg
ICAgICAgICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQogICAgICAgICAgICAgLCBjb250aW51
YXRpb24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFsKHNwZWNpYWwpCiAgICAg
ICAgIHsKQEAgLTEwOCw2ICsxMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQog
CisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wpIHsg
cmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgICAgICBz
dGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVy
biBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKwogICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgc3dpdGNoIChibG9ja1R5cGUoKSkgewpAQCAtMTMzLDcgKzEzNyw5IEBAIHB1YmxpYzoKIAog
ICAgICAgICBCbG9ja1R5cGUgYmxvY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gY29udHJvbEJsb2Nr
VHlwZTsgfQogCi0gICAgICAgIGJvb2wgaGFzTm9uVm9pZHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IHNpZ25hdHVyZS0+cmV0dXJuc1ZvaWQoKTsgfQorICAgICAgICBCbG9ja1NpZ25hdHVyZSBzaWdu
YXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQorCisgICAgICAgIGJvb2wgaGFz
Tm9uVm9pZHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5zVm9pZCgp
OyB9CiAKICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQogICAgICAg
ICB7CkBAIC0xNDksMjkgKzE1NSw0NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzcGVjaWFsID0g
bnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJyYW5jaFRh
cmdldEFyaXR5KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJu
Q291bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNp
Z25lZCBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRh
cmdldEFyaXR5KCkpOworICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6
TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOworICAgICAgICB9
CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQjNJUkdlbmVyYXRvcjsKICAg
ICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7Ci0gICAgICAgIEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZTsKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgbV9zaWduYXR1cmU7CiAgICAgICAg
IEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKICAgICAgICAgQmFzaWNCbG9jayogc3BlY2lhbDsK
ICAgICAgICAgUmVzdWx0TGlzdCBwaGlzOwogICAgIH07CiAKLSAgICB1c2luZyBFeHByZXNzaW9u
VHlwZSA9IFZhbHVlKjsKKyAgICB1c2luZyBDb250cm9sVHlwZSA9IENvbnRyb2xEYXRhOwogICAg
IHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPjsKLSAgICB1
c2luZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0OwogCi0gICAgdXNpbmcgQ29udHJvbFR5cGUgPSBD
b250cm9sRGF0YTsKICAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxCM0lS
R2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OworICAgIHVzaW5nIENvbnRyb2xTdGFjayA9IEZ1bmN0
aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250cm9sU3RhY2s7CisgICAgdXNpbmcgU3RhY2sg
PSBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPjo6U3RhY2s7CisgICAgdXNpbmcgVHlwZWRF
eHByZXNzaW9uID0gRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46OlR5cGVkRXhwcmVzc2lv
bjsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9u
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIGJvb2wgaXNDb250cm9sVHlwZUlmKGNvbnN0IENv
bnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6SWY7IH0KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PFJlc3VsdExpc3Qs
IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpSZXN1bHRMaXN0Pik7CiAKICAgICB0eXBl
ZGVmIFN0cmluZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4g
VW5leHBlY3RlZFJlc3VsdDsKICAgICB0eXBlZGVmIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlwZWRlZiBFeHBlY3Rl
ZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CisKKyAgICBzdGF0aWMgRXhwcmVzc2lv
blR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfTsKKwogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKICAgICB7CkBAIC0x
ODMsMjIgKzIwNywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FS
R1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24q
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBU
aHJvd1dhc21FeGNlcHRpb24pOworICAgIEIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQg
bG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50Kik7CiAKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3Qp
OwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsKIAogICAg
IC8vIFJlZmVyZW5jZXMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZWZJc051bGwoRXhwcmVzc2lvblR5cGUmIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhwcmVz
c2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOwogCiAgICAgLy8gVGFibGVzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhw
cmVzc2lvblR5cGUmIHZhbHVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRUYWJsZUdldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgaW5kZXgsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRh
YmxlU2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlU2l6ZSh1
bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgZmls
bCwgRXhwcmVzc2lvblR5cGUmIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4
cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlw
ZSYgY291bnQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxl
R3Jvdyh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5cGUgZGVsdGEs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFRhYmxlRmlsbCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeHBy
ZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBjb3VudCk7CiAgICAgLy8gTG9jYWxzCiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9jYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7
CkBAIC0yMjksNyArMjUzLDcgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xE
YXRhJik7CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4o
Y29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZXR1cm4oY29uc3QgQ29u
dHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlw
ZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250cm9sRGF0YSYgZGVmYXVs
dFRhcmdldHMsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRyeSYsIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2spOwpAQCAtMjQzLDcgKzI2Nyw3IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwogICAgIEIzOjpWYWx1ZSog
Y3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIE9yaWdpbiwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQo
UGF0Y2hwb2ludFZhbHVlKik+JiBwYXRjaHBvaW50RnVuY3Rvcik7CiAKLSAgICB2b2lkIGR1bXAo
Y29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4
cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0
IFN0YWNrKiBleHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFy
c2VyPEIzSVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAgICAg
dm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZy
b21TdGFjaygpIHsgfQpAQCAtMzYyLDcgKzM4Niw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9j
CiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9u
KiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9y
eU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0
aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitCM0lSR2VuZXJh
dG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9k
ZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJ
bmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwKQogICAgIDogbV9pbmZvKGluZm8p
CiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9u
TW9kZSkKQEAgLTM5Myw5ICs0MTcsNiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAg
ICBtX3Byb2MucGluUmVnaXN0ZXIobV9tZW1vcnlTaXplR1BSKTsKICAgICB9CiAKLSAgICBpZiAo
dGhyb3dXYXNtRXhjZXB0aW9uKQotICAgICAgICBUaHVua3M6OnNpbmdsZXRvbigpLnNldFRocm93
V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOwotCiAgICAgaWYgKGluZm8ubWVtb3J5
KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUikgewogICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwpAQCAtNjY3LDEzICs2ODgs
MTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
UmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRl
eCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8v
IEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoQW55cmVmKSwgb3JpZ2luKCksCkBAIC02OTIs
NyArNzEzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJs
ZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHIKICAgICByZXR1cm4geyB9OwogfQog
Ci1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVlKSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICBhdXRvIHNob3VsZFRocm93ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQzMiwg
b3JpZ2luKCksCkBAIC03MzIsNyArNzUzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZVNpemUodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4KICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNp
Z25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwcmVzc2lvblR5cGUmIGRl
bHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlw
ZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShJMzIpLCBvcmlnaW4oKSwKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZvcGVyYXRpb25XYXNtVGFibGVHcm93LCBCM0NDYWxsUHRy
VGFnKSksCkBAIC03NDEsNyArNzYyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdy
b3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHIKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25l
ZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSYgZmls
bCwgRXhwcmVzc2lvblR5cGUmIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBv
ZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoSTMyKSwgb3JpZ2luKCksCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
dGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPigmb3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgQjNDQ2FsbFB0
clRhZykpLApAQCAtMTIwMiwxMiArMTIyMywxMiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRM
b29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4KQogCiAgICAgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiBzdGFja21hcDsKICAgICBmb3IgKGF1dG8mIGxvY2FsIDogbV9sb2NhbHMpIHsKLSAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbiwgbG9jYWwpOworICAgICAgICBW
YWx1ZSogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPiht
X3Byb2MsIEIzOjpHZXQsIG9yaWdpbiwgbG9jYWwpOwogICAgICAgICBzdGFja21hcC5hcHBlbmQo
cmVzdWx0KTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250
cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRl
eCkgewogICAgICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0
YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsKLSAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAgIGZvciAoVHlwZWRFeHBy
ZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQogICAgICAgICAgICAgc3RhY2ttYXAuYXBw
ZW5kKHZhbHVlKTsKICAgICB9CiAKQEAgLTEyNjUsMTIgKzEyODYsMTIgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDb24KICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0
YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAg
ICAgICAgICAgVmFsdWUqIHZhbHVlID0gZW5jbG9zaW5nU3RhY2suYXQob2Zmc2V0ICsgaSk7Cisg
ICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZz
ZXQgKyBpKTsKICAgICAgICAgICAgIGF1dG8qIHVwc2lsb24gPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOwogICAgICAgICAg
ICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07CiAgICAgICAgICAgICBib2R5LT5hcHBlbmQo
cGhpKTsKICAgICAgICAgICAgIHVwc2lsb24tPnNldFBoaShwaGkpOwotICAgICAgICAgICAgbmV3
U3RhY2suYXBwZW5kKHBoaSk7CisgICAgICAgICAgICBuZXdTdGFjay5jb25zdHJ1Y3RBbmRBcHBl
bmQodmFsdWUudHlwZSgpLCBwaGkpOwogICAgICAgICB9CiAgICAgICAgIGVuY2xvc2luZ1N0YWNr
LnNocmluayhvZmZzZXQpOwogICAgIH0KQEAgLTEzMDEsNyArMTMyMiw3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29uCiAgICAgICAgICAgICB1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsKICAgICAg
ICAgICAgIEIzOjpJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fcHJvYyk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byogdmFsdWUgPSBleHByZXNzaW9uU3RhY2tbaV07CisgICAg
ICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZXhwcmVzc2lvblN0YWNrW2ldOwog
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICsraW5kZXhJbkJ1ZmZlcjsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC0xMzIwLDcgKzEzNDEsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbgogICAgICAgICAgICAg
ICAgIEFTU0VSVChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCAtIDEpID09IHZhbHVlKTsKIAog
ICAgICAgICAgICAgICAgIGF1dG8qIHBoaSA9IGRhdGEuY29udGludWF0aW9uLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgUGhpLCAgdmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpKTsKLSAg
ICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBwaGk7CisgICAgICAgICAgICAgICAg
ZXhwcmVzc2lvblN0YWNrW2ldID0gVHlwZWRFeHByZXNzaW9uIHsgdmFsdWUudHlwZSgpLCBwaGkg
fTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1
ZT4obV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCksIGxvYWRGcm9tU2NyYXRjaEJ1ZmZlcih2YWx1ZS0+
dHlwZSgpKSwgcGhpKTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIHNvdXJjZVVwc2lsb24gPSBt
X3Byb2MuYWRkPFVwc2lsb25WYWx1ZT4odmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgcGhpKTsKQEAg
LTEzNDgsNyArMTM2OSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tTaWdu
YXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvCiB7CiAgICAgQmFzaWNC
bG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBuZXdTdGFjayA9
IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhz
aWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgbmV3QmxvY2sgPSBDb250
cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2NrVHlwZTo6QmxvY2ssIGNv
bnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTEzNjcsNyArMTM4OCw3IEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0CiAgICAgbm90VGFrZW4tPmFkZFByZWRlY2Vzc29yKG1fY3Vy
cmVudEJsb2NrKTsKIAogICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Ci0gICAgbmV3U3RhY2sg
PSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2so
c2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIHJlc3VsdCA9IENvbnRy
b2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpJZiwgY29udGlu
dWF0aW9uLCBub3RUYWtlbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTEzODcsNyArMTQwOCw3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEm
IGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25M
aXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcykg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IobV9wYXJzZXItPnNpZ25h
dHVyZSgpLCBDYWxsUm9sZTo6Q2FsbGVlKTsKIApAQCAtMTQ1OCw3ICsxNDc5LDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVz
c2lvblN0YWNrKSAtPiBQYXIKIHsKICAgICBDb250cm9sRGF0YSYgZGF0YSA9IGVudHJ5LmNvbnRy
b2xEYXRhOwogCi0gICAgQVNTRVJUKGV4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gZGF0YS5zaWdu
YXR1cmUtPnJldHVybkNvdW50KCkpOworICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgp
ID09IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCkpOwogICAgIGlmIChkYXRhLmJsb2Nr
VHlwZSgpICE9IEJsb2NrVHlwZTo6TG9vcCkKICAgICAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
ZXhwcmVzc2lvblN0YWNrLCBkYXRhLnBoaXMpOwogCkBAIC0xNDc5LDE3ICsxNTAwLDIwIEBAIGF1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5
LCBjb25zdCBTdGFjayYgZXhwcmVzCiAgICAgfQogCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkg
IT0gQmxvY2tUeXBlOjpMb29wKSB7Ci0gICAgICAgIGZvciAoVmFsdWUqIHJlc3VsdCA6IGRhdGEu
cGhpcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUo
KS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBWYWx1ZSogcmVzdWx0ID0gZGF0
YS5waGlzW2ldOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwot
ICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7
CisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRB
cHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgcmVzdWx0KTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5yZW1vdmVMYXN0KCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZS0+cmV0dXJuQ291bnQo
KTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVy
ZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpIDwgZXhwcmVzc2lv
blN0YWNrLnNpemUoKSkKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoY29uc3RhbnQo
dG9CM1R5cGUoZGF0YS5zaWduYXR1cmUtPnJldHVyblR5cGUoaSkpLCAweGJiYWRiZWVmKSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBUeXBlIHJldHVyblR5cGUgPSBkYXRh
LnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xv
c2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChyZXR1cm5UeXBlLCBjb25zdGFu
dCh0b0IzVHlwZShyZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCkBAIC0xODI3LDE0ICsxODUxLDE0IEBAIHZvaWQgQjNJUkdlbmVyYXRv
cjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3VsdFN0YWNrLCBjb25zdCBS
ZXN1bHRMCiAgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgpIC0gMSAtIGldLCByZXN1
bHRTdGFjay5hdChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwogfQogCi1zdGF0aWMgdm9p
ZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIz
SVJHZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spCitzdGF0aWMgdm9p
ZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYgY29tbWEsIGNvbnN0IEIz
SVJHZW5lcmF0b3I6OlN0YWNrJiBleHByZXNzaW9uU3RhY2spCiB7CiAgICAgZGF0YUxvZyhjb21t
YSwgIkV4cHJlc3Npb25TdGFjazoiKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cHJlc3Npb24g
OiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgIGRhdGFMb2coY29tbWEsICpleHByZXNzaW9uKTsK
IH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+
JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spCit2b2lkIEIzSVJH
ZW5lcmF0b3I6OmR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiBjb250cm9sU3RhY2ssIGNvbnN0IFN0
YWNrKiBleHByZXNzaW9uU3RhY2spCiB7CiAgICAgZGF0YUxvZ0xuKCJDb25zdGFudHM6Iik7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBjb25zdGFudCA6IG1fY29uc3RhbnRQb29sKQpAQCAtMTg2Miw3
ICsxODg2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21w
aWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBm
dW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9k
ZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJV
cCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYg
ZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1v
ZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVy
VXApCiB7CiAgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7
CiAKQEAgLTE4ODYsNyArMTkxMCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgICAg
ID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFCM09wdGltaXphdGlvbkxldmVsKCkKICAgICAgICAg
OiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOwogCi0gICAgQjNJ
UkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUsIGNv
bXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRpZXJV
cCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGlu
Zm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbklu
ZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVwKTsKICAgICBGdW5jdGlvblBhcnNlcjxC
M0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBm
dW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggZWE1NTAyNDAxOGQzMGQzOGZmMWVhN2E3
YWJmMWMxNjViY2Y1NjdmOC4uZDJmODgxZTFlNDEyNzMzZTgyNmQ5YjE0N2ZjZWY3YzAxYjk2NDUz
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
CkBAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6
dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3Rz
OwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRh
dGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1
bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBU
aHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250
ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGll
clVwQ291bnQqID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBhYWM1YThjMjY1
MmUzNjMwMTBkYzgxYzcyZjNjZDA2NDRjNTI5Y2FlLi5iYzkyYjZkZDYyYjhkODg0MDBhZDgzZGFj
NGUwN2Q2M2YzMmZlMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW4uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5j
bHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkpTVG9XYXNtLmgiCiAjaW5jbHVkZSAi
V2FzbUFpcklSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJXYXNtQmluZGluZy5oIgpAQCAtNTQsNyArNTUsNyBAQCBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCiBCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNv
bnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24sIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIGNv
bXBsZXRpb25UYXNrKQotICAgIDogRW50cnlQbGFuKGNvbnRleHQsIFdURk1vdmUobW9kdWxlSW5m
b3JtYXRpb24pLCBXVEZNb3ZlKGNvbXBsZXRpb25UYXNrKSkKKyAgICA6IEVudHJ5UGxhbihjb250
ZXh0LCBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSwgQXN5bmNXb3JrOjpGdWxsQ29tcGlsZSwg
V1RGTW92ZShjb21wbGV0aW9uVGFzaykpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAg
ICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKQEAgLTc5LDcgKzgwLDI0IEBA
IGJvb2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQogdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBpZiAoIW1fY29kZUJsb2NrKSB7Ci0gICAgICAgIEJh
c2U6OndvcmsoZWZmb3J0KTsKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNh
c2UgU3RhdGU6OkluaXRpYWw6CisgICAgICAgICAgICBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCk7
CisgICAgICAgICAgICBpZiAoIWhhc1dvcmsoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlKGhv
bGRMb2NrKG1fbG9jaykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgU3RhdGU6OlZhbGlkYXRlZDoK
KyAgICAgICAgICAgIHByZXBhcmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFN0YXRlOjpQcmVwYXJlZDoKKyAgICAgICAgICAgIGNvbXBpbGVGdW5jdGlvbnMoZWZmb3J0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTE1LDcgKzEzMyw3IEBA
IHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIExv
Y2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBtX2NvZGVCbG9j
ay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0gPSBjYWxsZWUuY29weVJlZigpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSAqbV9jb2RlQmxv
Y2stPm1fbGxpbnRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF07CisgICAgICAgICAgICBMTEludENh
bGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbbV9mdW5jdGlv
bkluZGV4XS5nZXQoKTsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRD
YWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7CiAgICAgICAgICAgICBsbGludENhbGxlZS5z
ZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKICAgICAgICAgICAgIGxsaW50Q2FsbGVl
LnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVy
OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CkBAIC0xNTMsMTAgKzE3MSwxMSBAQCB2b2lk
IEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2Fz
bVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoTExJbnRDYWxsZWUqIGxsaW50
Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW2ldLmdldCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS0+
cmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxl
ZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVC
bG9jay0+bV9sbGludENhbGxlZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKEpJVENh
bGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dh
c21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAg
ICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGlu
dENhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKQogICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2Fs
bHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9i
YnFDYWxsZWVzW2ldLmdldCgpKSB7CkBAIC0xOTEsNyArMjEwLDcgQEAgdm9pZCBCQlFQbGFuOjpj
b21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25J
bmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoKm1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XS5lbWJlZGRlckVudHJ5cG9pbnRKSVQsIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCks
IG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRk
ZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgY3JlYXRlSlNUb1dh
c21XcmFwcGVyKCptX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJF
bnRyeXBvaW50SklULCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0
aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5k
ZXgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
ICAgICB9CiB9CkBAIC0yMTUsOSArMjM0LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGUKICAg
ICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKIAogICAgIGlmICghZm9yY2VVc2luZ0IzICYmIE9w
dGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9
IHBhcnNlQW5kQ29tcGlsZUFpcihjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5j
dGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgcGFyc2VB
bmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNvbnRleHQsIGZ1bmN0aW9uLCBz
aWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAgICAgZWxzZQotICAgICAgICBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24s
IHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2Rl
OjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhyb3dXYXNt
RXhjZXB0aW9uKTsKKyAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21w
aWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBt
X21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01B
WCwgdGllclVwKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CkBAIC0yODMsMjEgKzMw
Miw0MSBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IENhbGxlZUluaXRp
YWxpemVyJiBjYWxsYmFjaykKICAgICBBU1NFUlQoIWZhaWxlZCgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsK
IAotICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7
CisgICAgICAgIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZTsKICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1f
ZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4
KSkgewotICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6RW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9u
LT5lbnRyeXBvaW50KSk7CisgICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBF
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGVtYmVkZGVyVG9XYXNtRnVu
Y3Rpb24tPmVudHJ5cG9pbnQpKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20oZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7CiAgICAgICAgIHNpemVfdCBm
dW5jdGlvbkluZGV4U3BhY2UgPSBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgICAgIFJlZjxXYXNtOjpDYWxsZWU+
IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6QkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShm
dW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGll
clVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOworICAgICAgICBSZWY8QkJRQ2Fs
bGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVu
Y3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRp
b24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJV
cENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKIAogICAgICAgICBjYWxs
YmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAgIH0KIH0KIAorYm9vbCBC
QlFQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24pCit7CisgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBs
YW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIs
IGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0aW9uLmVuZCk7CisgICAg
c2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gZnVuY3Rpb24uZW5kIC0gZnVuY3Rpb24uc3RhcnQ7Cisg
ICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpKTsKKyAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVy
bmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CisKKyAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1
bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpOworICAgIGlmICgh
dmFsaWRhdGlvblJlc3VsdCkgeworICAgICAgICBpZiAoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVy
Ym9zZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uTGVu
Z3RoOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7CisgICAgICAgICAgICBkYXRh
TG9nTG4oKTsKKyAgICAgICAgfQorICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VT
dHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5jdGlvbiBhdCBpbmRleCAi
LCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhNRSBtYWtlIHRoaXMgYW4g
RXhwZWN0ZWQuCisgICAgfQorICAgIHJldHVybiAhIXZhbGlkYXRpb25SZXN1bHQ7Cit9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAppbmRleCBmMjJlMTg5NjQ3
MjdhZjNlNWU4MDRmZTg1Mzc4YTEwYzllZjA0N2FkLi41ZTJkZmRmZmM2MzAxYTU2Mjc0MGNmY2My
ZTc0MWQ0ZjM2M2JmODI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmgKQEAgLTQ0LDcgKzQ0LDkgQEAgY2xhc3MgQ2FsbExpbmtJbmZvOwogCiBuYW1lc3BhY2UgV2Fz
bSB7CiAKK2NsYXNzIEJCUUNhbGxlZTsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEVtYmVkZGVy
RW50cnlwb2ludENhbGxlZTsKIAogY2xhc3MgQkJRUGxhbiBmaW5hbCA6IHB1YmxpYyBFbnRyeVBs
YW4gewogcHVibGljOgpAQCAtNTQsOCArNTYsMjQgQEAgcHVibGljOgogCiAgICAgQkJRUGxhbihD
b250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Q29kZUJsb2NrKiwgQ29tcGxldGlvblRhc2smJik7CiAKKyAgICBib29sIGhhc1dvcmsoKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fYXN5bmNXb3JrID09IEFzeW5jV29yazo6
VmFsaWRhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0YXRlIDwgU3RhdGU6OlZhbGlkYXRl
ZDsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7CisgICAgfQorCiAg
ICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRp
YWxpemVDYWxsZWVzKGNvbnN0IENhbGxlZUluaXRpYWxpemVyJikgb3ZlcnJpZGU7CisKKyAgICB1
c2luZyBDYWxsZWVJbml0aWFsaXplciA9IEZ1bmN0aW9uPHZvaWQodWludDMyX3QsIFJlZlB0cjxF
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+JiYsIFJlZjxCQlFDYWxsZWU+JiYpPjsKKyAgICB2b2lk
IGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IENhbGxlZUluaXRpYWxpemVyJik7CisKKyAgICBib29s
IGRpZFJlY2VpdmVGdW5jdGlvbkRhdGEodW5zaWduZWQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYpIG92
ZXJyaWRlOworCisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBCYXNlOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKG1fc291cmNlLmRhdGEoKSwg
bV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICBib29sIHByZXBhcmVJ
bXBsKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxv
Y2suY3BwCmluZGV4IDQwMmU3MGJkODRhMWYwNmYxOTY0MjA3OWJiMDZiM2M1NTgzNGYyMWEuLjEz
NGRhN2RlMGIzZTk3NTU3NDE2ZGM0MzE5NWJjYWRmZWZlOTIyNDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC0zNiw1OCArMzYsNzIgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotUmVmPENvZGVCbG9jaz4gQ29kZUJs
b2NrOjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZv
cm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0
ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikK
K1JlZjxDb2RlQmxvY2s+IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQqIGNvbnRleHQsIE1lbW9y
eU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uLCBjb25zdCBS
ZWY8TExJbnRDYWxsZWU+KiBsbGludENhbGxlZXMpCiB7Ci0gICAgYXV0byogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBmYXN0TWFsbG9jKHNpemVvZihDb2RlQmxvY2spKSkgQ29kZUJsb2NrKGNvbnRl
eHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBl
ciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgYXV0byogcmVzdWx0ID0gbmV3IChOb3ROdWxs
LCBmYXN0TWFsbG9jKHNpemVvZihDb2RlQmxvY2spKSkgQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUs
IG1vZHVsZUluZm9ybWF0aW9uLCBsbGludENhbGxlZXMpOwogICAgIHJldHVybiBhZG9wdFJlZigq
cmVzdWx0KTsKIH0KIAotQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVt
b3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0
ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNv
bnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0
aW9uLCBjb25zdCBSZWY8TExJbnRDYWxsZWU+KiBsbGludENhbGxlZXMpCiAgICAgOiBtX2NhbGxl
ZUNvdW50KG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRnVuY3Rpb25Db3VudCgpKQogICAgICwg
bV9tb2RlKG1vZGUpCisgICAgLCBtX2xsaW50Q2FsbGVlcyhsbGludENhbGxlZXMpCiB7CiAgICAg
UmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7CiAKLSAgICBhdXRvIHRhc2sg
PSBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKLSAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICBpZiAobV9wbGFuLT5mYWlsZWQoKSkgewot
ICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtX3BsYW4tPmVycm9yTWVzc2FnZSgpOwotICAg
ICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVudHVhbGx5IGNvbGxl
Y3QgdGhlIEJCUSBjb2RlLgotICAgICAgICBtX2xsaW50Q2FsbGVlcy5yZXNpemUobV9jYWxsZWVD
b3VudCk7Ci0gICAgICAgIG1fYmJxQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7Ci0gICAg
ICAgIG1fb21nQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIG1fd2FzbUlu
ZGlyZWN0Q2FsbEVudHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKLQotICAgICAgICBt
X3BsYW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0
cjxDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBSZWZQdHI8Q2FsbGVlPiYmIHdh
c21FbnRyeXBvaW50KSB7Ci0gICAgICAgICAgICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQo
Y2FsbGVlSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBp
ZiAoT3B0aW9uczo6dXNlV2FzbUxMSW50KCkpIHsKKyAgICAgICAgbV9wbGFuID0gYWRvcHRSZWYo
Km5ldyBMTEludFBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIG1fbGxp
bnRDYWxsZWVzLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKKyAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgICAgIGlmIChtX3Bs
YW4tPmZhaWxlZCgpKSB7CisgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtX3BsYW4t
PmVycm9yTWVzc2FnZSgpOworICAgICAgICAgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF0gPSB3YXNtRW50cnlwb2lu
dC0+ZW50cnlwb2ludCgpOwogCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlV2FzbUxMSW50
KCkpCi0gICAgICAgICAgICAgICAgbV9sbGludENhbGxlZXNbY2FsbGVlSW5kZXhdID0gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8TExJbnRDYWxsZWUqPih3YXNtRW50cnlwb2ludC5sZWFrUmVmKCkpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2JicUNhbGxlZXNbY2FsbGVlSW5k
ZXhdID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4od2FzbUVudHJ5cG9pbnQubGVh
a1JlZigpKSk7Ci0gICAgICAgIH0pOworICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBl
dmVudHVhbGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgorICAgICAgICAgICAgbV9iYnFDYWxsZWVz
LnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fb21nQ2FsbGVlcy5yZXNpemUo
bV9jYWxsZWVDb3VudCk7CisgICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
cy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2NhbGxlZUNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgbV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHNbaV0gPSBtX2xsaW50Q2FsbGVlc1tpXS0+ZW50cnlwb2ludCgpOwor
CisgICAgICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMgPSBtX3BsYW4tPnRha2VXYXNtVG9X
YXNtRXhpdFN0dWJzKCk7CisgICAgICAgICAgICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3Bs
YW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CisgICAgICAgICAgICBtX2VtYmVkZGVyQ2Fs
bGVlcyA9IHN0YXRpY19jYXN0PExMSW50UGxhbio+KG1fcGxhbi5nZXQoKSktPnRha2VFbWJlZGRl
ckNhbGxlZXMoKTsKIAotICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMgPSBtX3BsYW4tPnRh
a2VXYXNtVG9XYXNtRXhpdFN0dWJzKCk7Ci0gICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9
IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKKyAgICAgICAgICAgIHNldENvbXBp
bGF0aW9uRmluaXNoZWQoKTsKKyAgICAgICAgfSkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZv
cm1hdGlvbiksIEVudHJ5UGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6
Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldIChQbGFuJikgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKKyAgICAgICAgICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7CisgICAgICAgICAgICAgICAg
c2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoT3B0aW9uczo6dXNlV2FzbUxMSW50KCkpCi0gICAgICAg
ICAgICBtX2xsaW50RW50cnlUaHVua3MgPSBiaXR3aXNlX2Nhc3Q8TExJbnRQbGFuKj4obV9wbGFu
LmdldCgpKS0+dGFrZUVudHJ5VGh1bmtzKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCisgICAgICAgICAgICBtX2JicUNh
bGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAgbV9vbWdDYWxsZWVzLnJl
c2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5
UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKworICAgICAgICAgICAgQkJRUGxhbiogYmJx
UGxhbiA9IHN0YXRpY19jYXN0PEJCUVBsYW4qPihtX3BsYW4uZ2V0KCkpOworICAgICAgICAgICAg
YmJxUGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVm
UHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUs
IFJlZlB0cjxCQlFDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gbV9lbWJlZGRlckNhbGxlZXMuc2V0KGNhbGxlZUluZGV4LCBXVEZNb3ZlKGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF0gPSB3YXNt
RW50cnlwb2ludC0+ZW50cnlwb2ludCgpOworICAgICAgICAgICAgICAgIG1fYmJxQ2FsbGVlc1tj
YWxsZWVJbmRleF0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPih3YXNtRW50cnlw
b2ludC5sZWFrUmVmKCkpKTsKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHNldENvbXBpbGF0
aW9uRmluaXNoZWQoKTsKLSAgICB9KTsKKyAgICAgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVi
cyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKKyAgICAgICAgICAgIG1fd2Fz
bVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKIAot
ICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkKLSAgICAgICAgbV9wbGFuID0gYWRvcHRS
ZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEVu
dHJ5UGxhbjo6RnVsbENvbXBpbGUsIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRk
ZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7Ci0gICAgZWxzZQotICAgICAgICBtX3Bs
YW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZvcm1h
dGlvbiksIEVudHJ5UGxhbjo6RnVsbENvbXBpbGUsIFdURk1vdmUodGFzayksIFdURk1vdmUoY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7CisgICAgICAgICAgICBz
ZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIH0pKSk7CisgICAgfQogICAgIG1fcGxh
bi0+c2V0TW9kZShtb2RlKTsKIAogICAgIGF1dG8mIHdvcmtsaXN0ID0gV2FzbTo6ZW5zdXJlV29y
a2xpc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAppbmRl
eCAyYmZjMWIyNjA2MTcwMmE3NzkwNTJhZGM5NzljOGI4MTkyZjZjNDk4Li4wMTU0N2ZkNTNjMmVi
OWFmYzc2MWI0ZjRhMjUzYjYwZmEzNGYzNTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5oCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb2RlQmxvY2s+IHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFJlZjxDb2RlQmxvY2s+JiYpOwogICAgIHVzaW5nIEFzeW5j
Q29tcGlsYXRpb25DYWxsYmFjayA9IFJlZlB0cjxXVEY6OlNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBl
Pj47Ci0gICAgc3RhdGljIFJlZjxDb2RlQmxvY2s+IGNyZWF0ZShDb250ZXh0KiwgTWVtb3J5TW9k
ZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNt
RXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3JlYXRlKENvbnRleHQqLCBN
ZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFJlZjxMTEludENhbGxlZT4qKTsK
IAogICAgIHZvaWQgd2FpdFVudGlsRmluaXNoZWQoKTsKICAgICB2b2lkIGNvbXBpbGVBc3luYyhD
b250ZXh0KiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwpAQCAtOTUsNyArOTUsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKm1fb21nQ2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0
KCk7CiAgICAgICAgIGlmIChtX2JicUNhbGxlZXNbY2FsbGVlSW5kZXhdKQogICAgICAgICAgICAg
cmV0dXJuICptX2JicUNhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwotICAgICAgICByZXR1cm4g
Km1fbGxpbnRDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fbGxp
bnRDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKICAgICBCQlFDYWxsZWUmIHdh
c21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSkKQEAgLTEyOCwxNSArMTI4LDE0IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9N
R1BsYW47CiAgICAgZnJpZW5kIGNsYXNzIE9NR0Zvck9TUkVudHJ5UGxhbjsKIAotICAgIENvZGVC
bG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBDcmVhdGVFbWJl
ZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBDb2RlQmxvY2soQ29udGV4
dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgUmVmPExMSW50Q2FsbGVl
PiopOwogICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1f
Y2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAgVmVjdG9yPFJlZlB0cjxP
TUdDYWxsZWU+PiBtX29tZ0NhbGxlZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+PiBt
X2JicUNhbGxlZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxMTEludENhbGxlZT4+IG1fbGxpbnRDYWxs
ZWVzOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBtX2xs
aW50RW50cnlUaHVua3M7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPENhbGxlZT4sIHR5
cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOworICAgIGNvbnN0IFJl
ZjxMTEludENhbGxlZT4qIG1fbGxpbnRDYWxsZWVzOworICAgIEhhc2hNYXA8dWludDMyX3QsIFJl
ZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50
MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+
PiBtX2VtYmVkZGVyQ2FsbGVlczsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4+IG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzOwogICAgIFZlY3Rv
cjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsK
ICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2Fz
bVRvV2FzbUV4aXRTdHViczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21FbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5
UGxhbi5jcHAKaW5kZXggNWQzNDcyYjRhZjU3ZTRkMmU4MjI3ZTczNzg2ODUzMTdjMjE5M2E4OS4u
NzdkMDNkMzBiNjgyY2E2YmEzZGEwZjQ4NTlkYTI5ZmUxNjFkNjQ0YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAKQEAgLTQ3LDMzICs0NywxNyBAQCBu
YW1lc3BhY2UgV2FzbUVudHJ5UGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIH0KIAotRW50cnlQbGFuOjpFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwg
UmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRh
c2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIs
IFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgOiBCYXNlKGNvbnRl
eHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJX
cmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQorRW50cnlQbGFuOjpFbnRyeVBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywg
Q29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKGluZm8p
LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9tb2R1bGVJbmZvcm1h
dGlvbi5nZXQoKSwgKnRoaXMpCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCiAgICAg
LCBtX2FzeW5jV29yayh3b3JrKQogewogfQogCi1FbnRyeVBsYW46OkVudHJ5UGxhbihDb250ZXh0
KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21w
bGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVy
V3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKLSAgICA6IEJh
c2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBXVEZNb3ZlKHRhc2spLCBX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKLSAgICAs
IG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKLSAgICAsIG1fc3RyZWFtaW5nUGFyc2VyKG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCksICp0aGlzKQotICAgICwgbV9zdGF0ZShTdGF0ZTo6SW5pdGlh
bCkKLSAgICAsIG1fYXN5bmNXb3JrKHdvcmspCi17Ci19Ci0KLUVudHJ5UGxhbjo6RW50cnlQbGFu
KENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRp
b24sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZSht
b2R1bGVJbmZvcm1hdGlvbiksIFdURk1vdmUodGFzaykpCi0gICAgLCBtX3N0cmVhbWluZ1BhcnNl
cihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKLSAgICAsIG1fc3RhdGUoU3RhdGU6
OkluaXRpYWwpCi0gICAgLCBtX2FzeW5jV29yayhBc3luY1dvcms6OkZ1bGxDb21waWxlKQotewot
fQotCi1FbnRyeVBsYW46OkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBBc3luY1dvcmsgd29y
aywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorRW50cnlQbGFuOjpFbnRyeVBsYW4oQ29udGV4dCog
Y29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQogICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKHRhc2spKQorICAg
ICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2UpKQogICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgKnRoaXMpCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpJbml0
aWFsKQogICAgICwgbV9hc3luY1dvcmsod29yaykKQEAgLTk5LDI2ICs4Myw2IEBAIHZvaWQgRW50
cnlQbGFuOjptb3ZlVG9TdGF0ZShTdGF0ZSBzdGF0ZSkKICAgICBtX3N0YXRlID0gc3RhdGU7CiB9
CiAKLWJvb2wgRW50cnlQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24pCi17Ci0gICAgZGF0YUxvZ0xu
SWYoV2FzbUVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiUHJvY2Vzc2luZyBmdW5jdGlvbiBz
dGFydGluZyBhdDogIiwgZnVuY3Rpb24uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgZnVuY3Rp
b24uZW5kKTsKLSAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5jdGlvbi5lbmQgLSBmdW5j
dGlvbi5zdGFydDsKLSAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPT0gZnVuY3Rpb24uZGF0YS5z
aXplKCkpOwotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07
Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKLQotICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlk
YXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSk7Ci0gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7Ci0gICAgICAgIGlmIChXYXNtRW50cnlQ
bGFuSW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbi5kYXRhW2ldKSksICIsICIpOwot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmFpbChob2xkTG9j
ayhtX2xvY2spLCBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IoKSwgIiwgaW4gZnVu
Y3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsgLy8gRklY
TUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgIH0KLSAgICByZXR1cm4gISF2YWxpZGF0aW9u
UmVzdWx0OwotfQotCiBib29sIEVudHJ5UGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShjb25z
dCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiAgICAgaWYgKG1fc3Rh
dGUgIT0gU3RhdGU6OkluaXRpYWwpCkBAIC0xNDUsOCArMTA5LDYgQEAgYm9vbCBFbnRyeVBsYW46
OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291
cmNlTGVuZ3QKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25vdG9uaWNUaW1lOjpub3co
KSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFsaWRhdGUgbW9kdWxlIik7
CiAKICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKTsKLSAgICBpZiAobV9hc3luY1dv
cmsgPT0gVmFsaWRhdGlvbikKLSAgICAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Niw2ICsxMTgsNyBAQCB2b2lkIEVudHJ5UGxhbjo6
cHJlcGFyZSgpCiAgICAgZGF0YUxvZ0xuSWYoV2FzbUVudHJ5UGxhbkludGVybmFsOjp2ZXJib3Nl
LCAiU3RhcnRpbmcgcHJlcGFyYXRpb24iKTsKIAogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKKyAgICBtX251bWJlck9mRnVuY3Rpb25z
ID0gZnVuY3Rpb25zLnNpemUoKTsKICAgICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21U
b1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBzdHVicyIpCiAg
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
ZnVuY3Rpb25zLnNpemUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0byBXZWJBc3NlbWJseSBj
YWxscyIpKQogICAgICAgICByZXR1cm47CkBAIC0yMjMsMjAgKzE4Niw2IEBAIHB1YmxpYzoKICAg
ICBFbnRyeVBsYW4mIG1fcGxhbjsKIH07CiAKLXZvaWQgRW50cnlQbGFuOjpjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQotewotICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRl
OjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5j
dGlvbnMuc2l6ZSgpKTsKLSAgICBkYXRhTG9nTG5JZihXYXNtRW50cnlQbGFuSW50ZXJuYWw6OnZl
cmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7Ci0KLSAgICBpZiAoIWZhaWxlZCgpICYmIG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKQotICAgICAgICBkaWRDb21wbGV0ZUNvbXBpbGF0aW9u
KGxvY2tlcik7Ci0KLSAgICBpZiAoIWlzQ29tcGxldGUoKSkgewotICAgICAgICBtb3ZlVG9TdGF0
ZShTdGF0ZTo6Q29tcGxldGVkKTsKLSAgICAgICAgcnVuQ29tcGxldGlvblRhc2tzKGxvY2tlcik7
Ci0gICAgfQotfQotCiAKIHZvaWQgRW50cnlQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIHsKQEAgLTI1Miw3ICsyMDEsNiBAQCB2b2lkIEVudHJ5UGxhbjo6
Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgVGhyZWFkQ291
bnRIb2xkZXIgaG9sZGVyKCp0aGlzKTsKIAogICAgIHNpemVfdCBieXRlc0NvbXBpbGVkID0gMDsK
LSAgICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlv
bnM7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGVmZm9ydCA9PSBQYXJ0aWFsICYm
IGJ5dGVzQ29tcGlsZWQgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlQYXJ0aWFsQ29tcGlsZUxpbWl0
KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNjAsNyArMjA4LDcgQEAgdm9pZCBFbnRyeVBs
YW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICB1
aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0g
ZnVuY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID49IG1f
bnVtYmVyT2ZGdW5jdGlvbnMpIHsKICAgICAgICAgICAgICAgICBpZiAoaGFzV29yaygpKQogICAg
ICAgICAgICAgICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGlsZWQpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTI3MCwzMSArMjE4LDI1IEBAIHZvaWQgRW50cnlQbGFuOjpjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgfQogCiAgICAg
ICAgIGNvbXBpbGVGdW5jdGlvbihmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgYnl0ZXNDb21waWxl
ZCArPSBmdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZGF0YS5zaXplKCk7CisgICAgICAgIGJ5dGVz
Q29tcGlsZWQgKz0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAotdm9pZCBFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQordm9pZCBFbnRyeVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIpCiB7Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBTdGF0
ZTo6SW5pdGlhbDoKLSAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShtX3NvdXJjZS5kYXRh
KCksIG1fc291cmNlLnNpemUoKSk7Ci0gICAgICAgIGlmICghaGFzV29yaygpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgU3RhdGU6OlZhbGlkYXRlZDoKLSAgICAg
ICAgcHJlcGFyZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDoK
LSAgICAgICAgY29tcGlsZUZ1bmN0aW9ucyhlZmZvcnQpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6Q29t
cGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25z
LnNpemUoKSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbUVudHJ5UGxhbkludGVybmFsOjp2ZXJib3Nl
LCAiU3RhcnRpbmcgQ29tcGxldGlvbiIpOworCisgICAgaWYgKCFmYWlsZWQoKSAmJiBtX3N0YXRl
ID09IFN0YXRlOjpDb21waWxlZCkKKyAgICAgICAgZGlkQ29tcGxldGVDb21waWxhdGlvbihsb2Nr
ZXIpOworCisgICAgaWYgKCFpc0NvbXBsZXRlKCkpIHsKKyAgICAgICAgbW92ZVRvU3RhdGUoU3Rh
dGU6OkNvbXBsZXRlZCk7CisgICAgICAgIHJ1bkNvbXBsZXRpb25UYXNrcyhsb2NrZXIpOwogICAg
IH0KIH0KIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUVudHJ5UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5o
CmluZGV4IDI0ODM2MjhiY2NkNTMwMDBhOWQ2YmEwNTU1NzQ2MDU3YTI1NTkwOGYuLmI0OWRjMmIx
NTkxMmRlOTY2Y2Q4ODZhNjQ3NDhmMDFiYzdjMmY0NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21FbnRyeVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRW50cnlQbGFuLmgKQEAgLTQ3LDM2ICs0NywxNSBAQCBwdWJsaWM6CiAgICAg
ZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKIAog
ICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0
byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAg
ICBFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywg
Q29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgRW50cnlQbGFuKENvbnRleHQqLCBWZWN0b3I8
dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBDcmVhdGVFbWJlZGRlcldy
YXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBFbnRyeVBsYW4oQ29udGV4dCosIFJl
ZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNrJiYpOwotICAgIEVudHJ5UGxhbihD
b250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBFbnRyeVBsYW4oQ29u
dGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2sm
Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRW50cnlQbGFuKENvbnRleHQqLCBWZWN0b3I8dWlu
dDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIHZpcnR1YWwgfkVu
dHJ5UGxhbigpID0gZGVmYXVsdDsKIAotICAgIHVzaW5nIENhbGxlZUluaXRpYWxpemVyID0gRnVu
Y3Rpb248dm9pZCh1aW50MzJfdCwgUmVmUHRyPENhbGxlZT4mJiwgUmVmPENhbGxlZT4mJik+Owot
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYWxsZWVJbml0aWFsaXpl
ciYpID0gMDsKLQotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291
cmNlLnNpemUoKSk7Ci0gICAgfQotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICB2b2lkIHByZXBhcmUoKTsKIAogICAgIHZvaWQgY29t
cGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCk7CiAKLSAgICBWZWN0b3I8RXhwb3J0PiYg
ZXhwb3J0cygpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkg
JiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBv
cnRzOwotICAgIH0KLQotICAgIHNpemVfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYmICFoYXNXb3JrKCkpOwot
ICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvbkNvdW50
KCk7Ci0gICAgfQotCiAgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmIHRha2VNb2R1bGVJbmZv
cm1hdGlvbigpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhh
c1dvcmsoKSk7CkBAIC0xMDMsMzkgKzgyLDI3IEBAIHB1YmxpYzoKICAgICAgICAgQ29tcGxldGVk
IC8vIFdlIHNob3VsZCBvbmx5IG1vdmUgdG8gQ29tcGxldGVkIGlmIHdlIGFyZSBob2xkaW5nIHRo
ZSBsb2NrLgogICAgIH07CiAKLSAgICBib29sIGhhc1dvcmsoKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgaWYgKG1fYXN5bmNXb3JrID09IEFzeW5jV29yazo6VmFsaWRhdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBtX3N0YXRlIDwgU3RhdGU6OlZhbGlkYXRlZDsKLSAgICAgICAgcmV0
dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7Ci0gICAgfQotCi0gICAgdm9pZCB3b3JrKENv
bXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKLSAgICBib29sIGhhc0JlZW5QcmVwYXJlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9Ci0gICAgYm9vbCBtdWx0
aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaGFzQmVlblByZXBhcmVkKCk7IH0K
LQotICAgIGJvb2wgZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNpZ25lZCwgY29uc3QgRnVuY3Rp
b25EYXRhJikgb3ZlcnJpZGU7CisgICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0KIAogcHJpdmF0ZToKICAg
ICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkQ291bnRI
b2xkZXI7CiAKLSAgICB2b2lkIHByZXBhcmUoKTsKLSAgICBib29sIGlzQ29tcGxldGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQ7IH0KLSAgICB2
b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgb3ZlcnJpZGU7Ci0KLSAgICBjb25z
dCBjaGFyKiBzdGF0ZVN0cmluZyhTdGF0ZSk7Ci0KIHByb3RlY3RlZDoKICAgICAvLyBGb3Igc29t
ZSByZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVuZCB0byBwYXJlbnQgY2xhc3Nlcy4uLgog
ICAgIHVzaW5nIEJhc2U6Om1fbG9jazsKIAorICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIGNvbnN0IGNoYXIqIHN0YXRlU3RyaW5n
KFN0YXRlKTsKKyAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKKyAgICBib29sIGlzQ29tcGxl
dGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQ7
IH0KKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgb3ZlcnJpZGU7CisK
ICAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZUltcGwoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNv
bXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImKSA9IDA7CiAK
LSAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CiAgICAgYm9vbCB0cnlSZXNlcnZlQ2FwYWNpdHkoVmVjdG9yPFQ+JiB2ZWN0b3IsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyKiB3aGF0KQogICAgIHsKQEAgLTE1Nyw2ICsxMjQsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgY29uc3QgQXN5bmNXb3JrIG1fYXN5bmNXb3JrOwogICAgIHVpbnQ4X3QgbV9udW1i
ZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07CiAgICAgdWludDMyX3QgbV9jdXJyZW50SW5kZXggeyAw
IH07CisgICAgdWludDMyX3QgbV9udW1iZXJPZkZ1bmN0aW9ucyB7IDAgfTsKIH07CiAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRleCBj
Y2ZhMTg1NDM1NDk5OWY4MmE4YWE0MjhlOGQ0OGU1YzQxZjQ3ODdkLi41MDcxZTNhZTIxMjZlYzBj
ODM4YWNmNDE5NzgzMGQ2MWUyNjVhMWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtNDAsMzEgKzQwLDUwIEBAIGVudW0gY2xhc3Mg
QmxvY2tUeXBlIHsKICAgICBUb3BMZXZlbAogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RhY2s+
Ci1TdGFjayBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIHN0YWNr
KQordGVtcGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3RhY2ssIHR5cGVuYW1lIE5ld1N0YWNrPgor
dm9pZCBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgRW5jbG9zaW5nU3RhY2sm
IGVuY2xvc2luZ1N0YWNrLCBOZXdTdGFjayYgbmV3U3RhY2spCiB7Ci0gICAgU3RhY2sgcmVzdWx0
OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpKTsKLSAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBzdGFjay5zaXplKCkgLSBzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKTsKKyAgICBuZXdTdGFjay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBBU1NFUlQoZW5jbG9zaW5nU3RhY2suc2l6
ZSgpID49IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsr
aSkKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChzdGFjay5hdChpICsgb2Zmc2V0KSk7
Ci0gICAgc3RhY2suc2hyaW5rKG9mZnNldCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
bmV3U3RhY2sudW5jaGVja2VkQXBwZW5kKGVuY2xvc2luZ1N0YWNrLmF0KGkgKyBvZmZzZXQpKTsK
KyAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGV4dD4KIGNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGljIFBhcnNlcjx2b2lkPiB7
CiBwdWJsaWM6Ci0gICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSB0eXBlbmFtZSBDb250ZXh0OjpF
eHByZXNzaW9uVHlwZTsKKyAgICBzdHJ1Y3QgQ29udHJvbEVudHJ5OworCiAgICAgdXNpbmcgQ29u
dHJvbFR5cGUgPSB0eXBlbmFtZSBDb250ZXh0OjpDb250cm9sVHlwZTsKLSAgICB1c2luZyBFeHBy
ZXNzaW9uTGlzdCA9IHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25MaXN0OwotICAgIHVzaW5n
IFN0YWNrID0gdHlwZW5hbWUgQ29udGV4dDo6U3RhY2s7Ci0gICAgdXNpbmcgUmVzdWx0TGlzdCA9
IHR5cGVuYW1lIENvbnRleHQ6OlJlc3VsdExpc3Q7CisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUg
PSB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZTsKIAotICAgIEZ1bmN0aW9uUGFyc2Vy
KENvbnRleHQmLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJik7CisgICAg
Y2xhc3MgVHlwZWRFeHByZXNzaW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFR5cGVkRXhwcmVz
c2lvbigpID0gZGVmYXVsdDsKIAotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2Uo
KTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uKFR5cGUgdHlwZSwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpCisgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX3ZhbHVlKHZh
bHVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgb3BlcmF0b3IgRXhwcmVzc2lvblR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IFR5cGUgbV90eXBlOworICAgICAgICBFeHByZXNzaW9uVHlwZSBtX3ZhbHVlOworICAgIH07CisK
KyAgICB1c2luZyBDb250cm9sU3RhY2sgPSBWZWN0b3I8Q29udHJvbEVudHJ5LCAxNj47CisgICAg
dXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgOD47CisgICAgdXNpbmcg
U3RhY2sgPSBWZWN0b3I8VHlwZWRFeHByZXNzaW9uLCAxNiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
OwogCiAgICAgc3RydWN0IENvbnRyb2xFbnRyeSB7CiAgICAgICAgIFN0YWNrIGVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrOwpAQCAtNzIsMTEgKzkxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgQ29udHJv
bFR5cGUgY29udHJvbERhdGE7CiAgICAgfTsKIAorICAgIEZ1bmN0aW9uUGFyc2VyKENvbnRleHQm
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFNpZ25hdHVyZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJik7CisKKyAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CisKICAgICBPcFR5cGUgY3VycmVudE9wY29kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZTsgfQogICAgIHNpemVfdCBjdXJyZW50T3Bj
b2RlU3RhcnRpbmdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRPcGNvZGVTdGFydGlu
Z09mZnNldDsgfQogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zaWduYXR1cmU7IH0KIAotICAgIFZlY3RvcjxDb250cm9sRW50cnk+JiBjb250cm9sU3Rh
Y2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsgfQorICAgIENvbnRyb2xTdGFjayYgY29udHJv
bFN0YWNrKCkgeyByZXR1cm4gbV9jb250cm9sU3RhY2s7IH0KICAgICBTdGFjayYgZXhwcmVzc2lv
blN0YWNrKCkgeyByZXR1cm4gbV9leHByZXNzaW9uU3RhY2s7IH0KIAogcHJpdmF0ZToKQEAgLTg2
LDYgKzEwOSw4IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIHVuc2ln
bmVkIGxldmVsKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBjaGVja0Jy
YW5jaFRhcmdldChjb25zdCBDb250cm9sVHlwZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIHVuaWZ5KGNvbnN0IENvbnRyb2xUeXBlJik7CiAKICNkZWZpbmUgV0FTTV9U
UllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyZXN1bHQsIHdoYXQpIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fZXhw
cmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImNhbid0IHBvcCBlbXB0eSBzdGFjayBpbiAiIHdoYXQp
OyBcCkBAIC05NCwxOCArMTE5LDM5IEBAIHByaXZhdGU6CiAgICAgfSB3aGlsZSAoMCkKIAogICAg
IHRlbXBsYXRlPE9wVHlwZT4KLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1
bmFyeUNhc2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmFyeUNh
c2UoVHlwZSByZXR1cm5UeXBlLCBUeXBlIG9wZXJhbmRUeXBlKTsKIAogICAgIHRlbXBsYXRlPE9w
VHlwZT4KLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBiaW5hcnlDYXNlKCk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYmluYXJ5Q2FzZShUeXBlIHJl
dHVyblR5cGUsIFR5cGUgbGhzVHlwZSwgVHlwZSByaHNUeXBlKTsKKworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIHN0b3JlKFR5cGUgbWVtb3J5VHlwZSk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChUeXBlIG1lbW9yeVR5cGUpOwogCiAjZGVm
aW5lIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZF9leHByZXNzaW9uKSBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKG1fY29udGV4dC5hZGRfZXhwcmVzc2lvbikKIAorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiB2YWxpZGF0aW9uRmFpbChjb25zdCBBcmdzJi4uLiBhcmdzKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxwZXI7IC8vIFNlZSBBREwg
Y29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAgICAgIGlmIChVTkxJS0VMWSghQVNTRVJUX0RJ
U0FCTEVEICYmIE9wdGlvbnM6OmNyYXNoT25GYWlsZWRXZWJBc3NlbWJseVZhbGlkYXRlKCkpKQor
ICAgICAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKKworICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBvdXQ7CisgICAgICAgIG91dC5wcmludCgiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
dmFsaWRhdGU6ICJfcywgYXJncy4uLik7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzdWx0
KG91dC50b1N0cmluZygpKTsKKyAgICB9CisKKyNkZWZpbmUgV0FTTV9WQUxJREFUT1JfRkFJTF9J
Rihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJS0VMWShjb25kaXRpb24p
KSBcCisgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbkZhaWwoX19WQV9BUkdTX18pOyBcCisg
ICAgfSB3aGlsZSAoMCkgXAorCiAgICAgLy8gRklYTUUgYWRkIGEgbWFjcm8gYXMgYWJvdmUgZm9y
IFdBU01fVFJZX0FQUEVORF9UT19DT05UUk9MX1NUQUNLIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU4NjIKIAogICAgIENvbnRleHQmIG1fY29udGV4dDsKICAgICBT
dGFjayBtX2V4cHJlc3Npb25TdGFjazsKLSAgICBWZWN0b3I8Q29udHJvbEVudHJ5PiBtX2NvbnRy
b2xTdGFjazsKKyAgICBDb250cm9sU3RhY2sgbV9jb250cm9sU3RhY2s7CisgICAgVmVjdG9yPFR5
cGUsIDE2PiBtX2xvY2FsczsKICAgICBjb25zdCBTaWduYXR1cmUmIG1fc2lnbmF0dXJlOwogICAg
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CiAKQEAgLTEzNiw2ICsxODIsMTAgQEAg
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2UoKSAtPiBSZXN1bHQKICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJlKSwgImNh
bid0IGFkZCAiLCBtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIHRvIEZ1
bmN0aW9uIik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIobG9jYWxH
cm91cHNDb3VudCksICJjYW4ndCBnZXQgbG9jYWwgZ3JvdXBzIGNvdW50Iik7CiAKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobV9zaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0
aW9uJ3MgIiwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsr
aSkKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKG1fc2lnbmF0dXJlLmFyZ3VtZW50
KGkpKTsKKwogICAgIHVpbnQ2NF90IHRvdGFsTnVtYmVyT2ZMb2NhbHMgPSBtX3NpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxvY2FsR3JvdXBz
Q291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxvY2FsczsKQEAgLTE0NSw2
ICsxOTUsMTEgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2UoKSAtPiBSZXN1
bHQKICAgICAgICAgdG90YWxOdW1iZXJPZkxvY2FscyArPSBudW1iZXJPZkxvY2FsczsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0b3RhbE51bWJlck9mTG9jYWxzID4gbWF4RnVuY3Rpb25M
b2NhbHMsICJGdW5jdGlvbidzIG51bWJlciBvZiBsb2NhbHMgaXMgdG9vIGJpZyAiLCB0b3RhbE51
bWJlck9mTG9jYWxzLCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25Mb2NhbHMpOwogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZMb2NhbCksICJjYW4ndCBn
ZXQgRnVuY3Rpb24gbG9jYWwncyB0eXBlIGluIGdyb3VwICIsIGkpOworCisgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSh0b3RhbE51bWJlck9m
TG9jYWxzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uJ3MgIiwg
dG90YWxOdW1iZXJPZkxvY2FscywgIiBsb2NhbHMiKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bWJlck9mTG9jYWxzOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fscy51bmNo
ZWNrZWRBcHBlbmQodHlwZU9mTG9jYWwpOworCiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKGFkZExvY2FsKHR5cGVPZkxvY2FsLCBudW1iZXJPZkxvY2FscykpOwogICAgIH0KIApAQCAt
MTg2LDMxICsyNDEsMTA0IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQm9k
eSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIHRlbXBs
YXRlPE9wVHlwZSBvcD4KLWF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmJpbmFyeUNhc2Uo
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpiaW5hcnlD
YXNlKFR5cGUgcmV0dXJuVHlwZSwgVHlwZSBsaHNUeXBlLCBUeXBlIHJoc1R5cGUpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSByaWdodDsKLSAgICBFeHByZXNzaW9uVHlw
ZSBsZWZ0OwotICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKKyAgICBUeXBlZEV4cHJlc3Npb24g
cmlnaHQ7CisgICAgVHlwZWRFeHByZXNzaW9uIGxlZnQ7CiAKICAgICBXQVNNX1RSWV9QT1BfRVhQ
UkVTU0lPTl9TVEFDS19JTlRPKHJpZ2h0LCAiYmluYXJ5IHJpZ2h0Iik7CiAgICAgV0FTTV9UUllf
UE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhsZWZ0LCAiYmluYXJ5IGxlZnQiKTsKLSAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVCh0ZW1wbGF0ZSBhZGRPcDxvcD4obGVmdCwgcmlnaHQsIHJlc3Vs
dCkpOwogCi0gICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRihsZWZ0LnR5cGUoKSAhPSBsaHNUeXBlLCBvcCwgIiBsZWZ0IHZhbHVl
IHR5cGUgbWlzbWF0Y2giKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHJpZ2h0LnR5cGUo
KSAhPSByaHNUeXBlLCBvcCwgIiByaWdodCB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CisKKyAgICBF
eHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQodGVtcGxh
dGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCByZXN1bHQpKTsKKyAgICBtX2V4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcmVzdWx0KTsKICAgICByZXR1cm4geyB9
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogdGVtcGxhdGU8T3BUeXBlIG9wPgot
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5hcnlDYXNlKCkgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5hcnlDYXNlKFR5cGUgcmV0dXJuVHlw
ZSwgVHlwZSBvcGVyYW5kVHlwZSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIEV4cHJlc3Npb25U
eXBlIHZhbHVlOwotICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLQorICAgIFR5cGVkRXhwcmVz
c2lvbiB2YWx1ZTsKICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVl
LCAidW5hcnkiKTsKKworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWUudHlwZSgpICE9
IG9wZXJhbmRUeXBlLCBvcCwgIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CisKKyAgICBFeHByZXNz
aW9uVHlwZSByZXN1bHQ7CiAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQodGVtcGxhdGUgYWRk
T3A8b3A+KHZhbHVlLCByZXN1bHQpKTsKKyAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RB
bmRBcHBlbmQocmV0dXJuVHlwZSwgcmVzdWx0KTsKKyAgICByZXR1cm4geyB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6bG9h
ZChUeXBlIG1lbW9yeVR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKCFtX2luZm8ubWVtb3J5LCAibG9hZCBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9y
eSIpOworCisgICAgdWludDMyX3QgYWxpZ25tZW50OworICAgIHVpbnQzMl90IG9mZnNldDsKKyAg
ICBUeXBlZEV4cHJlc3Npb24gcG9pbnRlcjsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IGxvYWQgYWxpZ25tZW50Iik7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3Vy
cmVudE9wY29kZSksICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBleGNl
ZWRzIGxvYWQncyBuYXR1cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8IG1lbW9yeUxvZzJBbGlnbm1l
bnQobV9jdXJyZW50T3Bjb2RlKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBsb2FkIG9mZnNldCIpOworICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgImxvYWQgcG9pbnRlciIpOworCisgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihwb2ludGVyLnR5cGUoKSAhPSBJMzIsIG1fY3VycmVudE9w
Y29kZSwgIiBwb2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKKworICAgIEV4cHJlc3Npb25UeXBlIHJl
c3VsdDsKKyAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChsb2FkKHN0YXRpY19jYXN0PExvYWRP
cFR5cGU+KG1fY3VycmVudE9wY29kZSksIHBvaW50ZXIsIHJlc3VsdCwgb2Zmc2V0KSk7CisgICAg
bV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKG1lbW9yeVR5cGUsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2F1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnN0b3JlKFR5cGUgbWVtb3J5VHlwZSkgLT4gUGFydGlh
bFJlc3VsdAoreworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIW1faW5mby5tZW1vcnksICJz
dG9yZSBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOworCisgICAgdWludDMyX3QgYWxpZ25t
ZW50OworICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWU7Cisg
ICAgVHlwZWRFeHByZXNzaW9uIHBvaW50ZXI7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBzdG9yZSBhbGlnbm1lbnQiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFsaWdubWVudCA+IG1lbW9yeUxvZzJBbGlnbm1lbnQobV9j
dXJyZW50T3Bjb2RlKSwgImJ5dGUgYWxpZ25tZW50ICIsIDF1bGwgPDwgYWxpZ25tZW50LCAiIGV4
Y2VlZHMgc3RvcmUncyBuYXR1cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8IG1lbW9yeUxvZzJBbGln
bm1lbnQobV9jdXJyZW50T3Bjb2RlKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBzdG9yZSBvZmZzZXQiKTsKKyAgICBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUgdmFsdWUiKTsKKyAgICBX
QVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJzdG9yZSBwb2ludGVy
Iik7CisKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHBvaW50ZXIudHlwZSgpICE9IEkzMiwg
bV9jdXJyZW50T3Bjb2RlLCAiIHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIpOworICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYodmFsdWUudHlwZSgpICE9IG1lbW9yeVR5cGUsIG1fY3VycmVudE9wY29k
ZSwgIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CisKKyAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChzdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRl
ciwgdmFsdWUsIG9mZnNldCkpOworICAgIHJldHVybiB7IH07Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIENvbnRleHQ+CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpjaGVja0JyYW5jaFRh
cmdldChjb25zdCBDb250cm9sVHlwZSYgdGFyZ2V0KSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAg
aWYgKCF0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgdGFy
Z2V0LmJyYW5jaFRhcmdldEFyaXR5KCksIENvbnRyb2xUeXBlOjppc1RvcExldmVsKHRhcmdldCkg
PyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNoIHRvIGJsb2NrIiwgIiBvbiBleHBy
ZXNzaW9uIHN0YWNrIG9mIHNpemUgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiLCBidXQg
YmxvY2ssICIsIHRhcmdldC5zaWduYXR1cmUoKS0+dG9TdHJpbmcoKSAsICIgZXhwZWN0cyAiLCB0
YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSwgIiB2YWx1ZXMiKTsKKworCisgICAgdW5zaWduZWQg
b2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gdGFyZ2V0LmJyYW5jaFRhcmdldEFy
aXR5KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdldC5icmFuY2hUYXJnZXRB
cml0eSgpOyArK2kpCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh0
YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgbV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0ICsgaV0u
dHlwZSgpKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgaXMgbm90IGEgc3VidHlwZSBvZiBibG9jaydz
IHR5cGUgYnJhbmNoIHRhcmdldCB0eXBlLiBTdGFjayB2YWx1ZSBoYXMgdHlwZSIsIG1fZXhwcmVz
c2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSwgIiBidXQgYnJhbmNoIHRhcmdldCBleHBlY3Rz
IGEgdmFsdWUgd2l0aCBzdWJ0eXBlIG9mICIsIHRhcmdldC5icmFuY2hUYXJnZXRUeXBlKGkpLCAi
IGF0IGluZGV4ICIsIGkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29udGV4dD4KK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuaWZ5KGNvbnN0IENv
bnRyb2xUeXBlJiBjb250cm9sRGF0YSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYoY29udHJvbERhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCkgIT0g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIGJsb2NrIHdpdGggdHlwZTogIiwgY29udHJvbERh
dGEuc2lnbmF0dXJlKCktPnRvU3RyaW5nKCksICIgcmV0dXJuczogIiwgY29udHJvbERhdGEuc2ln
bmF0dXJlKCktPnJldHVybkNvdW50KCksICIgYnV0IHN0YWNrIGhhczogIiwgbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUobV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgp
LCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSksICJjb250cm9sIGZsb3cg
cmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZS4gIiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlw
ZSgpLCAiIGlzIG5vdCBhIHN1YnR5cGUgb2YgIiwgY29udHJvbERhdGEuc2lnbmF0dXJlKCktPnJl
dHVyblR5cGUoaSkpOwogCi0gICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAg
ICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjE4LDg1ICszNDYsNjYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lv
bigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBzd2l0Y2ggKG1fY3VycmVudE9wY29kZSkgewot
I2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIE9wVHlwZTo6bmFt
ZTogcmV0dXJuIGJpbmFyeUNhc2U8T3BUeXBlOjpuYW1lPigpOworI2RlZmluZSBDUkVBVEVfQ0FT
RShuYW1lLCBpZCwgYjNvcCwgaW5jLCBsaHNUeXBlLCByaHNUeXBlLCByZXR1cm5UeXBlKSBjYXNl
IE9wVHlwZTo6bmFtZTogcmV0dXJuIGJpbmFyeUNhc2U8T3BUeXBlOjpuYW1lPihyZXR1cm5UeXBl
LCBsaHNUeXBlLCByaHNUeXBlKTsKICAgICBGT1JfRUFDSF9XQVNNX0JJTkFSWV9PUChDUkVBVEVf
Q0FTRSkKICN1bmRlZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlk
LCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gdW5hcnlDYXNlPE9wVHlwZTo6
bmFtZT4oKTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYywgb3BlcmFu
ZFR5cGUsIHJldHVyblR5cGUpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gdW5hcnlDYXNlPE9w
VHlwZTo6bmFtZT4ocmV0dXJuVHlwZSwgb3BlcmFuZFR5cGUpOwogICAgIEZPUl9FQUNIX1dBU01f
VU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAjdW5kZWYgQ1JFQVRFX0NBU0UKIAogICAgIGNhc2UgU2Vs
ZWN0OiB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgemVybzsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgbm9uWmVybzsKKyAgICAgICAg
VHlwZWRFeHByZXNzaW9uIGNvbmRpdGlvbjsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHplcm87
CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBub25aZXJvOwogCiAgICAgICAgIFdBU01fVFJZX1BP
UF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAic2VsZWN0IGNvbmRpdGlvbiIpOwog
ICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHplcm8sICJzZWxlY3Qg
emVybyIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKG5vblpl
cm8sICJzZWxlY3Qgbm9uLXplcm8iKTsKIAorICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KGNvbmRpdGlvbi50eXBlKCkgIT0gSTMyLCAic2VsZWN0IGNvbmRpdGlvbiBtdXN0IGJlIGkzMiwg
Z290ICIsIGNvbmRpdGlvbi50eXBlKCkpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KG5vblplcm8udHlwZSgpICE9IHplcm8udHlwZSgpLCAic2VsZWN0IHJlc3VsdCB0eXBlcyBtdXN0
IG1hdGNoLCBnb3QgIiwgbm9uWmVyby50eXBlKCksICIgYW5kICIsIHplcm8udHlwZSgpKTsKKwog
ICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZFNlbGVjdChjb25kaXRpb24sIG5vblplcm8sIHplcm8sIHJlc3VsdCkpOwogCi0g
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoemVyby50eXBlKCksIHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBi
M29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX0xP
QURfT1AoQ1JFQVRFX0NBU0UpIHsKLSAgICAgICAgdWludDMyX3QgYWxpZ25tZW50OwotICAgICAg
ICB1aW50MzJfdCBvZmZzZXQ7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHBvaW50ZXI7Ci0gICAg
ICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBsb2FkIGFsaWdubWVudCIpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFsaWdubWVudCA+IG1lbW9yeUxvZzJBbGlnbm1l
bnQobV9jdXJyZW50T3Bjb2RlKSwgImJ5dGUgYWxpZ25tZW50ICIsIDF1bGwgPDwgYWxpZ25tZW50
LCAiIGV4Y2VlZHMgbG9hZCdzIG5hdHVyYWwgYWxpZ25tZW50ICIsIDF1bGwgPDwgbWVtb3J5TG9n
MkFsaWdubWVudChtX2N1cnJlbnRPcGNvZGUpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBsb2FkIG9mZnNldCIpOwotICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIsICJsb2FkIHBv
aW50ZXIiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQobG9hZChzdGF0aWNfY2Fz
dDxMb2FkT3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCByZXN1bHQsIG9mZnNldCkp
OwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMs
IG1lbW9yeVR5cGUpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gbG9hZChtZW1vcnlUeXBlKTsK
K0ZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NBU0UpCisjdW5kZWYgQ1JFQVRF
X0NBU0UKIAotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKSB7
Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0Owot
ICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgcG9p
bnRlcjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYWxpZ25t
ZW50KSwgImNhbid0IGdldCBzdG9yZSBhbGlnbm1lbnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVudE9wY29kZSks
ICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBleGNlZWRzIHN0b3JlJ3Mg
bmF0dXJhbCBhbGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cyQWxpZ25tZW50KG1fY3VycmVu
dE9wY29kZSkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihv
ZmZzZXQpLCAiY2FuJ3QgZ2V0IHN0b3JlIG9mZnNldCIpOwotICAgICAgICBXQVNNX1RSWV9QT1Bf
RVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUgdmFsdWUiKTsKLSAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAic3RvcmUgcG9pbnRlciIp
OwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxTdG9y
ZU9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCkpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIz
b3AsIGluYywgbWVtb3J5VHlwZSkgY2FzZSBPcFR5cGU6Om5hbWU6IHJldHVybiBzdG9yZShtZW1v
cnlUeXBlKTsKK0ZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogI3Vu
ZGVmIENSRUFURV9DQVNFCiAKICAgICBjYXNlIEYzMkNvbnN0OiB7CiAgICAgICAgIHVpbnQzMl90
IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQzMihjb25z
dGFudCksICJjYW4ndCBwYXJzZSAzMi1iaXQgZmxvYXRpbmctcG9pbnQgY29uc3RhbnQiKTsKLSAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChGMzIs
IGNvbnN0YW50KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVu
ZChGMzIsIG1fY29udGV4dC5hZGRDb25zdGFudChGMzIsIGNvbnN0YW50KSk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBJMzJDb25zdDogewogICAgICAgICBpbnQzMl90
IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDMyKGNv
bnN0YW50KSwgImNhbid0IHBhcnNlIDMyLWJpdCBjb25zdGFudCIpOwotICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50KEkzMiwgY29uc3RhbnQpKTsK
KyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKEkzMiwgbV9jb250
ZXh0LmFkZENvbnN0YW50KEkzMiwgY29uc3RhbnQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKICAgICBjYXNlIEY2NENvbnN0OiB7CiAgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50Owog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChjb25zdGFudCksICJjYW4n
dCBwYXJzZSA2NC1iaXQgZmxvYXRpbmctcG9pbnQgY29uc3RhbnQiKTsKLSAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChGNjQsIGNvbnN0YW50KSk7
CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChGNjQsIG1fY29u
dGV4dC5hZGRDb25zdGFudChGNjQsIGNvbnN0YW50KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCiAgICAgY2FzZSBJNjRDb25zdDogewogICAgICAgICBpbnQ2NF90IGNvbnN0YW50Owog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDY0KGNvbnN0YW50KSwgImNh
bid0IHBhcnNlIDY0LWJpdCBjb25zdGFudCIpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5h
cHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50KEk2NCwgY29uc3RhbnQpKTsKKyAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKEk2NCwgbV9jb250ZXh0LmFkZENvbnN0
YW50KEk2NCwgY29uc3RhbnQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTMw
NCwxMCArNDEzLDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVz
c2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlSZWZlcmVuY2VzKCksICJyZWZlcmVuY2VzIGFyZSBub3QgZW5h
YmxlZCIpOwogICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4OwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IHBhcnNlIHRhYmxl
IGluZGV4Iik7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCwgaW5kZXg7CisgICAgICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX2luZm8udGFibGVDb3VudCgp
LCAidGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBpcyBpbnZhbGlkLCBsaW1pdCBpcyAiLCBt
X2luZm8udGFibGVDb3VudCgpKTsKKworICAgICAgICBUeXBlZEV4cHJlc3Npb24gaW5kZXg7CiAg
ICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oaW5kZXgsICJ0YWJsZS5n
ZXQiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihJMzIgIT0gaW5kZXgudHlwZSgp
LCAidGFibGUuZ2V0IGluZGV4IHRvIHR5cGUgIiwgaW5kZXgudHlwZSgpLCAiIGV4cGVjdGVkICIs
IEkzMik7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRUYWJsZUdldCh0YWJsZUluZGV4LCBpbmRleCwgcmVzdWx0KSk7
Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOworICAgICAgICBUeXBl
IHJlc3VsdFR5cGUgPSBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCk7CisgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChyZXN1bHRUeXBlLCByZXN1
bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMzE1LDEwICs0MzAsMTUgQEAg
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlh
bFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3Nl
bWJseVJlZmVyZW5jZXMoKSwgInJlZmVyZW5jZXMgYXJlIG5vdCBlbmFibGVkIik7CiAgICAgICAg
IHVuc2lnbmVkIHRhYmxlSW5kZXg7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgcGFyc2UgdGFibGUgaW5kZXgiKTsKLSAgICAg
ICAgRXhwcmVzc2lvblR5cGUgdmFsLCBpbmRleDsKLSAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJF
U1NJT05fU1RBQ0tfSU5UTyh2YWwsICJ0YWJsZS5zZXQiKTsKKyAgICAgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1faW5mby50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRl
eCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1faW5mby50YWJsZUNv
dW50KCkpOworICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUsIGluZGV4OworICAgICAgICBX
QVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAidGFibGUuc2V0Iik7CiAg
ICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oaW5kZXgsICJ0YWJsZS5z
ZXQiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVGFibGVTZXQodGFibGVJ
bmRleCwgaW5kZXgsIHZhbCkpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKEkzMiAh
PSBpbmRleC50eXBlKCksICJ0YWJsZS5zZXQgaW5kZXggdG8gdHlwZSAiLCBpbmRleC50eXBlKCks
ICIgZXhwZWN0ZWQgIiwgSTMyKTsKKyAgICAgICAgVHlwZSB0eXBlID0gbV9pbmZvLnRhYmxlc1t0
YWJsZUluZGV4XS53YXNtVHlwZSgpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFp
c1N1YnR5cGUodmFsdWUudHlwZSgpLCB0eXBlKSwgInRhYmxlLnNldCB2YWx1ZSB0byB0eXBlICIs
IHZhbHVlLnR5cGUoKSwgIiBleHBlY3RlZCAiLCB0eXBlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50VHlwZTo6
QW55cmVmIHx8IG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxlbWVu
dFR5cGU6OkZ1bmNyZWYpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUYWJs
ZVNldCh0YWJsZUluZGV4LCBpbmRleCwgdmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKQEAgLTMyOCwyNyArNDQ4LDM5IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VVSW50OChleHRPcCksICJjYW4ndCBwYXJzZSB0YWJsZSBleHRlbmRlZCBv
cGNvZGUiKTsKICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleDsKICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBwYXJzZSB0YWJs
ZSBpbmRleCIpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0g
bV9pbmZvLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52
YWxpZCwgbGltaXQgaXMgIiwgbV9pbmZvLnRhYmxlQ291bnQoKSk7CiAKICAgICAgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxFeHRUYWJsZU9wVHlwZT4oZXh0T3ApKSB7CiAgICAgICAgIGNhc2UgRXh0
VGFibGVPcFR5cGU6OlRhYmxlU2l6ZTogewogICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVz
dWx0OwogICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVGFibGVTaXplKHRh
YmxlSW5kZXgsIHJlc3VsdCkpOwotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5k
KHJlc3VsdCk7CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBl
bmQoSTMyLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBFeHRUYWJsZU9wVHlwZTo6VGFibGVHcm93OiB7Ci0gICAgICAgICAgICBFeHByZXNzaW9u
VHlwZSBmaWxsLCBkZWx0YSwgcmVzdWx0OworICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGZp
bGw7CisgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gZGVsdGE7CiAgICAgICAgICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGRlbHRhLCAidGFibGUuZ3JvdyIpOwogICAg
ICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhmaWxsLCAidGFibGUu
Z3JvdyIpOworCisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUo
ZmlsbC50eXBlKCksIG1faW5mby50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSksICJ0YWJs
ZS5ncm93IGV4cGVjdHMgZmlsbCB2YWx1ZSBvZiB0eXBlICIsIG1faW5mby50YWJsZXNbdGFibGVJ
bmRleF0ud2FzbVR5cGUoKSwgIiBnb3QgIiwgZmlsbC50eXBlKCkpOworICAgICAgICAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihJMzIgIT0gZGVsdGEudHlwZSgpLCAidGFibGUuZ3JvdyBleHBl
Y3RzIGFuIGkzMiBkZWx0YSB2YWx1ZSwgZ290ICIsIGRlbHRhLnR5cGUoKSk7CisKKyAgICAgICAg
ICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZFRhYmxlR3Jvdyh0YWJsZUluZGV4LCBmaWxsLCBkZWx0YSwgcmVzdWx0KSk7Ci0g
ICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJMzIsIHJlc3VsdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dFRhYmxlT3BUeXBlOjpU
YWJsZUZpbGw6IHsKLSAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgZmlsbCwgY291
bnQ7CisgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gb2Zmc2V0LCBmaWxsLCBjb3VudDsKICAg
ICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY291bnQsICJ0YWJs
ZS5maWxsIik7CiAgICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KGZpbGwsICJ0YWJsZS5maWxsIik7CiAgICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lP
Tl9TVEFDS19JTlRPKG9mZnNldCwgInRhYmxlLmZpbGwiKTsKKworICAgICAgICAgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGZpbGwudHlwZSgpLCBtX2luZm8udGFibGVzW3Rh
YmxlSW5kZXhdLndhc21UeXBlKCkpLCAidGFibGUuZmlsbCBleHBlY3RzIGZpbGwgdmFsdWUgb2Yg
dHlwZSAiLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCksICIgZ290ICIsIGZp
bGwudHlwZSgpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoSTMyICE9IG9m
ZnNldC50eXBlKCksICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4gaTMyIG9mZnNldCB2YWx1ZSwgZ290
ICIsIG9mZnNldC50eXBlKCkpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihJ
MzIgIT0gY291bnQudHlwZSgpLCAidGFibGUuZmlsbCBleHBlY3RzIGFuIGkzMiBjb3VudCB2YWx1
ZSwgZ290ICIsIGNvdW50LnR5cGUoKSk7CisKICAgICAgICAgICAgIFdBU01fVFJZX0FERF9UT19D
T05URVhUKGFkZFRhYmxlRmlsbCh0YWJsZUluZGV4LCBvZmZzZXQsIGZpbGwsIGNvdW50KSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYxLDE2ICs0OTMsMTggQEAgYXV0byBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3Vs
dAogCiAgICAgY2FzZSBSZWZOdWxsOiB7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9w
dGlvbnM6OnVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVmZXJlbmNlcyBhcmUgbm90IGVu
YWJsZWQiKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRD
b25zdGFudChGdW5jcmVmLCBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSk7CisgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChGdW5jcmVmLCBtX2NvbnRleHQuYWRk
Q29uc3RhbnQoRnVuY3JlZiwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgUmVmSXNOdWxsOiB7CiAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVm
ZXJlbmNlcyBhcmUgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0
LCB2YWx1ZTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlOwogICAgICAgICBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAicmVmLmlzX251bGwiKTsKKyAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZhbHVlLnR5cGUoKSwgQW55cmVm
KSwgInJlZi5pc19udWxsIHRvIHR5cGUgIiwgdmFsdWUudHlwZSgpLCAiIGV4cGVjdGVkICIsIEFu
eXJlZik7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkUmVmSXNOdWxsKHZhbHVlLCByZXN1bHQpKTsKLSAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LmNvbnN0cnVjdEFuZEFwcGVuZChJMzIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCkBAIC0zODAsOCArNTE0LDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlSZWZlcmVuY2VzKCksICJyZWZlcmVuY2Vz
IGFyZSBub3QgZW5hYmxlZCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHJlZi5mdW5jIik7CiAKKyAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2luZm8uZnVuY3Rpb25JbmRleFNw
YWNlU2l6ZSgpLCAicmVmLmZ1bmMgaW5kZXggIiwgaW5kZXgsICIgaXMgdG9vIGxhcmdlLCBtYXgg
aXMgIiwgbV9pbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CisgICAgICAgIG1faW5mby5h
ZGRSZWZlcmVuY2VkRnVuY3Rpb24oaW5kZXgpOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09O
VEVYVChhZGRSZWZGdW5jKGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZChGdW5jcmVmLCByZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApA
QCAtMzg5LDE2ICs1MjUsMTggQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VF
eHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICB1aW50MzJfdCBpbmRleDsKICAg
ICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIGdldF9sb2NhbCIp
OworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbG9jYWxzLnNpemUo
KSwgImF0dGVtcHQgdG8gdXNlIHVua25vd24gbG9jYWwgIiwgaW5kZXgsICIgbGFzdCBvbmUgaXMg
IiwgbV9sb2NhbHMuc2l6ZSgpKTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0
TG9jYWwoaW5kZXgsIHJlc3VsdCkpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQo
cmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKG1f
bG9jYWxzW2luZGV4XSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlOwogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQg
aW5kZXggZm9yIHNldF9sb2NhbCIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9T
VEFDS19JTlRPKHZhbHVlLCAic2V0X2xvY2FsIik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZSh2YWx1ZS50eXBlKCksIG1fbG9jYWxzW2luZGV4XSksICJzZXRfbG9j
YWwgdG8gdHlwZSAiLCB2YWx1ZS50eXBlKCksICIgZXhwZWN0ZWQgIiwgbV9sb2NhbHNbaW5kZXhd
KTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIHZhbHVl
KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNDA3LDcgKzU0NSw5IEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBmb3IgdGVlX2xvY2FsIik7
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suaXNFbXB0eSgp
LCAiY2FuJ3QgdGVlX2xvY2FsIG9uIGVtcHR5IGV4cHJlc3Npb24gc3RhY2siKTsKLSAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIG1fZXhwcmVzc2lvblN0YWNr
Lmxhc3QoKSkpOworICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBtX2V4cHJlc3Npb25T
dGFjay5sYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2
YWx1ZS50eXBlKCksIG1fbG9jYWxzW2luZGV4XSksICJzZXRfbG9jYWwgdG8gdHlwZSAiLCB2YWx1
ZS50eXBlKCksICIgZXhwZWN0ZWQgIiwgbV9sb2NhbHNbaW5kZXhdKTsKKyAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIHZhbHVlKSk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCkBAIC00MTUsMTYgKzU1NSwyNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHVp
bnQzMl90IGluZGV4OwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBnZXRf
Z2xvYmFsJ3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+
PSBtX2luZm8uZ2xvYmFscy5zaXplKCksICJnZXRfZ2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25v
d24gZ2xvYmFsLCBsaW1pdCBpcyAiLCBtX2luZm8uZ2xvYmFscy5zaXplKCkpOworICAgICAgICBU
eXBlIHJlc3VsdFR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAgICAgQVNT
RVJUKGlzVmFsdWVUeXBlKHJlc3VsdFR5cGUpKTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoZ2V0R2xvYmFsKGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZChyZXN1bHRUeXBlLCByZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
IAogICAgIGNhc2UgU2V0R2xvYmFsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAg
ICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlOwog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4n
dCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNT
SU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CisKKyAgICAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2luZm8uZ2xvYmFscy5zaXplKCksICJzZXRf
Z2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBsaW1pdCBpcyAiLCBtX2luZm8u
Z2xvYmFscy5zaXplKCkpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1faW5mby5n
bG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlLCAic2V0X2dsb2Jh
bCAiLCBpbmRleCwgIiBpcyBpbW11dGFibGUiKTsKKworICAgICAgICBUeXBlIGdsb2JhbFR5cGUg
PSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAgICAgQVNTRVJUKGlzVmFsdWVUeXBl
KGdsb2JhbFR5cGUpKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihnbG9iYWxUeXBl
ICE9IHZhbHVlLnR5cGUoKSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgd2l0aCB0eXBlICIsIGds
b2JhbFR5cGUsICIgd2l0aCBhIHZhcmlhYmxlIG9mIHR5cGUgIiwgdmFsdWUudHlwZSgpKTsKKwog
ICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzZXRHbG9iYWwoaW5kZXgsIHZhbHVlKSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNDQyLDE1ICs1OTMsMjIgQEAgYXV0byBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3Vs
dAogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNhbGxlZVNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgY2FsbCdzICIs
IGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQobV9leHBy
ZXNzaW9uU3RhY2suYXQoaSkpOworICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1f
ZXhwcmVzc2lvblN0YWNrLmF0KGkpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RighaXNTdWJ0eXBlKGFyZy50eXBlKCksIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmly
c3RBcmd1bWVudEluZGV4KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGwsIGdvdCAi
LCBhcmcudHlwZSgpLCAiLCBleHBlY3RlZCAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAt
IGZpcnN0QXJndW1lbnRJbmRleCkpOworICAgICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQo
YXJnKTsKICAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOwogICAg
ICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5k
ZXgpOwogCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCkgPT0gYXJncy5zaXplKCkpOworCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBjYWxs
ZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdHMpKTsKIAotICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5hcHBlbmRWZWN0b3IocmVzdWx0cyk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZVNp
Z25hdHVyZS5yZXR1cm5Db3VudCgpID09IHJlc3VsdHMuc2l6ZSgpKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkK
KyAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChjYWxsZWVT
aWduYXR1cmUucmV0dXJuVHlwZShpKSwgcmVzdWx0c1tpXSk7CiAKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CkBAIC00NjksMTggKzYyNywyNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIHNpemVfdCBh
cmd1bWVudENvdW50ID0gY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDE7IC8vIEFk
ZCB0aGUgY2FsbGVlJ3MgaW5kZXguCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1l
bnRDb3VudCA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbGxfaW5kaXJlY3QgZXhwZWN0
cyAiLCBhcmd1bWVudENvdW50LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBleHByZXNzaW9uIHN0YWNr
IGN1cnJlbnRseSBob2xkcyAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7
CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5sYXN0
KCkudHlwZSgpICE9IEkzMiwgIm5vbi1pMzIgY2FsbF9pbmRpcmVjdCBpbmRleCAiLCBtX2V4cHJl
c3Npb25TdGFjay5sYXN0KCkudHlwZSgpKTsKKwogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+IGFyZ3M7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
IiwgYXJndW1lbnRDb3VudCwgIiBjYWxsX2luZGlyZWN0IGFyZ3VtZW50cyIpOwogICAgICAgICBz
aXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gYXJn
dW1lbnRDb3VudDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsg
aSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhcmdzLnVu
Y2hlY2tlZEFwcGVuZChtX2V4cHJlc3Npb25TdGFjay5hdChpKSk7CisgICAgICAgICAgICBUeXBl
ZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQoaSk7CisgICAgICAgICAgICBp
ZiAoaSA8IGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpCisgICAgICAgICAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZy50eXBlKCksIGNhbGxlZVNpZ25h
dHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KSksICJhcmd1bWVudCB0eXBlIG1p
c21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLCAiLCBleHBlY3RlZCAi
LCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkpOworICAg
ICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoYXJnKTsKICAgICAgICAgICAgIG1fY29udGV4
dC5kaWRQb3BWYWx1ZUZyb21TdGFjaygpOwogICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCisKKwogICAgICAgICBSZXN1bHRM
aXN0IHJlc3VsdHM7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRp
cmVjdCh0YWJsZUluZGV4LCBjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdHMpKTsKLSAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kVmVjdG9yKHJlc3VsdHMpOworCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsZWVTaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytp
KQorICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGNhbGxl
ZVNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpLCByZXN1bHRzW2ldKTsKIAogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KQEAgLTQ4OSw2ICs2NTYsMTMgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBCbG9ja1Np
Z25hdHVyZSBpbmxpbmVTaWduYXR1cmU7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlQmxvY2tTaWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGJs
b2NrJ3Mgc2lnbmF0dXJlIik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4
cHJlc3Npb25TdGFjay5zaXplKCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwg
IlRvbyBmZXcgdmFsdWVzIG9uIHN0YWNrIGZvciBibG9jay4gQmxvY2sgZXhwZWN0cyAiLCBpbmxp
bmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gQmxvY2sgaGFzIGlubGluZVNpZ25hdHVyZTog
IiwgaW5saW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBUeXBlIHR5cGUgPSBtX2V4cHJl
c3Npb25TdGFjay5hdChvZmZzZXQgKyBpKS50eXBlKCk7CisgICAgICAgICAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodHlwZSwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChp
KSksICJCbG9jayBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgYSBz
dWJ0eXBlIG9mICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICIgYnV0IGFyZ3VtZW50
IGhhcyB0eXBlICIsIHR5cGUpOworICAgICAgICB9CisKICAgICAgICAgaW50NjRfdCBvbGRTaXpl
ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAgICAgICBTdGFjayBuZXdTdGFjazsKICAg
ICAgICAgQ29udHJvbFR5cGUgYmxvY2s7CkBAIC01MDUsNiArNjc5LDEzIEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwg
ImNhbid0IGdldCBsb29wJ3Mgc2lnbmF0dXJlIik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSwgIlRvbyBmZXcgdmFsdWVzIG9uIHN0YWNrIGZvciBsb29wIGJsb2NrLiBMb29w
IGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5
ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIExvb3AgaGFzIGlu
bGluZVNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsKKyAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBUeXBl
IHR5cGUgPSBtX2V4cHJlc3Npb25TdGFjay5hdChvZmZzZXQgKyBpKS50eXBlKCk7CisgICAgICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodHlwZSwgaW5saW5lU2lnbmF0
dXJlLT5hcmd1bWVudChpKSksICJMb29wIGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4Iiwg
aSwgIiB0byBiZSBhIHN1YnR5cGUgb2YgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwg
IiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgdHlwZSk7CisgICAgICAgIH0KKwogICAgICAgICBp
bnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNr
IG5ld1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBsb29wOwpAQCAtNTE5LDEwICs3MDAsMTYg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFy
dGlhbFJlc3VsdAogCiAgICAgY2FzZSBJZjogewogICAgICAgICBCbG9ja1NpZ25hdHVyZSBpbmxp
bmVTaWduYXR1cmU7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKKyAgICAgICAg
VHlwZWRFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQg
aWYncyBzaWduYXR1cmUiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyhjb25kaXRpb24sICJpZiBjb25kaXRpb24iKTsKIAorICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKGNvbmRpdGlvbi50eXBlKCkgIT0gSTMyLCAiaWYgY29uZGl0aW9uIG11c3QgYmUg
aTMyLCBnb3QgIiwgY29uZGl0aW9uLnR5cGUoKSk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgaWYgYmxvY2suIElmIGV4
cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIs
IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIElmIGJsb2NrIGhhcyBz
aWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CisgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5l
U2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoIWlzU3VidHlwZShtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBl
KCksIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1
bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgYSBzdWJ0eXBlIG9mICIsIGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnQoaSksICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhwcmVzc2lvblN0
YWNrW2ldLnR5cGUoKSk7CisKICAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpOwogICAgICAgICBTdGFjayBuZXdTdGFjazsKICAgICAgICAgQ29udHJvbFR5
cGUgY29udHJvbDsKQEAgLTUzNywzMiArNzI0LDQwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIGNhc2UgRWxz
ZTogewogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1fY29udHJvbFN0YWNrLnNpemUoKSA9
PSAxLCAiY2FuJ3QgdXNlIGVsc2UgYmxvY2sgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGZ1bmN0aW9u
Iik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEVsc2UobV9jb250cm9sU3Rh
Y2subGFzdCgpLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwotICAgICAgICBtX2V4
cHJlc3Npb25TdGFjayA9IFdURk1vdmUobV9jb250cm9sU3RhY2subGFzdCgpLmVsc2VCbG9ja1N0
YWNrKTsKKworICAgICAgICBDb250cm9sRW50cnkmIGNvbnRyb2xFbnRyeSA9IG1fY29udHJvbFN0
YWNrLmxhc3QoKTsKKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGNv
bnRyb2xFbnRyeS5jb250cm9sRGF0YSkpOworCisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKGFkZEVsc2UoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykp
OworICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IFdURk1vdmUoY29udHJvbEVudHJ5LmVsc2VC
bG9ja1N0YWNrKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIEJyOgog
ICAgIGNhc2UgQnJJZjogewogICAgICAgICB1aW50MzJfdCB0YXJnZXQ7Ci0gICAgICAgIEV4cHJl
c3Npb25UeXBlIGNvbmRpdGlvbiA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbigpOworICAgICAg
ICBUeXBlZEV4cHJlc3Npb24gY29uZGl0aW9uOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMih0YXJnZXQpLCAiY2FuJ3QgZ2V0IGJyIC8gYnJfaWYncyB0YXJnZXQi
KTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YXJnZXQgPj0gbV9jb250cm9sU3RhY2su
c2l6ZSgpLCAiYnIgLyBicl9pZidzIHRhcmdldCAiLCB0YXJnZXQsICIgZXhjZWVkcyBjb250cm9s
IHN0YWNrIHNpemUgIiwgbV9jb250cm9sU3RhY2suc2l6ZSgpKTsKLSAgICAgICAgaWYgKG1fY3Vy
cmVudE9wY29kZSA9PSBCcklmKQorICAgICAgICBpZiAobV9jdXJyZW50T3Bjb2RlID09IEJySWYp
IHsKICAgICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0
aW9uLCAiYnIgLyBicl9pZiBjb25kaXRpb24iKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24udHlwZSgpICE9IEkzMiwgImNvbmRpdGlv
bmFsIGJyYW5jaCB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNvbmRpdGlvbi50eXBlKCkpOwor
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7Cisg
ICAgICAgICAgICBjb25kaXRpb24gPSBUeXBlZEV4cHJlc3Npb24geyBWb2lkLCBDb250ZXh0Ojpl
bXB0eUV4cHJlc3Npb24oKSB9OworICAgICAgICB9CiAKICAgICAgICAgQ29udHJvbFR5cGUmIGRh
dGEgPSBtX2NvbnRyb2xTdGFja1ttX2NvbnRyb2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5j
b250cm9sRGF0YTsKLQorICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGNoZWNrQnJh
bmNoVGFyZ2V0KGRhdGEpKTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQnJh
bmNoKGRhdGEsIGNvbmRpdGlvbiwgbV9leHByZXNzaW9uU3RhY2spKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICBjYXNlIEJyVGFibGU6IHsKICAgICAgICAgdWludDMyX3QgbnVt
YmVyT2ZUYXJnZXRzOwotICAgICAgICB1aW50MzJfdCBkZWZhdWx0VGFyZ2V0OwotICAgICAgICBF
eHByZXNzaW9uVHlwZSBjb25kaXRpb247CisgICAgICAgIHVpbnQzMl90IGRlZmF1bHRUYXJnZXRJ
bmRleDsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgICAgICAgVmVjdG9y
PENvbnRyb2xUeXBlKj4gdGFyZ2V0czsKIAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihudW1iZXJPZlRhcmdldHMpLCAiY2FuJ3QgZ2V0IHRoZSBudW1iZXIgb2Yg
dGFyZ2V0cyBmb3IgYnJfdGFibGUiKTsKQEAgLTU3NiwxNyArNzcxLDI5IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICAgICAgICAgIHRhcmdldHMudW5jaGVja2VkQXBwZW5kKCZtX2NvbnRyb2xTdGFja1ttX2NvbnRy
b2xTdGFjay5zaXplKCkgLSAxIC0gdGFyZ2V0XS5jb250cm9sRGF0YSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihkZWZhdWx0VGFyZ2V0
KSwgImNhbid0IGdldCBkZWZhdWx0IHRhcmdldCBmb3IgYnJfdGFibGUiKTsKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihkZWZhdWx0VGFyZ2V0ID49IG1fY29udHJvbFN0YWNrLnNpemUoKSwg
ImJyX3RhYmxlJ3MgZGVmYXVsdCB0YXJnZXQgIiwgZGVmYXVsdFRhcmdldCwgIiBleGNlZWRzIGNv
bnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihkZWZhdWx0VGFyZ2V0SW5kZXgpLCAiY2Fu
J3QgZ2V0IGRlZmF1bHQgdGFyZ2V0IGZvciBicl90YWJsZSIpOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGRlZmF1bHRUYXJnZXRJbmRleCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJi
cl90YWJsZSdzIGRlZmF1bHQgdGFyZ2V0ICIsIGRlZmF1bHRUYXJnZXRJbmRleCwgIiBleGNlZWRz
IGNvbnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5zaXplKCkpOworICAgICAgICBD
b250cm9sVHlwZSYgZGVmYXVsdFRhcmdldCA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNr
LnNpemUoKSAtIDEgLSBkZWZhdWx0VGFyZ2V0SW5kZXhdLmNvbnRyb2xEYXRhOwogCiAgICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAiYnJfdGFibGUg
Y29uZGl0aW9uIik7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFN3aXRjaChj
b25kaXRpb24sIHRhcmdldHMsIG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAt
IDEgLSBkZWZhdWx0VGFyZ2V0XS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsKKyAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24udHlwZSgpICE9IEkzMiwgImJy
X3RhYmxlIHdpdGggbm9uLWkzMiBjb25kaXRpb24gIiwgY29uZGl0aW9uLnR5cGUoKSk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIENvbnRyb2xUeXBlKiB0YXJnZXQgPSB0YXJnZXRzW2ldOworICAgICAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCkg
IT0gdGFyZ2V0LT5icmFuY2hUYXJnZXRBcml0eSgpLCAiYnJfdGFibGUgdGFyZ2V0IHR5cGUgc2l6
ZSBtaXNtYXRjaC4gRGVmYXVsdCBoYXMgc2l6ZTogIiwgZGVmYXVsdFRhcmdldC5icmFuY2hUYXJn
ZXRBcml0eSgpLCAiYnV0IHRhcmdldDogIiwgaSwgIiBoYXMgc2l6ZTogIiwgdGFyZ2V0LT5icmFu
Y2hUYXJnZXRBcml0eSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdHlwZSA9IDA7IHR5
cGUgPCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCk7ICsrdHlwZSkKKyAgICAgICAg
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoZGVmYXVsdFRhcmdldC5i
cmFuY2hUYXJnZXRUeXBlKHR5cGUpLCB0YXJnZXQtPmJyYW5jaFRhcmdldFR5cGUodHlwZSkpLCAi
YnJfdGFibGUgdGFyZ2V0IHR5cGUgbWlzbWF0Y2ggYXQgb2Zmc2V0ICIsIHR5cGUsICIgZXhwZWN0
ZWQ6ICIsIGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSwgIiBidXQgc2F3OiAi
LCB0YXJnZXQtPmJyYW5jaFRhcmdldFR5cGUodHlwZSksICIgd2hlbiB0YXJnZXRpbmcgYmxvY2s6
ICIsIHRhcmdldC0+c2lnbmF0dXJlKCktPnRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhjaGVja0JyYW5jaFRhcmdldChkZWZhdWx0VGFy
Z2V0KSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFN3aXRjaChjb25kaXRp
b24sIHRhcmdldHMsIGRlZmF1bHRUYXJnZXQsIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAKICAgICAg
ICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgY2FzZSBSZXR1cm46IHsKKyAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhj
aGVja0JyYW5jaFRhcmdldChtX2NvbnRyb2xTdGFja1swXS5jb250cm9sRGF0YSkpOwogICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZXR1cm4obV9jb250cm9sU3RhY2tbMF0uY29u
dHJvbERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9j
a3MgPSAxOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNTk0LDEzICs4MDEsMTUgQEAgYXV0byBG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3Vs
dAogCiAgICAgY2FzZSBFbmQ6IHsKICAgICAgICAgQ29udHJvbEVudHJ5IGRhdGEgPSBtX2NvbnRy
b2xTdGFjay50YWtlTGFzdCgpOwotICAgICAgICBpZiAobV9jb250ZXh0LmlzQ29udHJvbFR5cGVJ
ZihkYXRhLmNvbnRyb2xEYXRhKSkgeworICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzSWYoZGF0
YS5jb250cm9sRGF0YSkpIHsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
dW5pZnkoZGF0YS5jb250cm9sRGF0YSkpOwogICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkRWxzZShkYXRhLmNvbnRyb2xEYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAg
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2sgPSBXVEZNb3ZlKGRhdGEuZWxzZUJsb2NrU3RhY2sp
OwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgbGl0dGxlIHdlaXJkIGlu
IHRoYXQgaXQgd2lsbCBtb2RpZnkgdGhlIGV4cHJlc3Npb25TdGFjayBmb3IgdGhlIHJlc3VsdCBv
ZiB0aGUgYmxvY2suCiAgICAgICAgIC8vIFRoYXQncyBhIGxpdHRsZSB0b28gZWZmZWN0ZnVsIGZv
ciBtZSBidXQgSSBkb24ndCBoYXZlIGEgYmV0dGVyIEFQSSByaWdodCBub3cuCiAgICAgICAgIC8v
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDM1MworICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KGRhdGEuY29udHJvbERhdGEpKTsK
ICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoZW5kQmxvY2soZGF0YSwgbV9leHByZXNz
aW9uU3RhY2spKTsKICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc3dhcChkYXRhLmVuY2xvc2Vk
RXhwcmVzc2lvblN0YWNrKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTYzMCwxMiArODM5LDEz
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MShy
ZXNlcnZlZCksICJjYW4ndCBwYXJzZSByZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnki
KTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihyZXNlcnZlZCAhPSAwLCAicmVzZXJ2ZWQg
dmFyVWludDEgZm9yIGdyb3dfbWVtb3J5IG11c3QgYmUgemVybyIpOwogCi0gICAgICAgIEV4cHJl
c3Npb25UeXBlIGRlbHRhOworICAgICAgICBUeXBlZEV4cHJlc3Npb24gZGVsdGE7CiAgICAgICAg
IFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oZGVsdGEsICJleHBlY3QgYW4gaTMy
IGFyZ3VtZW50IHRvIGdyb3dfbWVtb3J5IG9uIHRoZSBzdGFjayIpOworICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKGRlbHRhLnR5cGUoKSAhPSBJMzIsICJncm93X21lbW9yeSB3aXRoIG5v
bi1pMzIgZGVsdGEgYXJndW1lbnQgaGFzIHR5cGU6ICIsIGRlbHRhLnR5cGUoKSk7CiAKICAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRHcm93TWVtb3J5KGRlbHRhLCByZXN1bHQpKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZChJMzIsIHJlc3VsdCk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC02
NDksNyArODU5LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsK
ICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ3VycmVudE1lbW9yeShyZXN1bHQp
KTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJMzIsIHJlc3VsdCk7CiAKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC02NjQsNyArODc0LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFi
bGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChtX3VucmVhY2hh
YmxlQmxvY2tzKTsKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2Fz
ZSBPcFR5cGU6Om5hbWU6CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBPcFR5
cGU6Om5hbWU6CiAgICAgc3dpdGNoIChtX2N1cnJlbnRPcGNvZGUpIHsKICAgICBjYXNlIEVsc2U6
IHsKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3MgPiAxKQpAQCAtNjgwLDkgKzg5MCwx
MCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVz
c2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBjYXNlIEVuZDogewogICAgICAgICBpZiAobV91
bnJlYWNoYWJsZUJsb2NrcyA9PSAxKSB7CiAgICAgICAgICAgICBDb250cm9sRW50cnkgZGF0YSA9
IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBpZiAobV9jb250ZXh0Lmlz
Q29udHJvbFR5cGVJZihkYXRhLmNvbnRyb2xEYXRhKSkgeworICAgICAgICAgICAgaWYgKENvbnRy
b2xUeXBlOjppc0lmKGRhdGEuY29udHJvbERhdGEpKSB7CiAgICAgICAgICAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoYWRkRWxzZVRvVW5yZWFjaGFibGUoZGF0YS5jb250cm9sRGF0YSkp
OwogICAgICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShkYXRhLmVsc2VC
bG9ja1N0YWNrKTsKKyAgICAgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVu
aWZ5KGRhdGEuY29udHJvbERhdGEpKTsKICAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRW5kVG9V
bnJlYWNoYWJsZShkYXRhKSk7CkBAIC04MTQsNCArMTAyNSw4IEBAIGF1dG8gRnVuY3Rpb25QYXJz
ZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3Vs
dAogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCisjdW5kZWYgV0FTTV9UUllfUE9QX0VY
UFJFU1NJT05fU1RBQ0tfSU5UTworI3VuZGVmIFdBU01fVFJZX0FERF9UT19DT05URVhUCisjdW5k
ZWYgV0FTTV9WQUxJREFUT1JfRkFJTF9JRgorCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAKaW5kZXggOWE1M2IzMzlkNDY0NTRmZjU5ZjRiODYwYzgyNDI3MTBhZmQxNzhjYS4uYWUzYTdm
MWYxNGYxOWNiYzJmYWQxNTE1NzE5Mzg0YjdkNjU5MWY5MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC00OCw4ICs0OCw2IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBMTEludEdlbmVyYXRvciA6
IHB1YmxpYyBCeXRlY29kZUdlbmVyYXRvckJhc2U8R2VuZXJhdG9yVHJhaXRzPiB7CiBwdWJsaWM6
CiAgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWaXJ0dWFsUmVnaXN0ZXI7Ci0gICAgdXNpbmcg
RXhwcmVzc2lvbkxpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+OwotICAgIHVzaW5nIFN0
YWNrID0gVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxNiwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+Owog
CiAgICAgc3RydWN0IENvbnRyb2xMb29wICB7CiAgICAgICAgIFJlZjxMYWJlbD4gbV9ib2R5OwpA
QCAtNzMsMTQgKzcxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIENvbnRyb2xUeXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNp
Z25lZCBzdGFja1NpemUsIFJlZjxMYWJlbD4mJiBib2R5LCBSZWZQdHI8TGFiZWw+JiYgY29udGlu
dWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgdG9wTGV2ZWwoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51
YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1
cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRp
bnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9KTsKKyAgICAgICAgICAgIHJl
dHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSwgV1RGTW92ZShjb250aW51YXRp
b24pLCBDb250cm9sVG9wTGV2ZWwgeyB9KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBD
b250cm9sVHlwZSB0b3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0
YWNrU2l6ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKKyAgICAgICAgc3RhdGljIENv
bnRyb2xUeXBlIGxvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1Np
emUsIFJlZjxMYWJlbD4mJiBib2R5LCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1Np
emUsIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbFRvcExldmVsIHsgfSk7CisgICAgICAg
ICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sTG9vcCB7IFdU
Rk1vdmUoYm9keSkgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUg
YmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZlB0
cjxMYWJlbD4mJiBjb250aW51YXRpb24pCkBAIC05Myw2ICs5MSwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sSWYgeyBX
VEZNb3ZlKGFsdGVybmF0ZSkgfSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgYm9vbCBp
c0lmKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENvbnRyb2xJZj4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BM
ZXZlbChjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxDb250cm9sVG9wTGV2ZWw+KGNvbnRyb2wpOyB9CisKKyAgICAgICAgdW5zaWduZWQg
c3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KKyAgICAgICAgQmxvY2tT
aWduYXR1cmUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KKwogICAg
ICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsRm9yQnJhbmNoKCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0
aGlzKSkKQEAgLTEwMCwxNCArMTA0LDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBt
X2NvbnRpbnVhdGlvbjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIHRhcmdldEFyaXR5
KCkgY29uc3QKKyAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBj
b25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxD
b250cm9sTG9vcD4oKnRoaXMpKQogICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOwogICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5D
b3VudCgpOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFja1NpemU7IH0KKyAgICAgICAgVHlwZSBicmFuY2hUYXJnZXRUeXBlKHVu
c2lnbmVkIGkpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnJhbmNo
VGFyZ2V0QXJpdHkoKSk7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxD
b250cm9sTG9vcD4oKnRoaXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+
YXJndW1lbnQoaSk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVyblR5cGUo
aSk7CisgICAgICAgIH0KIAogICAgICAgICBCbG9ja1NpZ25hdHVyZSBtX3NpZ25hdHVyZTsKICAg
ICAgICAgdW5zaWduZWQgbV9zdGFja1NpemU7CkBAIC0xMjYsMTQgKzEzNiwxNSBAQCBwdWJsaWM6
CiAKICAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CiAgICAgdXNpbmcgUGFydGlhbFJlc3Vs
dCA9IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47Ci0gICAgdXNpbmcgUmVzdWx0TGlzdCA9IEV4
cHJlc3Npb25MaXN0OwogICAgIHVzaW5nIFVuZXhwZWN0ZWRSZXN1bHQgPSBVbmV4cGVjdGVkPEVy
cm9yVHlwZT47CiAKICAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxMTElu
dEdlbmVyYXRvcj46OkNvbnRyb2xFbnRyeTsKKyAgICB1c2luZyBDb250cm9sU3RhY2sgPSBGdW5j
dGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj46OkNvbnRyb2xTdGFjazsKKyAgICB1c2luZyBSZXN1
bHRMaXN0ID0gRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+OjpSZXN1bHRMaXN0OworICAg
IHVzaW5nIFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+OjpTdGFjazsKKyAg
ICB1c2luZyBUeXBlZEV4cHJlc3Npb24gPSBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj46
OlR5cGVkRXhwcmVzc2lvbjsKIAotICAgIExMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25z
dCBTaWduYXR1cmUmKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
ZmluYWxpemUoKTsKKyAgICBzdGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkg
eyByZXR1cm4geyB9OyB9OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAg
TkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJn
cy4uLiBhcmdzKSBjb25zdApAQCAtMTQyLDYgKzE1MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWls
ZWQgY29tcGlsaW5nOiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKICAgICB9CiAKKyAgICBM
TEludEdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBmaW5hbGl6ZSgpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhwcmVzc2lv
bkxpc3RBLCB0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEI+CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dp
dGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdEEmIGRlc3RpbmF0aW9ucywgY29uc3QgRXhwcmVz
c2lvbkxpc3RCJiB2YWx1ZXMpCiAgICAgewpAQCAtMTY2LDEwICsxODEsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGRpZFBvcFZhbHVlRnJvbVN0YWNrKCkgeyAtLW1fc3RhY2tTaXplOyB9CiAKLSAg
ICBzdGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyIHsgfTsgfTsKLSAgICBTdGFjayBjcmVhdGVTdGFjaygpIHsgcmV0dXJuIFN0YWNr
KCk7IH0KLSAgICBib29sIGlzQ29udHJvbFR5cGVJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJv
bCkgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9
Ci0KICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
TG9jYWwoVHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5
cGUsIGludDY0X3QpOwpAQCAtMjIyLDE1ICsyMzMsMTUgQEAgcHVibGljOgogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25z
dCBTdGFjayYpOwogCiAgICAgLy8gQ2FsbHMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cyk7Ci0g
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5z
aWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZGlkRmluaXNoUGFyc2lu
Z0xvY2FscygpOwogCiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5l
cmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CiAKLSAgICB2b2lkIGR1bXAo
Y29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mLCBjb25zdCBTdGFjayopIHsgfQorICAgIHZvaWQg
ZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFjayopIHsgfQogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBHZW5lcmljTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhaXRzPjsKQEAgLTIzOCw4
ICsyNDksOCBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBMTEludENhbGxJbmZvcm1hdGlvbiB7CiAg
ICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0OwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlN0
YWNrQXJndW1lbnRzOwotICAgICAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHM7Ci0gICAgICAg
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwcmVzc2lvbkxpc3QmKT4gY29tbWl0UmVzdWx0czsK
KyAgICAgICAgUmVzdWx0TGlzdCBhcmd1bWVudHM7CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoUmVzdWx0TGlzdCYpPiBjb21taXRSZXN1bHRzOwogICAgIH07CiAKICAgICBMTEludENh
bGxJbmZvcm1hdGlvbiBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJik7
CkBAIC0yODEsOCArMjkyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERyb3BLZWVwQ291bnQo
Y29uc3QgQ29udHJvbFR5cGUmIHRhcmdldCwgdW5zaWduZWQmIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCYgZHJvcCwgdW5zaWduZWQmIGtlZXApCiAgICAgewogICAgICAgICBzdGFydE9mZnNldCA9IHRh
cmdldC5zdGFja1NpemUoKSArIDE7Ci0gICAgICAgIGtlZXAgPSB0YXJnZXQudGFyZ2V0QXJpdHko
KTsKLSAgICAgICAgZHJvcCA9IG1fc3RhY2tTaXplIC0gdGFyZ2V0LnN0YWNrU2l6ZSgpIC0gdGFy
Z2V0LnRhcmdldEFyaXR5KCk7CisgICAgICAgIGtlZXAgPSB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJp
dHkoKTsKKyAgICAgICAgZHJvcCA9IG1fc3RhY2tTaXplIC0gdGFyZ2V0LnN0YWNrU2l6ZSgpIC0g
dGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCk7CiAgICAgfQogCiAgICAgdm9pZCBkcm9wS2VlcChT
dGFjayYgdmFsdWVzLCBjb25zdCBDb250cm9sVHlwZSYgdGFyZ2V0LCBib29sIGRyb3BWYWx1ZXMp
CkBAIC0zNTEsMzIgKzM2MiwzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgd2Fsa0V4cHJlc3Npb25TdGFjayhl
eHByZXNzaW9uU3RhY2ssIFsmXShWaXJ0dWFsUmVnaXN0ZXImIGV4cHJlc3Npb24sIFZpcnR1YWxS
ZWdpc3RlciBzbG90KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhwcmVzc2lvbiA9PSBzbG90IHx8
IGV4cHJlc3Npb24uaXNDb25zdGFudCgpIHx8IGV4cHJlc3Npb24uaXNBcmd1bWVudCgpIHx8IGV4
cHJlc3Npb24udG9Mb2NhbCgpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFycyk7Ci0gICAgICAgICAg
ICBpZiAoZXhwcmVzc2lvbiA9PSBzbG90KQorICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4
cHJlc3Npb25TdGFjaywgWyZdKFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmlydHVhbFJl
Z2lzdGVyIHNsb3QpIHsKKyAgICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uLnZhbHVlKCkgPT0g
c2xvdCB8fCBleHByZXNzaW9uLnZhbHVlKCkuaXNDb25zdGFudCgpIHx8IGV4cHJlc3Npb24udmFs
dWUoKS5pc0FyZ3VtZW50KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLnRvTG9jYWwoKSA8IG1fY29k
ZUJsb2NrLT5tX251bVZhcnMpOworICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24udmFsdWUoKSA9
PSBzbG90KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIFdhc21Nb3Y6OmVt
aXQodGhpcywgc2xvdCwgZXhwcmVzc2lvbik7Ci0gICAgICAgICAgICBleHByZXNzaW9uID0gc2xv
dDsKKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBUeXBlZEV4cHJlc3Npb24geyBleHByZXNzaW9u
LnR5cGUoKSwgc2xvdCB9OwogICAgICAgICB9KTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIH0KIAotICAgIFN0YWNrIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBTdGFjayYgc3RhY2spCisgICAgdm9pZCBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBTdGFjayYgbmV3U3RhY2spCiAgICAgewotICAg
ICAgICBTdGFjayByZXN1bHQgPSBKU0M6Oldhc206OnNwbGl0U3RhY2soc2lnbmF0dXJlLCBzdGFj
ayk7CisgICAgICAgIEpTQzo6V2FzbTo6c3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0
YWNrLCBuZXdTdGFjayk7CiAKLSAgICAgICAgbV9zdGFja1NpemUgLT0gcmVzdWx0LnNpemUoKTsK
KyAgICAgICAgbV9zdGFja1NpemUgLT0gbmV3U3RhY2suc2l6ZSgpOwogICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soc3RhY2ssIFsmXShWaXJ0
dWFsUmVnaXN0ZXImIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoZXhwcmVzc2lvbiA9PSBzbG90IHx8IGV4cHJlc3Npb24uaXNDb25zdGFudCgp
IHx8IGV4cHJlc3Npb24uaXNBcmd1bWVudCgpIHx8IGV4cHJlc3Npb24udG9Mb2NhbCgpIDwgbV9j
b2RlQmxvY2stPm1fbnVtVmFycyk7Ci0gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PSBzbG90
IHx8IGV4cHJlc3Npb24uaXNDb25zdGFudCgpKQorICAgICAgICB3YWxrRXhwcmVzc2lvblN0YWNr
KGVuY2xvc2luZ1N0YWNrLCBbJl0oVHlwZWRFeHByZXNzaW9uJiBleHByZXNzaW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgc2xvdCkgeworICAgICAgICAgICAgQVNTRVJUKGV4cHJlc3Npb24udmFsdWUoKSA9
PSBzbG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi52
YWx1ZSgpLmlzQXJndW1lbnQoKSB8fCBleHByZXNzaW9uLnZhbHVlKCkudG9Mb2NhbCgpIDwgbV9j
b2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi52YWx1ZSgp
ID09IHNsb3QgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJl
c3Npb24pOwotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHNsb3Q7CisgICAgICAgICAgICBleHBy
ZXNzaW9uID0gVHlwZWRFeHByZXNzaW9uIHsgZXhwcmVzc2lvbi50eXBlKCksIHNsb3QgfTsKICAg
ICAgICAgfSk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgbV9zdGFja1Np
emUgKz0gcmVzdWx0LnNpemUoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgbV9z
dGFja1NpemUgKz0gbmV3U3RhY2suc2l6ZSgpOwogICAgIH0KIAogICAgIHN0cnVjdCBTd2l0Y2hF
bnRyeSB7CkBAIC0zOTcsMjMgKzQwNywyMyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8TGFiZWwq
LCBWZWN0b3I8U3dpdGNoRW50cnk+PiBtX3N3aXRjaGVzOwogICAgIEV4cHJlc3Npb25UeXBlIG1f
anNOdWxsQ29uc3RhbnQ7CiAgICAgRXhwcmVzc2lvblR5cGUgbV96ZXJvQ29uc3RhbnQ7Ci0gICAg
RXhwcmVzc2lvbkxpc3QgbV91bml0aWFsaXplZExvY2FsczsKKyAgICBSZXN1bHRMaXN0IG1fdW5p
dGlhbGl6ZWRMb2NhbHM7CiAgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lz
dGVyLCBXVEY6OkludEhhc2g8RW5jb2RlZEpTVmFsdWU+LCBDb25zdGFudE1hcEhhc2hUcmFpdHM+
IG1fY29uc3RhbnRNYXA7CiAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gbV9yZXN1bHRz
OwogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbWF4U3Rh
Y2tTaXplIHsgMCB9OwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBm
dW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
Qnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVu
Z3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiB7Ci0gICAgTExJbnRHZW5lcmF0b3IgbGxp
bnRHZW5lcmF0b3IoaW5mbywgZnVuY3Rpb25JbmRleCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBzaWdu
YXR1cmUpOworICAgIExMSW50R2VuZXJhdG9yIGxsaW50R2VuZXJhdG9yKGluZm8sIGZ1bmN0aW9u
SW5kZXgsIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8TExJbnRHZW5lcmF0b3I+IHBh
cnNlcihsbGludEdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25h
dHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2Uo
KSk7CiAKICAgICByZXR1cm4gbGxpbnRHZW5lcmF0b3IuZmluYWxpemUoKTsKIH0KIAotTExJbnRH
ZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0
aW9uLCBjb25zdCBTaWduYXR1cmUmKQorTExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVu
Y3Rpb25Db2RlQmxvY2s+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9pbmZvKGluZm8pCiAg
ICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAgLTQyMiw5ICs0MzIsNiBAQCBM
TEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIHVuc2lnbmVkIGZ1bmN0aW9uSQogICAgIG1fc3RhY2tTaXplID0gbnVtYmVyT2ZMTEludENh
bGxlZVNhdmVSZWdpc3RlcnM7CiAgICAgbV9tYXhTdGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2Fs
bGVlU2F2ZVJlZ2lzdGVyczsKIAotICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgICAg
IFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2Vw
dGlvbik7Ci0KICAgICBXYXNtRW50ZXI6OmVtaXQodGhpcyk7CiB9CiAKQEAgLTUxNyw4ICs1MjQs
OCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgICAgICBtX21heFN0YWNrU2l6ZSA9IG1f
c3RhY2tTaXplOwogCiAKLSAgICBFeHByZXNzaW9uTGlzdCBhcmd1bWVudHMoc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSk7Ci0gICAgRXhwcmVzc2lvbkxpc3QgdGVtcG9yYXJ5UmVzdWx0cyhzaWdu
YXR1cmUucmV0dXJuQ291bnQoKSk7CisgICAgUmVzdWx0TGlzdCBhcmd1bWVudHMoc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSk7CisgICAgUmVzdWx0TGlzdCB0ZW1wb3JhcnlSZXN1bHRzKHNpZ25h
dHVyZS5yZXR1cm5Db3VudCgpKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0g
bV9zdGFja1NpemU7CiAgICAgY29uc3QgdW5zaWduZWQgYmFzZSA9IHN0YWNrT2Zmc2V0IC0gQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CkBAIC01ODIsNyArNTg5LDcgQEAgYXV0byBM
TEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKSAtPiBMTEkKIAogICAgIG1fc3RhY2tTaXplID0gaW5pdGlhbFN0YWNrU2l6ZTsK
IAotICAgIGF1dG8gY29tbWl0UmVzdWx0cyA9IFt0aGlzLCB0ZW1wb3JhcnlSZXN1bHRzID0gV1RG
TW92ZSh0ZW1wb3JhcnlSZXN1bHRzKV0oRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMpIHsKKyAgICBh
dXRvIGNvbW1pdFJlc3VsdHMgPSBbdGhpcywgdGVtcG9yYXJ5UmVzdWx0cyA9IFdURk1vdmUodGVt
cG9yYXJ5UmVzdWx0cyldKFJlc3VsdExpc3QmIHJlc3VsdHMpIHsKICAgICAgICAgZm9yIChhdXRv
IHRlbXBvcmFyeVJlc3VsdCA6IHRlbXBvcmFyeVJlc3VsdHMpIHsKICAgICAgICAgICAgIEV4cHJl
c3Npb25UeXBlIHJlc3VsdCA9IHB1c2goKTsKICAgICAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhp
cywgcmVzdWx0LCB0ZW1wb3JhcnlSZXN1bHQpOwpAQCAtNjg4LDE2ICs2OTUsMTUgQEAgYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAt
PiBQYXJ0aWFsUmVzdWx0CiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5cGUs
IHVpbnQzMl90IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgbV9jb2RlQmxvY2stPm1f
bnVtVmFycyArPSBjb3VudDsKLSAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBhdXRvIGxv
Y2FsID0gcHVzaCgpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBl
OjpBbnlyZWY6Ci0gICAgICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKLSAgICAgICAgICAgIG1fdW5p
dGlhbGl6ZWRMb2NhbHMuYXBwZW5kKGxvY2FsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFR5cGU6OkFueXJlZjoKKyAgICBjYXNlIFR5cGU6OkZ1bmNyZWY6Cisg
ICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgbV91bml0aWFsaXplZExvY2Fscy5h
cHBlbmQocHVzaCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9z
dGFja1NpemUgKz0gY291bnQ7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4geyB9
OwogfQpAQCAtNzQ5LDExICs3NTUsMTEgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6c2V0TG9jYWwo
dWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUmUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKGluZGV4
KTsKIAogICAgIC8vIElmIHRoaXMgbG9jYWwgaXMgY3VycmVudGx5IG9uIHRoZSBzdGFjayB3ZSBu
ZWVkIHRvIG1hdGVyaWFsaXplIGl0LCBvdGhlcndpc2UgaXQnbGwgc2VlIHRoZSBuZXcgdmFsdWUg
aW5zdGVhZCBvZiB0aGUgb2xkIG9uZQotICAgIHdhbGtFeHByZXNzaW9uU3RhY2sobV9wYXJzZXIt
PmV4cHJlc3Npb25TdGFjaygpLCBbJl0oVmlydHVhbFJlZ2lzdGVyJiBleHByZXNzaW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgc2xvdCkgewotICAgICAgICBpZiAoZXhwcmVzc2lvbiAhPSB0YXJnZXQpCisg
ICAgd2Fsa0V4cHJlc3Npb25TdGFjayhtX3BhcnNlci0+ZXhwcmVzc2lvblN0YWNrKCksIFsmXShU
eXBlZEV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAg
ICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgIT0gdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBXYXNtTW92OjplbWl0KHRoaXMsIHNsb3QsIGV4cHJlc3Npb24pOwotICAgICAg
ICBleHByZXNzaW9uID0gc2xvdDsKKyAgICAgICAgZXhwcmVzc2lvbiA9IFR5cGVkRXhwcmVzc2lv
biB7IGV4cHJlc3Npb24udHlwZSgpLCBzbG90IH07CiAgICAgfSk7CiAKICAgICBXYXNtTW92Ojpl
bWl0KHRoaXMsIHRhcmdldCwgdmFsdWUpOwpAQCAtNzgwLDcgKzc4Niw3IEBAIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUp
IC0+IFBhcnRpYWxSCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBibG9jaywg
U3RhY2smIG5ld1N0YWNrLCB1aW50MzJfdCBsb29wSW5kZXgpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
LSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7Cisg
ICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAg
bWF0ZXJpYWxpemVDb25zdGFudHNBbmRMb2NhbHMobmV3U3RhY2spOwogCiAgICAgUmVmPExhYmVs
PiBib2R5ID0gbmV3RW1pdHRlZExhYmVsKCk7CkBAIC03OTksNyArODA1LDcgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ28KICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZCh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBjb250cm9sSW5kZXggPSAwOyBjb250
cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgpOyArK2NvbnRyb2xJbmRl
eCkgewogICAgICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRyb2xT
dGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7Ci0gICAgICAgIGZv
ciAoYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKKyAgICAgICAgZm9yIChUeXBl
ZEV4cHJlc3Npb24gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFjaykKICAgICAgICAgICAgIG9z
ckVudHJ5RGF0YS5hcHBlbmQoZXhwcmVzc2lvbik7CiAgICAgfQogCkBAIC04MTcsNyArODIzLDcg
QEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlKSAtPiBDb250cm9sVHlwZQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRCbG9jayhCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUm
IG5ld0Jsb2NrLCBTdGFjayYgbmV3U3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBuZXdT
dGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRT
dGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAgbmV3QmxvY2sg
PSBDb250cm9sVHlwZTo6YmxvY2soc2lnbmF0dXJlLCBtX3N0YWNrU2l6ZSwgbmV3TGFiZWwoKSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTgyNyw3ICs4MzMsNyBAQCBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSwgUwogICAgIFJlZjxMYWJlbD4gYWx0ZXJuYXRlID0gbmV3TGFiZWwoKTsKICAgICBSZWY8
TGFiZWw+IGNvbnRpbnVhdGlvbiA9IG5ld0xhYmVsKCk7CiAKLSAgICBuZXdTdGFjayA9IHNwbGl0
U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1
cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAKICAgICBXYXNtSmZhbHNlOjplbWl0KHRo
aXMsIGNvbmRpdGlvbiwgYWx0ZXJuYXRlLT5iaW5kKHRoaXMpKTsKIApAQCAtOTQ3LDggKzk1Mywx
MSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRy
eSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogICAgICAgICAvLyBzaW5jZSB0aGV5IG1pZ2h0
IG5vdCBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgdmFsdWVzIGluIHRoZSBleHByZXNzaW9uIHN0
YWNrLgogICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBkbyBhIHN0cmljdGVyIGNvbnNpc3RlbmN5IGNo
ZWNrIGJlbG93LgogICAgICAgICBhdXRvIHRtcCA9IHB1c2goTm9Db25zaXN0ZW5jeUNoZWNrKTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChleHByZXNzaW9uU3RhY2ssIHVucmVhY2hhYmxlIHx8IHRt
cCA9PSBleHByZXNzaW9uU3RhY2tbaV0pOwotICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Np
b25TdGFjay5hcHBlbmQodG1wKTsKKyAgICAgICAgQVNTRVJUKHVucmVhY2hhYmxlIHx8IHRtcCA9
PSBleHByZXNzaW9uU3RhY2tbaV0udmFsdWUoKSk7CisgICAgICAgIGlmICh1bnJlYWNoYWJsZSkK
KyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFw
cGVuZChkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpLCB0bXApOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVz
c2lvblN0YWNrW2ldKTsKICAgICB9CiAKICAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gd2FzbV9q
bXAgJiYgZGF0YS5tX2NvbnRpbnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBzKCkuc2l6ZSgpID09IDEg
JiYgZGF0YS5tX2NvbnRpbnVhdGlvbi0+dW5yZXNvbHZlZEp1bXBzKClbMF0gPT0gc3RhdGljX2Nh
c3Q8aW50PihtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSkpIHsKQEAgLTk3Niw3ICs5ODUsNyBA
QCBhdXRvIExMSW50R2VuZXJhdG9yOjplbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUsIGNvbnN0IFN0YWNrJiBleHByZXNzaQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25M
aXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRD
YWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJn
cy5zaXplKCkpOwogICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKQEAgLTk5MCw3ICs5OTksNyBAQCBhdXRvIExMSW50R2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3Vs
dHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5o
CmluZGV4IGVkNTA3OGJlYzlhYjM0Mzc0ODk3MmY0NzgxZWY5OTA0MTczNzljZmYuLjg5Y2RjNzEw
ZjE4YTI5NTIwNGI0N2IwMTcyMjQwMGU5NTU0ZjQ3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwog
Ci1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25h
dHVyZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
VGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0
IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBs
YW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKaW5k
ZXggYmNlZWIyODZiYTNjYjMxOTdlYmZiODBiNGU1ZWY1MTZmYWI0ZDU5YS4uY2FlNTdlZDEzMGVm
NmViNjM3NWYwMjMzZTk1MTc1MmVmYmMwYmFhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50UGxhbi5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCM0Nv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVEdW1wZXIuaCIKICNpbmNsdWRlICJDYWxs
ZWVCaXRzLmgiCisjaW5jbHVkZSAiSlNUb1dhc20uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCkBAIC00
NCw2ICs0NSwyMiBAQCBuYW1lc3BhY2UgV2FzbUxMSW50UGxhbkludGVybmFsIHsKIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAorTExJbnRQbGFuOjpMTEludFBsYW4oQ29u
dGV4dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dvcmsgd29yaywg
Q29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKHNvdXJj
ZSksIHdvcmssIFdURk1vdmUodGFzaykpCit7CisgICAgaWYgKHBhcnNlQW5kVmFsaWRhdGVNb2R1
bGUobV9zb3VyY2UuZGF0YSgpLCBtX3NvdXJjZS5zaXplKCkpKQorICAgICAgICBwcmVwYXJlKCk7
Cit9CisKK0xMSW50UGxhbjo6TExJbnRQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJ
bmZvcm1hdGlvbj4gaW5mbywgY29uc3QgUmVmPExMSW50Q2FsbGVlPiogY2FsbGVlcywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKGluZm8pLCBBc3lu
Y1dvcms6OkZ1bGxDb21waWxlLCBXVEZNb3ZlKHRhc2spKQorICAgICwgbV9jYWxsZWVzKGNhbGxl
ZXMpCit7CisgICAgQVNTRVJUKG1fY2FsbGVlcyk7CisgICAgcHJlcGFyZSgpOworICAgIG1fY3Vy
cmVudEluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsKK30KKwog
Ym9vbCBMTEludFBsYW46OnByZXBhcmVJbXBsKCkKIHsKICAgICBjb25zdCBhdXRvJiBmdW5jdGlv
bnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7CkBAIC02MiwxMCArNzksOSBAQCB2
b2lkIExMSW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAg
ICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dh
c21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKICAgICBBU1NFUlRfVU5V
U0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJl
SW5kZXgpOwotICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsK
LSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGZ1bmN0aW9u
LmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBmdW5jdGlvbkluZGV4LCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7Cisg
ICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShmdW5jdGlvbi5k
YXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgZnVuY3Rpb25JbmRleCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOwpAQCAtNzgsNDEgKzk0LDE1IEBAIHZvaWQgTExJbnRQbGFuOjpjb21waWxlRnVuY3Rpb24o
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB9CiAKICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0K
LSAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5jdGlvbkluZGV4
KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25zKCkuY29udGFpbnMo
ZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgRW1iZWRlclRvV2FzbUZ1bmN0aW9uIGVudHJ5Owot
ICAgICAgICBlbnRyeS5qaXQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKLSAgICAgICAg
ZW50cnkuZnVuY3Rpb24gPSBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcigqZW50cnkuaml0LCBzaWdu
YXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJl
ZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVu
dHJ5KSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7
Ci0gICAgfQogfQogCiB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbihjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogewotICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25J
bmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMu
c2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLQotICAgICAg
ICBpZiAoYXV0byBpdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5maW5kKGZ1
bmN0aW9uSW5kZXgpOyBpdCAhPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZW5k
KCkpIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqaXQtPnZhbHVlLmppdCwg
bnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VM
WShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7Ci0gICAgICAgICAgICAgICAgQmFz
ZTo6ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBm
dW5jdGlvbiBlbnRyeXBvaW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5k
ZXgpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpdC0+dmFsdWUuZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5p
cXVlPEIzOjpDb21waWxhdGlvbj4oCi0gICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiRW1iZWRkZXItPldlYkFzc2VtYmx5IGVudHJ5
cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpLAotICAgICAgICAgICAgICAgIG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgfQot
CiAgICAgdW5zaWduZWQgZnVuY3Rpb25Db3VudCA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNp
emUoKTsKLSAgICBpZiAoZnVuY3Rpb25Db3VudCkgeworICAgIGlmICghbV9jYWxsZWVzICYmIGZ1
bmN0aW9uQ291bnQpIHsKICAgICAgICAgLy8gTExJbnQgZW50cnlwb2ludCB0aHVua3MgZ2VuZXJh
dGlvbgogICAgICAgICBDQ2FsbEhlbHBlcnMgaml0OwotICAgICAgICBtX2NhbGxlZXMucmVzaXpl
KGZ1bmN0aW9uQ291bnQpOworICAgICAgICBtX2NhbGxlZXNWZWN0b3IucmVzaXplKGZ1bmN0aW9u
Q291bnQpOwogICAgICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZW50cnlwb2ludHMo
ZnVuY3Rpb25Db3VudCk7CiAgICAgICAgIFZlY3RvcjxDQ2FsbEhlbHBlcnM6Okp1bXA+IGp1bXBz
KGZ1bmN0aW9uQ291bnQpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rp
b25Db3VudDsgKytpKSB7CkBAIC0xMjEsNyArMTExLDcgQEAgdm9pZCBMTEludFBsYW46OmRpZENv
bXBsZXRlQ29tcGlsYXRpb24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wR2VuZXJhdGVkV2FzbUJ5dGVjb2RlcygpKSkK
ICAgICAgICAgICAgICAgICBCeXRlY29kZUR1bXBlcjo6ZHVtcEJsb2NrKG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2ldLmdldCgpLCBtX21vZHVsZUluZm9ybWF0aW9uLCBXVEY6OmRhdGFGaWxlKCkp
OwogCi0gICAgICAgICAgICBtX2NhbGxlZXNbaV0gPSBXYXNtOjpMTEludENhbGxlZTo6Y3JlYXRl
KFdURk1vdmUobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaV0pLCBmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSk7CisgICAgICAgICAgICBtX2NhbGxlZXNWZWN0b3JbaV0gPSBMTEludENhbGxlZTo6Y3JlYXRl
KFdURk1vdmUobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaV0pLCBmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSk7CiAgICAgICAgICAgICBlbnRyeXBvaW50c1tpXSA9IGppdC5sYWJlbCgpOwogI2lmIENQVShY
ODZfNjQpCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlU2xvdChDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSk7
CkBAIC0xMzAsNyArMTIwLDcgQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRp
b24oY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0
ZWQgYXJjaGl0ZWN0dXJlLgogI2VuZGlmCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJpdHM6OmJveFdhc20obV9jYWxsZWVzW2ldLnB0
cigpKSksIGNhbGxlZVNsb3QpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihDYWxsZWVCaXRzOjpib3hXYXNtKG1fY2FsbGVlc1ZlY3RvcltpXS5w
dHIoKSkpLCBjYWxsZWVTbG90KTsKICAgICAgICAgICAgIGp1bXBzW2ldID0gaml0Lmp1bXAoKTsK
ICAgICAgICAgfQogCkBAIC0xNDEsMTggKzEzMSw1MSBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29t
cGxldGVDb21waWxhdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICB9
CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkg
ewotICAgICAgICAgICAgbV9jYWxsZWVzW2ldLT5zZXRFbnRyeXBvaW50KGxpbmtCdWZmZXIubG9j
YXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnRzW2ldKSk7CisgICAgICAgICAgICBt
X2NhbGxlZXNWZWN0b3JbaV0tPnNldEVudHJ5cG9pbnQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdh
c21FbnRyeVB0clRhZz4oZW50cnlwb2ludHNbaV0pKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluazxKSVRUaHVua1B0clRhZz4oanVtcHNbaV0sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5r
UHRyVGFnPihMTEludDo6d2FzbUZ1bmN0aW9uRW50cnlUaHVuaygpLmNvZGUoKSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgbV9lbnRyeVRodW5rcyA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
QjNDb21waWxhdGlvblB0clRhZywgIldhc20gTExJbnQgZW50cnkgdGh1bmtzIik7CisgICAgICAg
IG1fY2FsbGVlcyA9IG1fY2FsbGVlc1ZlY3Rvci5kYXRhKCk7CisgICAgfQorCisgICAgaWYgKG1f
YXN5bmNXb3JrID09IEFzeW5jV29yazo6VmFsaWRhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgeworICAg
ICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5jdGlvbkluZGV4
KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25zKCkuY29udGFpbnMo
ZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXNbZnVuY3Rpb25JbmRleF07CisgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiBmdW5jdGlvbiA9IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihqaXQsIHNpZ25hdHVy
ZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCk7CisKKyAgICAgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkgeworICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQg
b2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBT
dHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGls
YXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiRW1iZWRkZXItPldl
YkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgIG51bGxwdHIpOworCisg
ICAgICAgICAgICBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjYWxsZWUgPSBFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7
CisgICAgICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgcmVwYXRjaFBvaW50ZXIgLSBqdXN0
IHBhc3MgaW4gdGhlIGNhbGxlZSBkaXJlY3RseQorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgorICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24pCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6
OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9l
bWJlZGRlckNhbGxlZXMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoY2FsbGVlKSk7CisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMpIHsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWQpIHsKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGV4ZWN1dGFibGVB
ZGRyZXNzOwogICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRG
dW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wb3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2Vk
IGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlv
biBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgorICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJh
dGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBh
IFJFTEVBU0VfQVNTRVJULgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRk
cmVzcyA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSku
Y29kZSgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFk
ZHJlc3MgPSBtX2NhbGxlZXNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCldLT5lbnRyeXBvaW50KCk7CkBAIC0xNjEsMjEg
KzE4NCwyNSBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbihjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgIH0KIH0KIAotdm9pZCBMTEludFBsYW46OmluaXRp
YWxpemVDYWxsZWVzKGNvbnN0IENhbGxlZUluaXRpYWxpemVyJiBjYWxsYmFjaykKK3ZvaWQgTExJ
bnRQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBBU1NFUlQoIWZh
aWxlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGlu
dGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytp
bnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKLSAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZT4gZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwotICAgICAgICBpZiAoYXV0byBpdCA9IG1fZW1iZWRkZXJU
b1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5maW5kKGludGVybmFsRnVuY3Rpb25JbmRleCk7IGl0ICE9
IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAg
ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
OjpjcmVhdGUoV1RGTW92ZShpdC0+dmFsdWUuZnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKLSAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUuZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbikKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoaXQtPnZhbHVlLmZ1bmN0
aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlLmdldCgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYWxsYmFjayhpbnRl
cm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RG
TW92ZShtX2NhbGxlZXNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOworICAgIHN3aXRjaCAobV9z
dGF0ZSkgeworICAgIGNhc2UgU3RhdGU6OlByZXBhcmVkOgorICAgICAgICBjb21waWxlRnVuY3Rp
b25zKGVmZm9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhdGU6OkNvbXBpbGVkOgor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiB9CiAK
K2Jvb2wgTExJbnRQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKHVuc2lnbmVkLCBjb25zdCBG
dW5jdGlvbkRhdGEmKQoreworICAgIC8vIFZhbGlkYXRpb24gaXMgZG9uZSBpbmxpbmUgYnkgdGhl
IHBhcnNlcgorICAgIHJldHVybiB0cnVlOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50UGxhbi5oCmluZGV4IDZjOTFkMjdiZjIzOWNjMzZmNzhjNTc0ZmRkMWRm
ZDMzZDBmOWE4N2YuLjQyZGU4MTMzYjcyZmM1ZmU1MTk5YzE5ZjZlMzIzZTllMzdiMWM4ZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmgKQEAgLTM3LDE0ICsz
NywxNiBAQCBjbGFzcyBDYWxsTGlua0luZm87CiBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIExM
SW50Q2FsbGVlOworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOworCit1c2luZyBFbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWVNYXAgPSBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8RW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNo
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj47CiAKIGNsYXNz
IExMSW50UGxhbiBmaW5hbCA6IHB1YmxpYyBFbnRyeVBsYW4gewotcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBFbnRyeVBsYW47CiAKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgdm9pZCBp
bml0aWFsaXplQ2FsbGVlcyhjb25zdCBDYWxsZWVJbml0aWFsaXplciYpIG92ZXJyaWRlOworcHVi
bGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIExMSW50UGxhbihDb250ZXh0KiwgVmVjdG9yPHVp
bnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CisgICAgTExJbnRQbGFuKENv
bnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBjb25zdCBSZWY8TExJbnRDYWxsZWU+Kiwg
Q29tcGxldGlvblRhc2smJik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21waWxh
dGlvblB0clRhZz4mJiB0YWtlRW50cnlUaHVua3MoKQogICAgIHsKQEAgLTUyLDIwICs1NCwzNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW50cnlUaHVua3MpOwogICAgIH0K
IAorICAgIFZlY3RvcjxSZWY8TExJbnRDYWxsZWU+PiYmIHRha2VDYWxsZWVzKCkKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUobV9jYWxsZWVzVmVjdG9yKTsKKyAgICB9CisKKyAgICBFbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWVNYXAmJiB0YWtlRW1iZWRkZXJDYWxsZWVzKCkKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKKyAgICAgICAgcmV0dXJu
IFdURk1vdmUobV9lbWJlZGRlckNhbGxlZXMpOworICAgIH0KKworICAgIGJvb2wgaGFzV29yaygp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGF0ZSA8IFN0YXRlOjpD
b21waWxlZDsKKyAgICB9CisKKyAgICB2b2lkIHdvcmsoQ29tcGlsYXRpb25FZmZvcnQpIG92ZXJy
aWRlOworCisgICAgYm9vbCBkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKHVuc2lnbmVkLCBjb25zdCBG
dW5jdGlvbkRhdGEmKSBvdmVycmlkZTsKKwogcHJvdGVjdGVkOgogICAgIGJvb2wgcHJlcGFyZUlt
cGwoKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlv
bkluZGV4KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uc3Qg
QWJzdHJhY3RMb2NrZXImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgRW1iZWRl
clRvV2FzbUZ1bmN0aW9uIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENDYWxsSGVscGVycz4g
aml0OwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gZnVuY3Rpb247
Ci0gICAgfTsKLQogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+
PiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uczsKLSAgICBWZWN0b3I8UmVmPExMSW50Q2FsbGVlPj4g
bV9jYWxsZWVzOwotICAgIEhhc2hNYXA8dWludDMyX3QsIEVtYmVkZXJUb1dhc21GdW5jdGlvbiwg
dHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b25zOworICAgIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIG1fY2FsbGVlcyB7IG51bGxwdHIgfTsK
KyAgICBWZWN0b3I8UmVmPExMSW50Q2FsbGVlPj4gbV9jYWxsZWVzVmVjdG9yOworICAgIEVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZU1hcCBtX2VtYmVkZGVyQ2FsbGVlczsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8QjNDb21waWxhdGlvblB0clRhZz4gbV9lbnRyeVRodW5rczsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKaW5kZXggNDRhMjc0MzE4YjFm
ZmM2NmI3YTYxYzI5NDc3OTg2MGM0NmIwNTgyNi4uM2M4NDMyZWNkYTY2ZTZmNzIyN2JiZmJjMDdi
NmMyNjljZWRmNmI0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5j
cHAKQEAgLTI4LDE0ICsyOCwyMiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5j
bHVkZSAiV2FzbUJCUVBsYW4uaCIKICNpbmNsdWRlICJXYXNtTExJbnRQbGFuLmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1vZHVsZTo6TW9kdWxlKFJlZjxN
b2R1bGVJbmZvcm1hdGlvbj4mJiBtb2R1bGVJbmZvcm1hdGlvbikKLSAgICA6IG1fbW9kdWxlSW5m
b3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbikpCitNb2R1bGU6Ok1vZHVsZShMTElu
dFBsYW4mIHBsYW4pCisgICAgOiBtX21vZHVsZUluZm9ybWF0aW9uKHBsYW4udGFrZU1vZHVsZUlu
Zm9ybWF0aW9uKCkpCisgICAgLCBtX2xsaW50Q2FsbGVlcyhwbGFuLnRha2VDYWxsZWVzKCkpCisg
ICAgLCBtX2xsaW50RW50cnlUaHVua3MocGxhbi50YWtlRW50cnlUaHVua3MoKSkKK3sKK30KKwor
TW9kdWxlOjpNb2R1bGUoQkJRUGxhbiYgcGxhbikKKyAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24o
cGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSkKIHsKIH0KIApAQCAtNDYsMzYgKzU0LDUwIEBA
IFdhc206OlNpZ25hdHVyZUluZGV4IE1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0CiAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24t
PnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
OwogfQogCi1zdGF0aWMgTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVz
dWx0KEVudHJ5UGxhbiYgcGxhbikKK3RlbXBsYXRlPHR5cGVuYW1lIFBsYW4+CitzdGF0aWMgTW9k
dWxlOjpWYWxpZGF0aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVzdWx0KFBsYW4mIHBsYW4pCiB7
CiAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmsoKSk7CiAgICAgaWYgKHBsYW4uZmFpbGVkKCkpCiAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFN0cmluZz4ocGxhbi5lcnJvck1lc3NhZ2UoKSk7Ci0g
ICAgcmV0dXJuIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdChNb2R1bGU6OmNyZWF0ZShwbGFuLnRh
a2VNb2R1bGVJbmZvcm1hdGlvbigpKSk7CisgICAgcmV0dXJuIE1vZHVsZTo6VmFsaWRhdGlvblJl
c3VsdChNb2R1bGU6OmNyZWF0ZShwbGFuKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFBsYW5U
Pgogc3RhdGljIFBsYW46OkNvbXBsZXRpb25UYXNrIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soTW9k
dWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIHJldHVybiBj
cmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldIChQbGFuJiBwbGFuKSB7CiAgICAgICAgIEFTU0VSVCghcGxhbi5oYXNXb3JrKCkp
OwotICAgICAgICBjYWxsYmFjay0+cnVuKG1ha2VWYWxpZGF0aW9uUmVzdWx0KHN0YXRpY19jYXN0
PExMSW50UGxhbiY+KHBsYW4pKSk7CisgICAgICAgIGNhbGxiYWNrLT5ydW4obWFrZVZhbGlkYXRp
b25SZXN1bHQoc3RhdGljX2Nhc3Q8UGxhblQmPihwbGFuKSkpOwogICAgIH0pOwogfQogCiBNb2R1
bGU6OlZhbGlkYXRpb25SZXN1bHQgTW9kdWxlOjp2YWxpZGF0ZVN5bmMoQ29udGV4dCogY29udGV4
dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlKQogewotICAgIFJlZjxMTEludFBsYW4+IHBsYW4g
PSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5
UGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCksIG51bGxwdHIsIG51bGxwdHIp
KTsKKyAgICBpZiAoT3B0aW9uczo6dXNlV2FzbUxMSW50KCkpIHsKKyAgICAgICAgUmVmPExMSW50
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgTExJbnRQbGFuKGNvbnRleHQsIFdURk1vdmUoc291
cmNlKSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAg
ICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5nZXQoKSk7CisgICAgICAg
IHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIHJldHVybiBtYWtlVmFsaWRhdGlv
blJlc3VsdChwbGFuLmdldCgpKTsKKyAgICB9CisKKyAgICBSZWY8QkJRUGxhbj4gcGxhbiA9IGFk
b3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5UGxhbjo6
VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICBwbGFuLT5wYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKCk7CiAgICAgcmV0dXJuIG1ha2VWYWxpZGF0aW9uUmVzdWx0KHBsYW4uZ2V0
KCkpOwogfQogCiB2b2lkIE1vZHVsZTo6dmFsaWRhdGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBW
ZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2sm
JiBjYWxsYmFjaykKIHsKLSAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgTExJbnRQ
bGFuKGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBtYWtl
VmFsaWRhdGlvbkNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSwgbnVsbHB0ciwgbnVsbHB0cikp
OwotICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKKyAg
ICBpZiAoT3B0aW9uczo6dXNlV2FzbUxMSW50KCkpIHsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4g
PSBhZG9wdFJlZigqbmV3IExMSW50UGxhbihjb250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5
UGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25DYWxsYmFjazxMTEludFBsYW4+KFdURk1v
dmUoY2FsbGJhY2spKSkpOworICAgICAgICBXYXNtOjplbnN1cmVXb3JrbGlzdCgpLmVucXVldWUo
V1RGTW92ZShwbGFuKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBh
ZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBFbnRyeVBsYW46
OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2s8QkJRUGxhbj4oV1RGTW92ZShjYWxs
YmFjaykpKSk7CisgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3Zl
KHBsYW4pKTsKKyAgICB9CiB9CiAKLVJlZjxDb2RlQmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVD
b2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBDcmVhdGVFbWJlZGRl
cldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24pCitSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29kZUJs
b2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSkKIHsKICAgICBSZWZQdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpA
QCAtODYsMjIgKzEwOCwyNSBAQCBSZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmdldE9yQ3JlYXRlQ29k
ZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQwogICAgIC8vIEZJWE1F
OiBXZSBtaWdodCB3YW50IHRvIGJhY2sgb2ZmIHJldHJ5aW5nIGF0IHNvbWUgcG9pbnQ6CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDYwNwogICAgIGlm
ICghY29kZUJsb2NrIHx8IChjb2RlQmxvY2stPmNvbXBpbGF0aW9uRmluaXNoZWQoKSAmJiAhY29k
ZUJsb2NrLT5ydW5uYWJsZSgpKSkgewotICAgICAgICBjb2RlQmxvY2sgPSBDb2RlQmxvY2s6OmNy
ZWF0ZShjb250ZXh0LCBtb2RlLCBjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxl
SW5mb3JtYXRpb24oKSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNt
RXhjZXB0aW9uKTsKKyAgICAgICAgY29uc3QgUmVmPExMSW50Q2FsbGVlPiogbGxpbnRDYWxsZWVz
ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVdhc21MTEludCgpKQorICAgICAg
ICAgICAgbGxpbnRDYWxsZWVzID0gbV9sbGludENhbGxlZXMuZGF0YSgpOworICAgICAgICBjb2Rl
QmxvY2sgPSBDb2RlQmxvY2s6OmNyZWF0ZShjb250ZXh0LCBtb2RlLCBjb25zdF9jYXN0PE1vZHVs
ZUluZm9ybWF0aW9uJj4obW9kdWxlSW5mb3JtYXRpb24oKSksIGxsaW50Q2FsbGVlcyk7CiAgICAg
ICAgIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKV0gPSBjb2RlQmxvY2s7
CiAgICAgfQogICAgIHJldHVybiBjb2RlQmxvY2sucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUmVm
PENvZGVCbG9jaz4gTW9kdWxlOjpjb21waWxlU3luYyhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlN
b2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK1JlZjxDb2RlQmxvY2s+IE1v
ZHVsZTo6Y29tcGlsZVN5bmMoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlKQogewot
ICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRl
eHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0
aW9uKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9j
ayhjb250ZXh0LCBtb2RlKTsKICAgICBjb2RlQmxvY2stPndhaXRVbnRpbEZpbmlzaGVkKCk7CiAg
ICAgcmV0dXJuIGNvZGVCbG9jazsKIH0KIAotdm9pZCBNb2R1bGU6OmNvbXBpbGVBc3luYyhDb250
ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21waWxhdGlv
bkNhbGxiYWNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJX
cmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQordm9pZCBNb2R1
bGU6OmNvbXBpbGVBc3luYyhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIENvZGVC
bG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYgdGFzaykKIHsKLSAgICBSZWY8Q29kZUJs
b2NrPiBjb2RlQmxvY2sgPSBnZXRPckNyZWF0ZUNvZGVCbG9jayhjb250ZXh0LCBtb2RlLCBXVEZN
b3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgUmVm
PENvZGVCbG9jaz4gY29kZUJsb2NrID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9k
ZSk7CiAgICAgY29kZUJsb2NrLT5jb21waWxlQXN5bmMoY29udGV4dCwgV1RGTW92ZSh0YXNrKSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAppbmRleCA2NTJkZGQz
N2RiOGU1Nzg4ZDA1ODc1ZDJjMmRmYzdmYWRjOWU3MzY1Li4yZGFkYjZhOWJhZjcwM2YxOWY5MDM2
OGE3NTVkMjUxMDE1Y2RhNWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZS5oCkBAIC0zNyw5ICszNywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCitjbGFzcyBCQlFQbGFuOworY2xhc3MgTExJbnRQbGFuOwogc3RydWN0IENvbnRleHQ7CiBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247Ci1jbGFzcyBQbGFuOwogCiB1c2luZyBTaWduYXR1cmVJ
bmRleCA9IHVpbnQ2NF90OwogCkBAIC01MiwyNiArNTMsMzQgQEAgcHVibGljOgogICAgIHN0YXRp
YyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlU3luYyhDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+
JiYgc291cmNlKTsKICAgICBzdGF0aWMgdm9pZCB2YWxpZGF0ZUFzeW5jKENvbnRleHQqLCBWZWN0
b3I8dWludDhfdD4mJiBzb3VyY2UsIE1vZHVsZTo6QXN5bmNWYWxpZGF0aW9uQ2FsbGJhY2smJik7
CiAKLSAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4m
JiBtb2R1bGVJbmZvcm1hdGlvbikKKyAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKEJCUVBs
YW4mIHBsYW4pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNb2R1bGUoV1RG
TW92ZShtb2R1bGVJbmZvcm1hdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TW9kdWxlKHBsYW4pKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPE1vZHVsZT4gY3JlYXRlKExM
SW50UGxhbiYgcGxhbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1vZHVs
ZShwbGFuKSk7CiAgICAgfQogCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29u
c3Q7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQogCi0gICAgUmVm
PENvZGVCbG9jaz4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVk
ZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwotICAgIHZvaWQgY29tcGlsZUFzeW5j
KENvbnRleHQqLCBNZW1vcnlNb2RlLCBDb2RlQmxvY2s6OkFzeW5jQ29tcGlsYXRpb25DYWxsYmFj
ayYmLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBS
ZWY8Q29kZUJsb2NrPiBjb21waWxlU3luYyhDb250ZXh0KiwgTWVtb3J5TW9kZSk7CisgICAgdm9p
ZCBjb21waWxlQXN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENvZGVCbG9jazo6QXN5bmNDb21w
aWxhdGlvbkNhbGxiYWNrJiYpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1vZHVsZSgpOwog
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3IoTWVtb3J5TW9kZSBtb2RlKSB7IHJldHVybiBt
X2NvZGVCbG9ja3Nbc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSldLmdldCgpOyB9CiBwcml2YXRl
OgotICAgIFJlZjxDb2RlQmxvY2s+IGdldE9yQ3JlYXRlQ29kZUJsb2NrKENvbnRleHQqLCBNZW1v
cnlNb2RlLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAg
ICBSZWY8Q29kZUJsb2NrPiBnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9k
ZSk7CiAKLSAgICBNb2R1bGUoUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmKTsKKyAgICBNb2R1bGUo
QkJRUGxhbiYpOworICAgIE1vZHVsZShMTEludFBsYW4mKTsKICAgICBSZWY8TW9kdWxlSW5mb3Jt
YXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9jb2Rl
QmxvY2tzW1dhc206Ok51bWJlck9mTWVtb3J5TW9kZXNdOworICAgIFZlY3RvcjxSZWY8TExJbnRD
YWxsZWU+PiBtX2xsaW50Q2FsbGVlczsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8QjNDb21w
aWxhdGlvblB0clRhZz4gbV9sbGludEVudHJ5VGh1bmtzOwogICAgIExvY2sgbV9sb2NrOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCmluZGV4IDZmNGRk
Y2FjN2RlMjc4MmI4MTZmNmFkOTQyMjg4NGNjNDgwOTI0OTQuLjVkNDljM2U5MmEwMDNlZDJlNWU0
OTQyZjljMTE5ZDQwMjIzZGNjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAKQEAgLTEyMiwxMCArMTIyLDExIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21w
aWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnNldFJlcGxhY2VtZW50
KGNhbGxlZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+dGllclVwQ291
bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9IFRpZXJVcENvdW50OjpDb21waWxhdGlv
blN0YXR1czo6Q29tcGlsZWQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoTExJbnRD
YWxsZWUqIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGxsaW50Q2FsbGVlLT50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKLSAgICAgICAgICAgICAgICBs
bGludENhbGxlZS0+c2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7Ci0gICAgICAgICAg
ICAgICAgbGxpbnRDYWxsZWUtPnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0g
TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CisgICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAg
TExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW21f
ZnVuY3Rpb25JbmRleF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKKyAgICAgICAg
ICAgICAgICBsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1cyA9
IExMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKSB7CkBAIC0xNjEsMTAgKzE2MiwxMSBAQCB2b2lkIE9NR1BsYW46
OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVz
W2ldKTsKLSAgICAgICAgICAgIGlmIChMTEludENhbGxlZSogbGxpbnRDYWxsZWUgPSBtX2NvZGVC
bG9jay0+bV9sbGludENhbGxlZXNbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSklU
Q2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLT5yZXBsYWNlbWVudCgpKQor
ICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAgICAgICAg
ICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVu
dENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsK
LSAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVl
ID0gbGxpbnRDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgaWYgKE9N
R0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5
Q2FsbGVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbaV0uZ2V0
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCAxZWQ2Y2Zm
ZmEwZDQ0ZDAxMzFhYmM3YmUzNzBjYTAyY2Q1NDZjZmU3Li41YTUzYjk1OTA4MzZmOTRiY2E0ZmQx
MDM3ZjQ0NmEyYzFlMzVjYzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwCkBAIC00OCwxOSArNDgsMTEgQEAgbmFtZXNwYWNlIFdhc21QbGFuSW50ZXJuYWwgewogc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotUGxhbjo6UGxhbihDb250
ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNr
JiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBU
aHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorUGxhbjo6UGxhbihDb250ZXh0
KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIENvbXBsZXRpb25UYXNrJiYg
dGFzaykKICAgICA6IG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShpbmZvKSkKLSAgICAsIG1f
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSkKLSAg
ICAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2VwdGlvbikKIHsKICAgICBtX2Nv
bXBsZXRpb25UYXNrcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGV4dCwgV1RGTW92ZSh0YXNr
KSkpOwogfQotCi1QbGFuOjpQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrKQotICAgIDogUGxhbihjb250ZXh0LCBX
VEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spLCBudWxscHRyLCBudWxscHRyKQotewotfQotCiBQ
bGFuOjpQbGFuKENvbnRleHQqIGNvbnRleHQsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6
IG1fbW9kdWxlSW5mb3JtYXRpb24oTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggMTExMjM0ZjZiOTM2ZWU1ZmYyNTZj
ZjE3ZDVjZmJhZDZjOGVhNmNkMS4uOWJlNmNlMjUyNzA1M2JkN2Q5Yjk5ODc2ZDI1MGY0MGMzMTg4
NjUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC01MSw3ICs1MSw2
IEBAIHB1YmxpYzoKICAgICB1c2luZyBDb21wbGV0aW9uVGFzayA9IFJlZlB0cjxTaGFyZWRUYXNr
PENhbGxiYWNrVHlwZT4+OwogCiAgICAgc3RhdGljIENvbXBsZXRpb25UYXNrIGRvbnRGaW5hbGl6
ZSgpIHsgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPihbXShQbGFuJikgeyB9
KTsgfQotICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRp
b25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwog
ICAgIFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNr
JiYpOwogCiAgICAgLy8gTm90ZTogVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgb25seSBiZSB1c2Vk
IGlmIHlvdSBhcmUgbm90IGFjdHVhbGx5IGJ1aWxkaW5nIGEgbW9kdWxlIGUuZy4gdmFsaWRhdGlv
bi9mdW5jdGlvbiB0ZXN0cwpAQCAtODgsOSArODcsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBWZWN0
b3I8c3RkOjpwYWlyPENvbnRleHQqLCBDb21wbGV0aW9uVGFzaz4sIDE+IG1fY29tcGxldGlvblRh
c2tzOwogCi0gICAgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVy
OwotICAgIFRocm93V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIg
fTsKLQogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAgICBNZW1vcnlNb2RlIG1fbW9kZSB7
IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgTG9jayBtX2xvY2s7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDE2ZjNkYWM3MzM3
NzJjZjFlOGM0MTlmNGM2YTRkMTdlOTFmNjliZDIuLjIxMjVhODBiODM0YWE2N2NlODlkMzcyMzcz
ODQ0NTRmZDJjZjA2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93
UGF0aHMuY3BwCkBAIC00MDQsNyArNDA0LDcgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChzZXRfZ2xv
YmFsX3JlZikKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF93YXNtX3Ro
cm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBj
LCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkV4Y2VwdGlvblR5cGUgZXhjZXB0aW9u
VHlwZSkKIHsKICAgICBVTlVTRURfUEFSQU0ocGMpOwotICAgIFdBU01fUkVUVVJOX1RXTyhXYXNt
OjpUaHVua3M6OnNpbmdsZXRvbigpLnRocm93V2FzbUV4Y2VwdGlvbigpKGNhbGxGcmFtZSwgZXhj
ZXB0aW9uVHlwZSwgaW5zdGFuY2UpLCAwKTsKKyAgICBXQVNNX1JFVFVSTl9UV08ob3BlcmF0aW9u
V2FzbVRvSlNFeGNlcHRpb24oY2FsbEZyYW1lLCBleGNlcHRpb25UeXBlLCBpbnN0YW5jZSksIDAp
OwogfQogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfd2FzbV9wb3Bj
b3VudChjb25zdCBJbnN0cnVjdGlvbiogcGMsIHVpbnQzMl90IHgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCmluZGV4IGYyYjNlZTE1ZmQ5YWYyMDUyZTRmMWIzY2Fh
NGI3ZjRjZTI4MDI3YTQuLmY5MzRmMWExODYwYWM3ZGEyMWNhNmQ1YjlhZGMzNDE4NmJlMmY4MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuY3BwCkBAIC01NiwxMCAr
NTYsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0
aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihjb25zdAogICAgIGppdC5mYXJKdW1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBqaXQuYnJlYWtw
b2ludCgpOyAvLyBXZSBzaG91bGQgbm90IHJlYWNoIHRoaXMuCiAKLSAgICBUaHJvd1dhc21FeGNl
cHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uID0gVGh1bmtzOjpzaW5nbGV0b24oKS50aHJvd1dhc21F
eGNlcHRpb24oKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHJvd1dhc21FeGNlcHRpb24pOwogICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4odGhyb3dXYXNtRXhj
ZXB0aW9uKSk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfV0FTTV9DT0RFKGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiVGhyb3cgZXhjZXB0aW9u
IGZyb20gV2FzbSIpOwogfQogCkBAIC0xMTMsMTkgKzExMSw2IEBAIFRodW5rcyYgVGh1bmtzOjpz
aW5nbGV0b24oKQogICAgIHJldHVybiAqdGh1bmtzOwogfQogCi12b2lkIFRodW5rczo6c2V0VGhy
b3dXYXNtRXhjZXB0aW9uKFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCi17
Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgIC8vIFRoZSB0aHVua3Mg
YXJlIHVuaXF1ZSBmb3IgdGhlIGVudGlyZSBwcm9jZXNzLCB0aGVyZWZvcmUgY2hhbmdpbmcgdGhl
IHRocm93aW5nIGZ1bmN0aW9uIGNoYW5nZXMgaXQgZm9yIGFsbCB1c2VzIG9mIFdlYkFzc2VtYmx5
LgotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Rocm93V2FzbUV4Y2VwdGlvbiB8fCBtX3Rocm93V2Fz
bUV4Y2VwdGlvbiA9PSB0aHJvd1dhc21FeGNlcHRpb24pOwotICAgIG1fdGhyb3dXYXNtRXhjZXB0
aW9uID0gdGhyb3dXYXNtRXhjZXB0aW9uOwotfQotCi1UaHJvd1dhc21FeGNlcHRpb24gVGh1bmtz
Ojp0aHJvd1dhc21FeGNlcHRpb24oKQotewotICAgIHJldHVybiBtX3Rocm93V2FzbUV4Y2VwdGlv
bjsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBUaHVua3M6OnN0
dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAppbmRleCA4
MWNjNjY5NTBmZmQ5OGE0OGI3ZGRiNzA0YWFhZTZhZTQ4ZDU5MjU5Li5hMjhhYmE5NmNmMDNkNDFk
NWI0MzBmMzgzODQ2YjY1ZTk1OTdkNjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRodW5rcy5oCkBAIC00NSw5ICs0NSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKCk7CiAgICAgc3RhdGljIFRodW5rcyYgc2luZ2xldG9uKCk7CiAKLSAgICB2b2lkIHNl
dFRocm93V2FzbUV4Y2VwdGlvbihUaHJvd1dhc21FeGNlcHRpb24pOwotICAgIFRocm93V2FzbUV4
Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24oKTsKLQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc3R1YihUaHVua0dlbmVyYXRvcik7CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzdHViKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGh1
bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
ZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yKTsKQEAgLTU2LDcgKzUzLDYgQEAgcHJpdmF0ZToK
ICAgICBUaHVua3MoKSA9IGRlZmF1bHQ7CiAKICAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBtX3N0dWJzOwotICAgIFRocm93
V2FzbUV4Y2VwdGlvbiBtX3Rocm93V2FzbUV4Y2VwdGlvbiB7IG51bGxwdHIgfTsKICAgICBMb2Nr
IG1fbG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21WYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCmluZGV4IDVhM2Y0M2MzYmQwYWQ5MmUzYWVjMWFkNjUzNzY3OTMwMDY1YjhlYzkuLmY5YzBh
M2FlYmE1OWYwM2FhNDcwZDFiNTkxYmJhMzlmN2U5Y2Q0ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcApAQCAtNDYsNiArNDYsMTkgQEAgcHVibGljOgog
ICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgYm9vbCBpc0lmKGNvbnN0IENv
bnRyb2xEYXRhJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6SWY7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNUb3BMZXZlbChjb25zdCBDb250cm9s
RGF0YSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6
OlRvcExldmVsOyB9CisKKyAgICAgICAgQmxvY2tUeXBlIGJsb2NrVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tUeXBlOyB9CisgICAgICAgIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CisKKyAgICAgICAgdW5zaWduZWQgYnJhbmNoVGFy
Z2V0QXJpdHkoKSBjb25zdCB7IHJldHVybiBibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3Ag
PyBzaWduYXR1cmUoKS0+YXJndW1lbnRDb3VudCgpIDogc2lnbmF0dXJlKCktPnJldHVybkNvdW50
KCk7IH0KKyAgICAgICAgVHlwZSBicmFuY2hUYXJnZXRUeXBlKHVuc2lnbmVkIGkpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnJhbmNoVGFyZ2V0QXJpdHkoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wID8gc2lnbmF0
dXJlKCktPmFyZ3VtZW50KGkpIDogc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7CisgICAgICAg
IH0KKwogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgc3dpdGNoIChibG9ja1R5cGUoKSkgewpAQCAtNjYsMzQgKzc5LDI0IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG91dC5wcmludChzaWcpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQmxvY2tUeXBlIGJsb2NrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tUeXBlOyB9Ci0g
ICAgICAgIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0
dXJlOyB9Ci0KLSAgICAgICAgdW5zaWduZWQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25zdCB7IHJl
dHVybiBibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3AgPyBzaWduYXR1cmUoKS0+YXJndW1l
bnRDb3VudCgpIDogc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7IH0KLSAgICAgICAgVHlwZSBi
cmFuY2hUYXJnZXRUeXBlKHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChpIDwgYnJhbmNoVGFyZ2V0QXJpdHkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wID8gc2lnbmF0dXJlKCktPmFyZ3VtZW50KGkpIDog
c2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7Ci0gICAgICAgIH0KLQogICAgIHByaXZhdGU6CiAg
ICAgICAgIEJsb2NrVHlwZSBtX2Jsb2NrVHlwZTsKICAgICAgICAgQmxvY2tTaWduYXR1cmUgbV9z
aWduYXR1cmU7CiAgICAgfTsKIAotICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsKLSAgICB0
eXBlZGVmIFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OwotICAgIHR5cGVk
ZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBSZXN1bHQ7Ci0gICAgdXNpbmcgRXhwcmVzc2lv
blR5cGUgPSBUeXBlOwotICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Np
b25UeXBlLCAxPjsKLSAgICB1c2luZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0OwotICAgIHR5cGVk
ZWYgQ29udHJvbERhdGEgQ29udHJvbFR5cGU7Ci0gICAgdHlwZWRlZiBFeHByZXNzaW9uTGlzdCBS
ZXN1bHRMaXN0OwotICAgIHR5cGVkZWYgRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9s
RW50cnkgQ29udHJvbEVudHJ5OworICAgIGVudW0gRXhwcmVzc2lvblR5cGUgeyBFbXB0eUV4cHJl
c3Npb24gfTsKKworICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmluZzsKKyAgICB1c2luZyBVbmV4
cGVjdGVkUmVzdWx0ID0gVW5leHBlY3RlZDxFcnJvclR5cGU+OworICAgIHVzaW5nIFJlc3VsdCA9
IEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT47CisgICAgdXNpbmcgQ29udHJvbFR5cGUgPSBDb250
cm9sRGF0YTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHBy
ZXNzaW9uKCkgeyByZXR1cm4gVm9pZDsgfQotICAgIFN0YWNrIGNyZWF0ZVN0YWNrKCkgeyByZXR1
cm4gU3RhY2soKTsgfQotICAgIGJvb2wgaXNDb250cm9sVHlwZUlmKGNvbnN0IENvbnRyb2xUeXBl
JiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6SWY7
IH0KKyAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT46OkNv
bnRyb2xFbnRyeTsKKyAgICB1c2luZyBDb250cm9sU3RhY2sgPSBGdW5jdGlvblBhcnNlcjxWYWxp
ZGF0ZT46OkNvbnRyb2xTdGFjazsKKyAgICB1c2luZyBSZXN1bHRMaXN0ID0gRnVuY3Rpb25QYXJz
ZXI8VmFsaWRhdGU+OjpSZXN1bHRMaXN0OworICAgIHVzaW5nIFN0YWNrID0gRnVuY3Rpb25QYXJz
ZXI8VmFsaWRhdGU+OjpTdGFjazsKKworICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4
cHJlc3Npb24oKSB7IHJldHVybiBFbXB0eUV4cHJlc3Npb247IH07CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZmFpbChjb25zdCBBcmdzJi4uLiBhcmdzKSBjb25zdApAQCAtMTEzLDE4
ICsxMTYsMTggQEAgcHVibGljOgogCiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRB
cmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3Rh
bnQoVHlwZSB0eXBlLCB1aW50NjRfdCkgeyByZXR1cm4gdHlwZTsgfQorICAgIEV4cHJlc3Npb25U
eXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KSB7IHJldHVybiBFbXB0eUV4cHJlc3Npb247
IH0KIAogICAgIC8vIFJlZmVyZW5jZXMKLSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmSXNOdWxsKEV4cHJlc3Npb25U
eXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFJlZkZ1bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOwogCiAgICAgLy8gVGFibGVzCi0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRU
YWJsZUdldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKLSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlU2V0KHVuc2ln
bmVkLCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSk7CisgICAg
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdldCh1bnNpZ25lZCwgRXhwcmVzc2lv
blR5cGUgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRU
YWJsZVNpemUodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYg
ZmlsbCwgRXhwcmVzc2lvblR5cGUmIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAg
ICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlRmlsbCh1bnNpZ25lZCwgRXhwcmVz
c2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBj
b3VudCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdyb3codW5zaWdu
ZWQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlRmls
bCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBF
eHByZXNzaW9uVHlwZSBjb3VudCk7CiAgICAgLy8gTG9jYWxzCiAgICAgUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwpAQCAtMTY3LDE0MiArMTcwLDgxIEBAIHB1YmxpYzoK
ICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IFJlc3VsdExpc3QmKTsKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRp
cmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CiAKLSAgICBib29sIGhhc01lbW9y
eSgpIGNvbnN0IHsgcmV0dXJuICEhbV9tb2R1bGUubWVtb3J5OyB9Ci0KLSAgICBWYWxpZGF0ZShj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlKQotICAgICAgICA6IG1fbW9kdWxlKG1vZHVs
ZSkKKyAgICBWYWxpZGF0ZSgpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZHVtcChjb25zdCBW
ZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNvbnN0IFN0YWNrKik7CisgICAgdm9pZCBkdW1wKGNvbnN0
IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKik7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rp
b25QYXJzZXI8VmFsaWRhdGU+KikgeyB9CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxz
KCkgeyB9CiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQogCiBwcml2YXRlOgog
ICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdW5pZnkoY29uc3QgU3RhY2smLCBjb25zdCBD
b250cm9sRGF0YSYpOwotCi0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBjaGVja0JyYW5j
aFRhcmdldChDb250cm9sRGF0YSYgdGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0YWNr
KTsKLQotICAgIFZlY3RvcjxUeXBlPiBtX2xvY2FsczsKLSAgICBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgbV9tb2R1bGU7CiB9OwogCi1hdXRvIFZhbGlkYXRlOjphZGRBcmd1bWVudHMoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkQXJndW1l
bnRzKGNvbnN0IFNpZ25hdHVyZSYpIC0+IFJlc3VsdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBXQVNNX0ZBSUxf
SUZfSEVMUEVSX0ZBSUxTKGFkZExvY2FsKHNpZ25hdHVyZS5hcmd1bWVudChpKSwgMSkpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRh
YmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdldCh1bnNpZ25lZCwgRXhwcmVzc2lv
blR5cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRih0YWJsZUluZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4
ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1bGUudGFibGVD
b3VudCgpKTsKLSAgICByZXN1bHQgPSBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5
cGUoKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBpbmRleCwgInRh
YmxlLmdldCBpbmRleCB0byB0eXBlICIsIG1ha2VTdHJpbmcoaW5kZXgpLCAiIGV4cGVjdGVkICIs
IG1ha2VTdHJpbmcoVHlwZTo6STMyKSk7Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZh
bGlkYXRlOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiB2YWx1ZSkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjph
ZGRUYWJsZVNldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSAtPiBS
ZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9tb2R1
bGUudGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBpcyBpbnZhbGlk
LCBsaW1pdCBpcyAiLCBtX21vZHVsZS50YWJsZUNvdW50KCkpOwotICAgIGF1dG8gdHlwZSA9IG1f
bW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpOwotICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYoVHlwZTo6STMyICE9IGluZGV4LCAidGFibGUuc2V0IGluZGV4IHRvIHR5cGUgIiwg
aW5kZXgsICIgZXhwZWN0ZWQgIiwgVHlwZTo6STMyKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFpc1N1YnR5cGUodmFsdWUsIHR5cGUpLCAidGFibGUuc2V0IHZhbHVlIHRvIHR5cGUgIiwg
dmFsdWUsICIgZXhwZWN0ZWQgIiwgdHlwZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9tb2R1bGUu
dGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBlOjpBbnlyZWYgfHwg
bV9tb2R1bGUudGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBlOjpG
dW5jcmVmKTsKLQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZFRhYmxl
U2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1
bHQKK2F1dG8gVmFsaWRhdGU6OmFkZFRhYmxlU2l6ZSh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUm
KSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBUeXBlOjpJMzI7Ci0gICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291bnQoKSwgInRhYmxlIGlu
ZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9tb2R1bGUudGFi
bGVDb3VudCgpKTsKLQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZFRh
YmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwcmVz
c2lvblR5cGUmIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK2F1dG8g
VmFsaWRhdGU6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Np
b25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIHJlc3VsdCA9IFR5cGU6
OkkzMjsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9tb2R1bGUu
dGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBpcyBpbnZhbGlkLCBs
aW1pdCBpcyAiLCBtX21vZHVsZS50YWJsZUNvdW50KCkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZShmaWxsLCBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5
cGUoKSksICJ0YWJsZS5ncm93IGV4cGVjdHMgZmlsbCB2YWx1ZSBvZiB0eXBlICIsIG1fbW9kdWxl
LnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpLCAiIGdvdCAiLCBmaWxsKTsKLSAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBkZWx0YSwgInRhYmxlLmdyb3cgZXhwZWN0
cyBhbiBpMzIgZGVsdGEgdmFsdWUsIGdvdCAiLCBtYWtlU3RyaW5nKGRlbHRhKSk7Ci0KICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZUZpbGwodW5zaWduZWQgdGFi
bGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4
cHJlc3Npb25UeXBlJiBjb3VudCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRUYWJsZUZp
bGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5
cGUpIC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+
PSBtX21vZHVsZS50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlz
IGludmFsaWQsIGxpbWl0IGlzICIsIG1fbW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGZpbGwsIG1fbW9kdWxlLnRhYmxlc1t0YWJsZUlu
ZGV4XS53YXNtVHlwZSgpKSwgInRhYmxlLmZpbGwgZXhwZWN0cyBmaWxsIHZhbHVlIG9mIHR5cGUg
IiwgbV9tb2R1bGUudGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCksICIgZ290ICIsIGZpbGwp
OwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoVHlwZTo6STMyICE9IG9mZnNldCwgInRhYmxl
LmZpbGwgZXhwZWN0cyBhbiBpMzIgb2Zmc2V0IHZhbHVlLCBnb3QgIiwgbWFrZVN0cmluZyhvZmZz
ZXQpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBjb3VudCwgInRh
YmxlLmZpbGwgZXhwZWN0cyBhbiBpMzIgY291bnQgdmFsdWUsIGdvdCAiLCBtYWtlU3RyaW5nKGNv
dW50KSk7Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRSZWZJc051
bGwoRXhwcmVzc2lvblR5cGUmIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1
bHQKK2F1dG8gVmFsaWRhdGU6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lv
blR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBUeXBlOjpJMzI7Ci0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZhbHVlLCBUeXBlOjpBbnlyZWYpLCAicmVmLmlz
X251bGwgdG8gdHlwZSAiLCBtYWtlU3RyaW5nKHZhbHVlKSwgIiBleHBlY3RlZCAiLCBtYWtlU3Ry
aW5nKFR5cGU6OkFueXJlZikpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0
ZTo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRSZWZGdW5jKHVpbnQzMl90LCBFeHByZXNzaW9uVHlw
ZSYpIC0+IFJlc3VsdAogewotICAgIHJlc3VsdCA9IFR5cGU6OkZ1bmNyZWY7Ci0gICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX21vZHVsZS5mdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCksICJyZWYuZnVuYyBpbmRleCAiLCBpbmRleCwgIiBpcyB0b28gbGFyZ2UsIG1heCBpcyAiLCBt
X21vZHVsZS5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgIG1fbW9kdWxlLmFkZFJlZmVy
ZW5jZWRGdW5jdGlvbihpbmRleCk7Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlk
YXRlOjphZGRMb2NhbChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KSAtPiBSZXN1bHQKK2F1dG8g
VmFsaWRhdGU6OmFkZExvY2FsKFR5cGUsIHVpbnQzMl90KSAtPiBSZXN1bHQKIHsKLSAgICBzaXpl
X3QgbmV3U2l6ZSA9IG1fbG9jYWxzLnNpemUoKSArIGNvdW50OwotICAgIEFTU0VSVCghKENoZWNr
ZWRVaW50MzIoY291bnQpICsgbV9sb2NhbHMuc2l6ZSgpKS5oYXNPdmVyZmxvd2VkKCkpOwotICAg
IEFTU0VSVChuZXdTaXplIDw9IG1heEZ1bmN0aW9uTG9jYWxzKTsKLSAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkobmV3U2l6ZSksICJjYW4ndCBh
bGxvY2F0ZSBtZW1vcnkgZm9yICIsIG5ld1NpemUsICIgbG9jYWxzIik7Ci0KLSAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbV9sb2NhbHMudW5jaGVja2Vk
QXBwZW5kKHR5cGUpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmdldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK2F1
dG8gVmFsaWRhdGU6OmdldExvY2FsKHVpbnQzMl90LCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3Vs
dAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9sb2NhbHMuc2l6ZSgp
LCAiYXR0ZW1wdCB0byB1c2UgdW5rbm93biBsb2NhbCAiLCBpbmRleCwgIiBsYXN0IG9uZSBpcyAi
LCBtX2xvY2Fscy5zaXplKCkpOwotICAgIHJlc3VsdCA9IG1fbG9jYWxzW2luZGV4XTsKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwo
dWludDMyX3QsIEV4cHJlc3Npb25UeXBlKSAtPiBSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlw
ZSBsb2NhbFR5cGU7Ci0gICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhnZXRMb2NhbChpbmRl
eCwgbG9jYWxUeXBlKSk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZh
bHVlLCBsb2NhbFR5cGUpLCAic2V0X2xvY2FsIHRvIHR5cGUgIiwgdmFsdWUsICIgZXhwZWN0ZWQg
IiwgbG9jYWxUeXBlKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjpnZXRH
bG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAor
YXV0byBWYWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQzMl90LCBFeHByZXNzaW9uVHlwZSYpIC0+IFJl
c3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZ2xv
YmFscy5zaXplKCksICJnZXRfZ2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBs
aW1pdCBpcyAiLCBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSk7Ci0gICAgcmVzdWx0ID0gbV9tb2R1
bGUuZ2xvYmFsc1tpbmRleF0udHlwZTsKLSAgICBBU1NFUlQoaXNWYWx1ZVR5cGUocmVzdWx0KSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6c2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjpz
ZXRHbG9iYWwodWludDMyX3QsIEV4cHJlc3Npb25UeXBlKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgpLCAic2V0
X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9tb2R1
bGUuZ2xvYmFscy5zaXplKCkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9tb2R1bGUu
Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSwgInNldF9nbG9i
YWwgIiwgaW5kZXgsICIgaXMgaW1tdXRhYmxlIik7Ci0KLSAgICBFeHByZXNzaW9uVHlwZSBnbG9i
YWxUeXBlID0gbV9tb2R1bGUuZ2xvYmFsc1tpbmRleF0udHlwZTsKLSAgICBBU1NFUlQoaXNWYWx1
ZVR5cGUoZ2xvYmFsVHlwZSkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZ2xvYmFsVHlw
ZSAhPSB2YWx1ZSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgd2l0aCB0eXBlICIsIGdsb2JhbFR5
cGUsICIgd2l0aCBhIHZhcmlhYmxlIG9mIHR5cGUgIiwgdmFsdWUpOwogICAgIHJldHVybiB7IH07
CiB9CiAKQEAgLTMxMSwxNzggKzI1MywxMTQgQEAgVmFsaWRhdGU6OkNvbnRyb2xUeXBlIFZhbGlk
YXRlOjphZGRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCiAgICAgcmV0dXJuIENv
bnRyb2xEYXRhKEJsb2NrVHlwZTo6VG9wTGV2ZWwsIHNpZ25hdHVyZSk7CiB9CiAKLXN0YXRpYyBW
YWxpZGF0ZTo6U3RhY2sgc3BsaXRTdGFjayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFZhbGlk
YXRlOjpTdGFjayYgc3RhY2spCi17Ci0gICAgVmFsaWRhdGU6OlN0YWNrIHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7
Ci0gICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7
Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyArK2kpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoc3RhY2tbaSAr
IG9mZnNldF0pOwotICAgIHN0YWNrLnNocmluayhvZmZzZXQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KIGF1dG8gVmFsaWRhdGU6OmFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdT
dGFjaykgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihlbmNsb3NpbmdT
dGFjay5zaXplKCkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgdmFsdWVz
IG9uIHN0YWNrIGZvciBibG9jay4gQmxvY2sgZXhwZWN0cyAiLCBzaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgZW5jbG9zaW5nU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJl
c2VudC4gQmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgKnNpZ25hdHVyZSk7Ci0gICAgbmV3U3RhY2sg
PSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2so
c2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIG5ld0Jsb2NrID0gQ29u
dHJvbERhdGEoQmxvY2tUeXBlOjpCbG9jaywgc2lnbmF0dXJlKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKG5ld1N0YWNrW2ldLCBzaWduYXR1cmUtPmFy
Z3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRv
IGJlIGEgc3VidHlwZSBvZiAiLCBzaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVu
dCBoYXMgdHlwZSAiLCBuZXdTdGFja1tpXSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBW
YWxpZGF0ZTo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIGxvb3AsIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QpIC0+
IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZW5jbG9zaW5nU3RhY2suc2l6
ZSgpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IHZhbHVlcyBvbiBzdGFj
ayBmb3IgbG9vcCBibG9jay4gTG9vcCBleHBlY3RzICIsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpLCAiLCBidXQgb25seSAiLCBlbmNsb3NpbmdTdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50
LiBMb29wIGhhcyBzaWduYXR1cmU6ICIsICpzaWduYXR1cmUpOwotICAgIG5ld1N0YWNrID0gc3Bs
aXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25h
dHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICBsb29wID0gQ29udHJvbERhdGEo
QmxvY2tUeXBlOjpMb29wLCBzaWduYXR1cmUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKCFpc1N1YnR5cGUobmV3U3RhY2tbaV0sIHNpZ25hdHVyZS0+YXJndW1lbnQoaSkp
LCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgYSBzdWJ0
eXBlIG9mICIsIHNpZ25hdHVyZS0+YXJndW1lbnQoaSksICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBl
ICIsIG5ld1N0YWNrW2ldKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjph
ZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJv
LCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQK
K2F1dG8gVmFsaWRhdGU6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUs
IEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9IEkzMiwgInNlbGVjdCBjb25kaXRpb24gbXVz
dCBiZSBpMzIsIGdvdCAiLCBjb25kaXRpb24pOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
bm9uWmVybyAhPSB6ZXJvLCAic2VsZWN0IHJlc3VsdCB0eXBlcyBtdXN0IG1hdGNoLCBnb3QgIiwg
bm9uWmVybywgIiBhbmQgIiwgemVybyk7Ci0gICAgcmVzdWx0ID0gemVybzsKICAgICByZXR1cm4g
eyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6
YWRkSWYoRXhwcmVzc2lvblR5cGUsIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spIC0+IFJl
c3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9IEkzMiwgImlm
IGNvbmRpdGlvbiBtdXN0IGJlIGkzMiwgZ290ICIsIG1ha2VTdHJpbmcoY29uZGl0aW9uKSk7Ci0g
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihlbmNsb3NpbmdTdGFjay5zaXplKCkgPCBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciBpZiBi
bG9jay4gSWYgZXhwZWN0cyAiLCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9u
bHkgIiwgZW5jbG9zaW5nU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gSWYgYmxvY2sgaGFz
IHNpZ25hdHVyZTogIiwgKnNpZ25hdHVyZSk7Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNp
Z25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNs
b3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKEJsb2NrVHlw
ZTo6SWYsIHNpZ25hdHVyZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
IWlzU3VidHlwZShuZXdTdGFja1tpXSwgc2lnbmF0dXJlLT5hcmd1bWVudChpKSksICJMb29wIGV4
cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSBhIHN1YnR5cGUgb2YgIiwg
c2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbmV3U3Rh
Y2tbaV0pOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZEVsc2UoQ29u
dHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IFN0YWNrJiB2YWx1ZXMpIC0+IFJlc3VsdAorYXV0byBW
YWxpZGF0ZTo6YWRkRWxzZShDb250cm9sVHlwZSYgY3VycmVudCwgY29uc3QgU3RhY2smKSAtPiBS
ZXN1bHQKIHsKLSAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KHZhbHVlcywgY3Vy
cmVudCkpOwogICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShjdXJyZW50KTsKIH0KIAog
YXV0byBWYWxpZGF0ZTo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGN1cnJlbnQp
IC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY3VycmVudC5ibG9ja1R5
cGUoKSAhPSBCbG9ja1R5cGU6OklmLCAiZWxzZSBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGFu
IGlmIik7CiAgICAgY3VycmVudCA9IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6QmxvY2ssIGN1cnJl
bnQuc2lnbmF0dXJlKCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFk
ZFJldHVybihDb250cm9sVHlwZSYgdG9wTGV2ZWwsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkUmV0dXJuKENvbnRyb2xUeXBl
JiwgY29uc3QgU3RhY2smKSAtPiBSZXN1bHQKIHsKLSAgICBBU1NFUlQodG9wTGV2ZWwuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCk7Ci0gICAgcmV0dXJuIGNoZWNrQnJhbmNoVGFy
Z2V0KHRvcExldmVsLCByZXR1cm5WYWx1ZXMpOwotfQotCi1hdXRvIFZhbGlkYXRlOjpjaGVja0Jy
YW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0
YWNrKSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoIXRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHByZXNz
aW9uU3RhY2suc2l6ZSgpIDwgdGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCksIHRhcmdldC5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsID8gImJyYW5jaCBvdXQgb2YgZnVuY3Rpb24i
IDogImJyYW5jaCB0byBibG9jayIsICIgb24gZXhwcmVzc2lvbiBzdGFjayBvZiBzaXplICIsIGV4
cHJlc3Npb25TdGFjay5zaXplKCksICIsIGJ1dCBibG9jaywgIiwgdGFyZ2V0ICwgIiBleHBlY3Rz
ICIsIHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpLCAiIHZhbHVlcyIpOwotCi0KLSAgICB1bnNp
Z25lZCBleHByZXNzaW9uU3RhY2tPZmZzZXQgPSBleHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gdGFy
Z2V0LmJyYW5jaFRhcmdldEFyaXR5KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRh
cmdldC5icmFuY2hUYXJnZXRBcml0eSgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZSh0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgZXhwcmVzc2lvblN0
YWNrW2V4cHJlc3Npb25TdGFja09mZnNldCArIGldKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgaXMg
bm90IGEgc3VidHlwZSBvZiBibG9jaydzIHR5cGUgYnJhbmNoIHRhcmdldCB0eXBlLiBTdGFjayB2
YWx1ZSBoYXMgdHlwZSIsIGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2tPZmZzZXQgKyBp
XSwgIiBidXQgYnJhbmNoIHRhcmdldCBleHBlY3RzIGEgdmFsdWUgd2l0aCBzdWJ0eXBlIG9mICIs
IHRhcmdldC5icmFuY2hUYXJnZXRUeXBlKGkpLCAiIGF0IGluZGV4ICIsIGkpOwotCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJn
ZXQsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHN0YWNrKSAtPiBSZXN1
bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYsIEV4cHJlc3Npb25UeXBl
LCBjb25zdCBTdGFjayYpIC0+IFJlc3VsdAogewotICAgIC8vIFZvaWQgbWVhbnMgdGhpcyBpcyBh
biB1bmNvbmRpdGlvbmFsIGJyYW5jaC4KLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRp
dGlvbiAhPSBWb2lkICYmIGNvbmRpdGlvbiAhPSBJMzIsICJjb25kaXRpb25hbCBicmFuY2ggd2l0
aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25kaXRpb24pOwotICAgIHJldHVybiBjaGVja0JyYW5j
aFRhcmdldCh0YXJnZXQsIHN0YWNrKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlk
YXRlOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29u
dHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IFN0
YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNo
KEV4cHJlc3Npb25UeXBlLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYsIENvbnRyb2xEYXRh
JiwgY29uc3QgU3RhY2smKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KGNvbmRpdGlvbiAhPSBJMzIsICJicl90YWJsZSB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNv
bmRpdGlvbik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7
ICsraSkgewotICAgICAgICBhdXRvKiB0YXJnZXQgPSB0YXJnZXRzW2ldOwotICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSAhPSB0
YXJnZXQtPmJyYW5jaFRhcmdldEFyaXR5KCksICJicl90YWJsZSB0YXJnZXQgdHlwZSBzaXplIG1p
c21hdGNoLiBEZWZhdWx0IGhhcyBzaXplOiAiLCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldEFy
aXR5KCksICJidXQgdGFyZ2V0OiAiLCBpLCAiIGhhcyBzaXplOiAiLCB0YXJnZXQtPmJyYW5jaFRh
cmdldEFyaXR5KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAwOyB0eXBlIDwgZGVm
YXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOyArK3R5cGUpCi0gICAgICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRU
eXBlKHR5cGUpLCB0YXJnZXQtPmJyYW5jaFRhcmdldFR5cGUodHlwZSkpLCAiYnJfdGFibGUgdGFy
Z2V0IHR5cGUgbWlzbWF0Y2ggYXQgb2Zmc2V0ICIsIHR5cGUsICIgZXhwZWN0ZWQ6ICIsIGRlZmF1
bHRUYXJnZXQuYnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSwgIiBidXQgc2F3OiAiLCB0YXJnZXQtPmJy
YW5jaFRhcmdldFR5cGUodHlwZSksICIgd2hlbiB0YXJnZXRpbmcgYmxvY2siLCAqdGFyZ2V0KTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCwgZXhw
cmVzc2lvblN0YWNrKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRH
cm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihk
ZWx0YSAhPSBJMzIsICJncm93X21lbW9yeSB3aXRoIG5vbi1pMzIgZGVsdGEgYXJndW1lbnQgaGFz
IHR5cGU6ICIsIGRlbHRhKTsKLSAgICByZXN1bHQgPSBJMzI7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5
cGUmKSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBJMzI7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIHN0
YWNrKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50
cnksIFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1
bmlmeShzdGFjaywgZW50cnkuY29udHJvbERhdGEpKTsKICAgICByZXR1cm4gYWRkRW5kVG9VbnJl
YWNoYWJsZShlbnRyeSk7CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUo
Q29udHJvbEVudHJ5JiBlbnRyeSkgLT4gUmVzdWx0CiB7CiAgICAgYXV0byBibG9jayA9IGVudHJ5
LmNvbnRyb2xEYXRhOwotICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oYmxvY2suYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpJZik7Ci0KICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2suc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkKLSAg
ICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGJsb2NrLnNpZ25hdHVy
ZSgpLT5yZXR1cm5UeXBlKGkpKTsKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3Rh
Y2suY29uc3RydWN0QW5kQXBwZW5kKGJsb2NrLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCBF
bXB0eUV4cHJlc3Npb24pOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFk
ZENhbGwodW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBSZXN1bHQKK2F1
dG8gVmFsaWRhdGU6OmFkZENhbGwodW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSBhcmdzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXpl
KCk7ICsraSkKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZ3Nb
aV0sIHNpZ25hdHVyZS5hcmd1bWVudChpKSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNh
bGwsIGdvdCAiLCBhcmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJndW1lbnQoaSkp
OwotCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgp
OyArK2kpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKTsK
KyAgICAgICAgcmVzdWx0cy5hcHBlbmQoRW1wdHlFeHByZXNzaW9uKTsKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29u
c3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFJlc3Vs
dAogewotICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlSW5kZXggPCBtX21vZHVsZS50YWJsZUNvdW50
KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS50eXBl
KCkgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3JlZik7Ci0gICAgY29uc3QgYXV0byBhcmd1bWVu
dENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChh
cmd1bWVudENvdW50ID09IGFyZ3Muc2l6ZSgpIC0gMSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFpc1N1YnR5cGUoYXJnc1tpXSwgc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSwgImFyZ3VtZW50
IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZ3NbaV0sICIsIGV4cGVj
dGVkICIsIHNpZ25hdHVyZS5hcmd1bWVudChpKSk7Ci0KLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKGFyZ3MubGFzdCgpICE9IEkzMiwgIm5vbi1pMzIgY2FsbF9pbmRpcmVjdCBpbmRleCAiLCBh
cmdzLmxhc3QoKSk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJl
dHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoc2lnbmF0dXJlLnJldHVy
blR5cGUoaSkpOworICAgICAgICByZXN1bHRzLmFwcGVuZChFbXB0eUV4cHJlc3Npb24pOwogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OnVuaWZ5KGNvbnN0IFN0YWNrJiB2YWx1
ZXMsIGNvbnN0IENvbnRyb2xUeXBlJiBibG9jaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjps
b2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90
KSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGJsb2NrLnNpZ25hdHVy
ZSgpLT5yZXR1cm5Db3VudCgpICE9IHZhbHVlcy5zaXplKCksICIgYmxvY2sgd2l0aCB0eXBlOiAi
LCAqYmxvY2suc2lnbmF0dXJlKCksICIgcmV0dXJuczogIiwgYmxvY2suc2lnbmF0dXJlKCktPnJl
dHVybkNvdW50KCksICIgYnV0IHN0YWNrIGhhczogIiwgdmFsdWVzLnNpemUoKSwgIiB2YWx1ZXMi
KTsKKyAgICByZXR1cm4geyB9OworfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZXNbaV0sIGJsb2NrLnNpZ25hdHVyZSgpLT5yZXR1
cm5UeXBlKGkpKSwgImNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLiAi
LCB2YWx1ZXNbaV0sICIgaXMgbm90IGEgc3VidHlwZSBvZiAiLCBibG9jay5zaWduYXR1cmUoKS0+
cmV0dXJuVHlwZShpKSk7CithdXRvIFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVz
c2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCB1aW50MzJfdCkgLT4gUmVzdWx0Cit7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8T3BUeXBlPgorYXV0byBWYWxpZGF0ZTo6YWRkT3AoRXhw
cmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0Cit7CisgICAgcmV0dXJuIHsg
fTsKK30KIAotICAgIC8vIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWVzLnNpemUoKSAhPSAx
LCAiYmxvY2sgd2l0aCB0eXBlOiAiLCBtYWtlU3RyaW5nKCpibG9jay5zaWduYXR1cmUoKSksICIg
ZW5kcyB3aXRoIGEgc3RhY2sgY29udGFpbmluZyBtb3JlIHRoYW4gb25lIHZhbHVlIik7Cit0ZW1w
bGF0ZTxPcFR5cGU+CithdXRvIFZhbGlkYXRlOjphZGRPcChFeHByZXNzaW9uVHlwZSwgRXhwcmVz
c2lvblR5cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0Cit7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIApAQCAtNDkwLDEwICszNjgsMTAgQEAgc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFj
ayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBWYWxpZGF0ZTo6U3RhY2sKIHsKICAg
ICBkYXRhTG9nKGNvbW1hLCAiIEV4cHJlc3Npb25TdGFjazoiKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCi0gICAgICAgIGRhdGFMb2coY29tbWEs
IG1ha2VTdHJpbmcoZXhwcmVzc2lvbikpOworICAgICAgICBkYXRhTG9nKGNvbW1hLCBtYWtlU3Ry
aW5nKGV4cHJlc3Npb24udHlwZSgpKSk7CiB9CiAKLXZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Np
b25TdGFjaykKK3ZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiBjb250cm9s
U3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IGNvbnRyb2xTdGFjay5zaXplKCk7IGktLTspIHsKICAgICAgICAgZGF0YUxvZygiICAiLCBj
b250cm9sU3RhY2tbaV0uY29udHJvbERhdGEpOwpAQCAtNTA3LDcgKzM4NSw3IEBAIHZvaWQgVmFs
aWRhdGU6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29u
c3QgU3RhY2sqIGV4cHJlCiAKIEV4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlv
bihjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZSkKIHsKLSAgICBWYWxpZGF0ZSBjb250
ZXh0KG1vZHVsZSk7CisgICAgVmFsaWRhdGUgY29udGV4dDsKICAgICBGdW5jdGlvblBhcnNlcjxW
YWxpZGF0ZT4gdmFsaWRhdG9yKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlv
bi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtb2R1bGUpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFModmFsaWRhdG9yLnBhcnNlKCkpOwogICAgIHJldHVybiB7IH07CkBAIC01MTUsNiAr
MzkzLDQgQEAgRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IEZ1
bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ24KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIAotI2luY2x1ZGUgIldhc21WYWxpZGF0ZUlubGluZXMuaCIKLQogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuY3BwCmluZGV4IGRmOGIzZTg5Y2JhNmY2ZDEyNzk0NTBlZjRiZDRiZDA0Mzc5ODkzZjAuLmZh
NzE2ZTIyNWJlOTEyYzAzNzZiNDhkMTIyMGZlYWRhYjY4ZmM1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApAQCAtMTUyLDggKzE1MiwxMiBAQCB2b2lk
IFdvcmtsaXN0OjplbnF1ZXVlKFJlZjxQbGFuPiBwbGFuKQogICAgIH0KIAogICAgIGRhdGFMb2dM
bklmKFdhc21Xb3JrbGlzdEludGVybmFsOjp2ZXJib3NlLCAiRW5xdWV1aW5nIHBsYW4iKTsKLSAg
ICBtX3F1ZXVlLmVucXVldWUoeyBQcmlvcml0eTo6UHJlcGFyYXRpb24sIG5leHRUaWNrZXQoKSwg
IFdURk1vdmUocGxhbikgfSk7Ci0gICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIp
OworICAgIGJvb2wgbXVsdGlUaHJlYWRlZCA9IHBsYW4tPm11bHRpVGhyZWFkZWQoKTsKKyAgICBt
X3F1ZXVlLmVucXVldWUoeyBtdWx0aVRocmVhZGVkID8gUHJpb3JpdHk6OkNvbXBpbGF0aW9uIDog
UHJpb3JpdHk6OlByZXBhcmF0aW9uLCBuZXh0VGlja2V0KCksICBXVEZNb3ZlKHBsYW4pIH0pOwor
ICAgIGlmIChtdWx0aVRocmVhZGVkKQorICAgICAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxs
KGxvY2tlcik7CisgICAgZWxzZQorICAgICAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5T25lKGxv
Y2tlcik7CiB9CiAKIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxh
biYgcGxhbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRl
V2FzbU9wc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2Fz
bU9wc0hlYWRlci5weQppbmRleCBiMTNhNWUyNGM0ZjQ2MmE0MTVlNTA4OThjMzgyYTgwZGI4MDg2
NDQ3Li5jYjAyODFiOWFjNTNiZDlhZGRlODZjMmM4YjM0YmUzYTdkOGVmNzM4IDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CkBA
IC00MCwxMCArNDAsMTYgQEAgb3Bjb2RlcyA9IHdhc20ub3Bjb2Rlcwogd2FzbU9wc0hGaWxlID0g
b3BlbihhcmdzWzJdLCAidyIpCiAKIAotZGVmIGNwcE1hY3JvKHdhc21PcGNvZGUsIHZhbHVlLCBi
MywgaW5jKToKLSAgICByZXR1cm4gIiBcXFxuICAgIG1hY3JvKCIgKyB3YXNtLnRvQ3BwKHdhc21P
cGNvZGUpICsgIiwgIiArIGhleChpbnQodmFsdWUpKSArICIsICIgKyBiMyArICIsICIgKyBzdHIo
aW5jKSArICIpIgorZGVmIGNwcFR5cGUodHlwZSk6CisgICAgaWYgdHlwZSA9PSAiYm9vbCI6Cisg
ICAgICAgIHJldHVybiAiSTMyIgorICAgIHJldHVybiB0eXBlLmNhcGl0YWxpemUoKQogCiAKK2Rl
ZiBjcHBNYWNybyh3YXNtT3Bjb2RlLCB2YWx1ZSwgYjMsIGluYywgKmV4dHJhQXJncyk6CisgICAg
ZXh0cmFBcmdzU3RyID0gIiwgIiArICIsICIuam9pbihleHRyYUFyZ3MpIGlmIGxlbihleHRyYUFy
Z3MpIGVsc2UgIiIKKyAgICByZXR1cm4gIiBcXFxuICAgIG1hY3JvKCIgKyB3YXNtLnRvQ3BwKHdh
c21PcGNvZGUpICsgIiwgIiArIGhleChpbnQodmFsdWUpKSArICIsICIgKyBiMyArICIsICIgKyBz
dHIoaW5jKSArIGV4dHJhQXJnc1N0ciArICIpIgorCiBkZWYgdHlwZU1hY3JvaXplcigpOgogICAg
IGluYyA9IDAKICAgICBmb3IgdHkgaW4gd2FzbS50eXBlczoKQEAgLTU1LDMzICs2MSw1NSBAQCB0
eXBlX2RlZmluaXRpb25zLmV4dGVuZChbdCBmb3IgdCBpbiB0eXBlTWFjcm9pemVyKCldKQogdHlw
ZV9kZWZpbml0aW9ucyA9ICIiLmpvaW4odHlwZV9kZWZpbml0aW9ucykKIAogCi1kZWYgb3Bjb2Rl
TWFjcm9pemVyKGZpbHRlciwgb3Bjb2RlRmllbGQ9InZhbHVlIik6CitkZWYgb3Bjb2RlTWFjcm9p
emVyKGZpbHRlciwgb3Bjb2RlRmllbGQ9InZhbHVlIiwgbW9kaWZpZXI9Tm9uZSk6CiAgICAgaW5j
ID0gMAogICAgIGZvciBvcCBpbiB3YXNtLm9wY29kZUl0ZXJhdG9yKGZpbHRlcik6CiAgICAgICAg
IGIzb3AgPSAiT29wcyIKICAgICAgICAgaWYgaXNTaW1wbGUob3BbIm9wY29kZSJdKToKICAgICAg
ICAgICAgIGIzb3AgPSBvcFsib3Bjb2RlIl1bImIzb3AiXQotICAgICAgICB5aWVsZCBjcHBNYWNy
byhvcFsibmFtZSJdLCBvcFsib3Bjb2RlIl1bb3Bjb2RlRmllbGRdLCBiM29wLCBpbmMpCisgICAg
ICAgIGV4dHJhQXJncyA9IFtdCisgICAgICAgIGlmIG1vZGlmaWVyOgorICAgICAgICAgICAgZXh0
cmFBcmdzID0gbW9kaWZpZXIob3BbIm9wY29kZSJdKQorICAgICAgICB5aWVsZCBjcHBNYWNybyhv
cFsibmFtZSJdLCBvcFsib3Bjb2RlIl1bb3Bjb2RlRmllbGRdLCBiM29wLCBpbmMsICpleHRyYUFy
Z3MpCiAgICAgICAgIGluYyArPSAxCiAKKworZGVmIG9wY29kZVdpdGhUeXBlc01hY3JvaXplcihm
aWx0ZXIpOgorICAgIGRlZiBtb2RpZmllcihvcCk6CisgICAgICAgIHJldHVybiBbY3BwVHlwZSh0
eXBlKSBmb3IgdHlwZSBpbiBvcFsicGFyYW1ldGVyIl0gKyBvcFsicmV0dXJuIl1dCisgICAgcmV0
dXJuIG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG1vZGlmaWVyPW1vZGlmaWVyKQorCisKK2RlZiBt
ZW1vcnlMb2FkTWFjcm9pemVyKCk6CisgICAgZGVmIG1vZGlmaWVyKG9wKToKKyAgICAgICAgcmV0
dXJuIFtjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSldCisgICAgcmV0dXJuIG9wY29kZU1hY3JvaXpl
cihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAibWVtb3J5IiBhbmQgbGVuKG9wWyJyZXR1
cm4iXSkgPT0gMSksIG1vZGlmaWVyPW1vZGlmaWVyKQorCisKK2RlZiBtZW1vcnlTdG9yZU1hY3Jv
aXplcigpOgorICAgIGRlZiBtb2RpZmllcihvcCk6CisgICAgICAgIHJldHVybiBbY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMV0pXQorICAgIHJldHVybiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9w
OiAob3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJuIl0pID09IDAp
LCBtb2RpZmllcj1tb2RpZmllcikKKworCiBkZWZpbmVzID0gWyIjZGVmaW5lIEZPUl9FQUNIX1dB
U01fU1BFQ0lBTF9PUChtYWNybykiXQogZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNv
ZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBub3QgKGlzVW5hcnkob3ApIG9yIGlzQmluYXJ5KG9wKSBv
ciBvcFsiY2F0ZWdvcnkiXSA9PSAiY29udHJvbCIgb3Igb3BbImNhdGVnb3J5Il0gPT0gIm1lbW9y
eSIgb3Igb3BbImNhdGVnb3J5Il0gPT0gImV4dHRhYmxlIikpXSkKIGRlZmluZXMuYXBwZW5kKCJc
blxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxPV19PUChtYWNybykiKQogZGVmaW5l
cy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBvcFsiY2F0
ZWdvcnkiXSA9PSAiY29udHJvbCIpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1Jf
RUFDSF9XQVNNX1NJTVBMRV9VTkFSWV9PUChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29wIGZv
ciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc1VuYXJ5KG9wKSBhbmQgaXNTaW1w
bGUob3ApKV0pCitkZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZVdpdGhUeXBlc01h
Y3JvaXplcihsYW1iZGEgb3A6IGlzVW5hcnkob3ApIGFuZCBpc1NpbXBsZShvcCkpXSkKIGRlZmlu
ZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKG1hY3JvKSBcXFxu
ICAgIEZPUl9FQUNIX1dBU01fU0lNUExFX1VOQVJZX09QKG1hY3JvKSIpCi1kZWZpbmVzLmV4dGVu
ZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IGlzVW5hcnkob3ApIGFu
ZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bj
b2RlV2l0aFR5cGVzTWFjcm9pemVyKGxhbWJkYSBvcDogaXNVbmFyeShvcCkgYW5kIG5vdCAoaXNT
aW1wbGUob3ApKSldKQogZGVmaW5lcy5hcHBlbmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01f
U0lNUExFX0JJTkFSWV9PUChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBv
cGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIGlzU2ltcGxlKG9wKSld
KQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVXaXRoVHlwZXNNYWNyb2l6ZXIo
bGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIGlzU2ltcGxlKG9wKSldKQogZGVmaW5lcy5hcHBl
bmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKG1hY3JvKSBcXFxuICAgIEZP
Ul9FQUNIX1dBU01fU0lNUExFX0JJTkFSWV9PUChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29w
IGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIG5v
dCAoaXNTaW1wbGUob3ApKSldKQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVX
aXRoVHlwZXNNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIG5vdCAoaXNTaW1w
bGUob3ApKSldKQogZGVmaW5lcy5hcHBlbmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fTUVN
T1JZX0xPQURfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2Rl
TWFjcm9pemVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIGFuZCBsZW4o
b3BbInJldHVybiJdKSA9PSAxKSldKQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBtZW1v
cnlMb2FkTWFjcm9pemVyKCldKQogZGVmaW5lcy5hcHBlbmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNI
X1dBU01fTUVNT1JZX1NUT1JFX09QKG1hY3JvKSIpCi1kZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9w
IGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAibWVtb3J5
IiBhbmQgbGVuKG9wWyJyZXR1cm4iXSkgPT0gMCkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Ig
b3AgaW4gbWVtb3J5U3RvcmVNYWNyb2l6ZXIoKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiNkZWZp
bmUgRk9SX0VBQ0hfV0FTTV9FWFRfVEFCTEVfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtv
cCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09
ICJleHR0YWJsZSIpLCAiZXh0ZW5kZWRPcCIpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3Ag
aW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09ICJleHR0YWJs
ZSIpLCBvcGNvZGVGaWVsZD0iZXh0ZW5kZWRPcCIpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuIikK
IAogZGVmaW5lcyA9ICIiLmpvaW4oZGVmaW5lcykKQEAgLTEzMywxMyArMTYxLDEzIEBAIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgZXhwZWN0ZWRWZXJzaW9uTnVtYmVyID0gIiIiICsgd2FzbS5l
eHBlY3RlZFZlcnNpb25OdW1iCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bVR5cGVzID0g
IiIiICsgc3RyKGxlbih0eXBlcykpICsgIiIiOwogCiAiIiIgKyB0eXBlX2RlZmluaXRpb25zICsg
IiIiCi0jZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkLCBiM3R5cGUsIGluYykgbmFt
ZSA9IGlkLAorI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgLi4uKSBuYW1lID0g
aWQsCiBlbnVtIFR5cGUgOiBpbnQ4X3QgewogICAgIEZPUl9FQUNIX1dBU01fVFlQRShDUkVBVEVf
RU5VTV9WQUxVRSkKIH07CiAjdW5kZWYgQ1JFQVRFX0VOVU1fVkFMVUUKIAotI2RlZmluZSBDUkVB
VEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgaWQ6IHJldHVybiB0cnVlOworI2Rl
ZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgLi4uKSBjYXNlIGlkOiByZXR1cm4gdHJ1ZTsKIHRl
bXBsYXRlIDx0eXBlbmFtZSBJbnQ+CiBpbmxpbmUgYm9vbCBpc1ZhbGlkVHlwZShJbnQgaSkKIHsK
QEAgLTE1Miw3ICsxODAsNyBAQCBpbmxpbmUgYm9vbCBpc1ZhbGlkVHlwZShJbnQgaSkKIH0KICN1
bmRlZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUs
IGluYykgY2FzZSBuYW1lOiByZXR1cm4gYjN0eXBlOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1l
LCBpZCwgYjN0eXBlLCAuLi4pIGNhc2UgbmFtZTogcmV0dXJuIGIzdHlwZTsKIGlubGluZSBCMzo6
VHlwZSB0b0IzVHlwZShUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNjMs
NyArMTkxLDcgQEAgaW5saW5lIEIzOjpUeXBlIHRvQjNUeXBlKFR5cGUgdHlwZSkKIH0KICN1bmRl
ZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUsIGlu
YykgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4u
LikgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7CiBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmlu
ZyhUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNzQsNyArMjAyLDcgQEAg
aW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoVHlwZSB0eXBlKQogfQogI3VuZGVmIENSRUFU
RV9DQVNFCiAKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgaW5jKSBjYXNl
IGlkOiByZXR1cm4gaW5jOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBp
bmMsIC4uLikgY2FzZSBpZDogcmV0dXJuIGluYzsKIGlubGluZSBpbnQgbGluZWFyaXplVHlwZShU
eXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xODUsNyArMjEzLDcgQEAgaW5s
aW5lIGludCBsaW5lYXJpemVUeXBlKFR5cGUgdHlwZSkKIH0KICN1bmRlZiBDUkVBVEVfQ0FTRQog
Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUsIGluYykgY2FzZSBpbmM6IHJl
dHVybiBuYW1lOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMsIC4u
LikgY2FzZSBpbmM6IHJldHVybiBuYW1lOwogaW5saW5lIFR5cGUgbGluZWFyaXplZFRvVHlwZShp
bnQgaSkKIHsKICAgICBzd2l0Y2ggKGkpIHsKQEAgLTIwNyw3ICsyMzUsNyBAQCBpbmxpbmUgVHlw
ZSBsaW5lYXJpemVkVG9UeXBlKGludCBpKQogICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JF
X09QKG1hY3JvKSBcXAogICAgIG1hY3JvKEV4dFRhYmxlLCAweEZDLCBPb3BzLCAwKQogCi0jZGVm
aW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkLCBiM29wLCBpbmMpIG5hbWUgPSBpZCwKKyNk
ZWZpbmUgQ1JFQVRFX0VOVU1fVkFMVUUobmFtZSwgaWQsIC4uLikgbmFtZSA9IGlkLAogCiBlbnVt
IE9wVHlwZSA6IHVpbnQ4X3QgewogICAgIEZPUl9FQUNIX1dBU01fT1AoQ1JFQVRFX0VOVU1fVkFM
VUUpCkBAIC0yNDYsNyArMjc0LDcgQEAgZW51bSBjbGFzcyBFeHRUYWJsZU9wVHlwZSA6IHVpbnQ4
X3QgewogaW5saW5lIGJvb2wgaXNDb250cm9sT3AoT3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAo
b3ApIHsKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5
cGU6Om5hbWU6CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBPcFR5cGU6Om5h
bWU6CiAgICAgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AoQ1JFQVRFX0NBU0UpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogI3VuZGVmIENSRUFURV9DQVNFCkBAIC0yNTksNyArMjg3LDcgQEAg
aW5saW5lIGJvb2wgaXNDb250cm9sT3AoT3BUeXBlIG9wKQogaW5saW5lIGJvb2wgaXNTaW1wbGUo
VW5hcnlPcFR5cGUgb3ApCiB7CiAgICAgc3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVfQ0FT
RShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIFVuYXJ5T3BUeXBlOjpuYW1lOgorI2RlZmluZSBD
UkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgVW5hcnlPcFR5cGU6Om5hbWU6CiAgICAgRk9SX0VB
Q0hfV0FTTV9TSU1QTEVfVU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB0cnVl
OwogI3VuZGVmIENSRUFURV9DQVNFCkBAIC0yNzIsNyArMzAwLDcgQEAgaW5saW5lIGJvb2wgaXNT
aW1wbGUoVW5hcnlPcFR5cGUgb3ApCiBpbmxpbmUgYm9vbCBpc1NpbXBsZShCaW5hcnlPcFR5cGUg
b3ApCiB7CiAgICAgc3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwg
YjNvcCwgaW5jKSBjYXNlIEJpbmFyeU9wVHlwZTo6bmFtZToKKyNkZWZpbmUgQ1JFQVRFX0NBU0Uo
bmFtZSwgLi4uKSBjYXNlIEJpbmFyeU9wVHlwZTo6bmFtZToKICAgICBGT1JfRUFDSF9XQVNNX1NJ
TVBMRV9CSU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB0cnVlOwogI3VuZGVm
IENSRUFURV9DQVNFCkBAIC0yOTQsNyArMzIyLDcgQEAgaW5saW5lIHVpbnQzMl90IG1lbW9yeUxv
ZzJBbGlnbm1lbnQoT3BUeXBlIG9wKQogICAgIHJldHVybiAwOwogfQogCi0jZGVmaW5lIENSRUFU
RV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUsIGluYykgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7Cisj
ZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7CiBp
bmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhPcFR5cGUgb3ApCiB7CiAgICAgc3dpdGNoIChv
cCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNt
VmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2Vu
ZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCA3ODZkMDk2YjY2ZTY4MmRkNjU3N2QyZGUyNjUwODJiNzIxMTU2YmNhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDE3MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0jIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSMgVGhpcyB0b29sIGhhcyBhIGNvdXBsZSBvZiBo
ZWxwZnVsIG1hY3JvcyB0byBwcm9jZXNzIFdhc20gZmlsZXMgZnJvbSB0aGUgd2FzbS5qc29uLgot
Ci1mcm9tIGdlbmVyYXRlV2FzbSBpbXBvcnQgKgotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgc3lz
Ci0KLXBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIDx3
YXNtLmpzb24+IDxXYXNtT3BzLmg+IikKLShvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9h
cmdzKHN5cy5hcmd2WzA6XSkKLWlmIGxlbihhcmdzKSAhPSAzOgotICAgIHBhcnNlci5lcnJvcihw
YXJzZXIudXNhZ2UpCi0KLXdhc20gPSBXYXNtKGFyZ3NbMF0sIGFyZ3NbMV0pCi1vcGNvZGVzID0g
d2FzbS5vcGNvZGVzCi13YXNtVmFsaWRhdGVJbmxpbmVzSEZpbGUgPSBvcGVuKGFyZ3NbMl0sICJ3
IikKLQotCi1kZWYgY3BwVHlwZShuYW1lKToKLSAgICByZXN1bHQgPSB7Ci0gICAgICAgICJib29s
IjogIkkzMiIsCi0gICAgICAgICJhZGRyIjogIkkzMiIsCi0gICAgICAgICJpMzIiOiAiSTMyIiwK
LSAgICAgICAgImk2NCI6ICJJNjQiLAotICAgICAgICAiZjMyIjogIkYzMiIsCi0gICAgICAgICJm
NjQiOiAiRjY0IiwKLSAgICB9LmdldChuYW1lLCBOb25lKQotICAgIGlmIHJlc3VsdCA9PSBOb25l
OgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIHR5cGUgbmFtZTogIiArIG5hbWUp
Ci0gICAgcmV0dXJuIHJlc3VsdAotCi0KLWRlZiB0b0NwcChuYW1lKToKLSAgICByZXR1cm4gd2Fz
bS50b0NwcChuYW1lKQotCi0KLWRlZiB1bmFyeU1hY3JvKG5hbWUpOgotICAgIG9wID0gb3Bjb2Rl
c1tuYW1lXQotICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYXV0byBWYWxpZGF0ZTo6YWRkT3A8
T3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZSAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQotICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDog
IiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7Ci0KLSAgICByZXN1bHQgPSAi
IiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAgcmV0dXJuIHsgfTsKLX0K
LSIiIgotCi0KLWRlZiBiaW5hcnlNYWNybyhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0K
LSAgICByZXR1cm4gIiIiCi10ZW1wbGF0ZTw+IGF1dG8gVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6
IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAo
VU5MSUtFTFkobGVmdCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIp
KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0
aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBsZWZ0IHZhbHVlIHR5cGUgbWlzbWF0Y2giKTsK
LQotICAgIGlmIChVTkxJS0VMWShyaWdodCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIi
XVsxXSkgKyAiIiIpKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5
cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiByaWdodCB2YWx1ZSB0eXBl
IG1pc21hdGNoIik7Ci0KLSAgICByZXN1bHQgPSAiIiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVsw
XSkgKyAiIiI7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLSIiIgotCi1kZWYgbG9hZE1hY3JvKG5hbWUp
OgotICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQotICAgIHJldHVybiAiIiIKLSAgICBjYXNlIExvYWRP
cFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiOiB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShw
b2ludGVyICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIikpCi0gICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0aW9u
IGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBwb2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKLQotICAg
ICAgICByZXN1bHQgPSAiIiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfSIiIgotCi0KLWRlZiBzdG9yZU1hY3JvKG5hbWUpOgotICAg
IG9wID0gb3Bjb2Rlc1tuYW1lXQotICAgIHJldHVybiAiIiIKLSAgICBjYXNlIFN0b3JlT3BUeXBl
OjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAgICAgICBpZiAoVU5MSUtFTFkocG9pbnRl
ciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQotICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWls
ZWQ6ICIiIiArIG5hbWUgKyAiIiIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7Ci0KLSAgICAgICAg
aWYgKFVOTElLRUxZKHZhbHVlICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKSAr
ICIiIikpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+
KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21hdGNo
Iik7Ci0KLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9IiIiCi0KLQotdW5hcnlTcGVjaWFsaXph
dGlvbnMgPSAiIi5qb2luKFtvcCBmb3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihpc1VuYXJ5
LCB1bmFyeU1hY3JvKV0pCi1iaW5hcnlTcGVjaWFsaXphdGlvbnMgPSAiIi5qb2luKFtvcCBmb3Ig
b3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihpc0JpbmFyeSwgYmluYXJ5TWFjcm8pXSkKLWxvYWRD
YXNlcyA9ICIiLmpvaW4oW29wIGZvciBvcCBpbiB3YXNtLm9wY29kZUl0ZXJhdG9yKGxhbWJkYSBv
cDogb3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJuIl0pID09IDEs
IGxvYWRNYWNybyldKQotc3RvcmVDYXNlcyA9ICIiLmpvaW4oW29wIGZvciBvcCBpbiB3YXNtLm9w
Y29kZUl0ZXJhdG9yKGxhbWJkYSBvcDogb3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxl
bihvcFsicmV0dXJuIl0pID09IDAsIHN0b3JlTWFjcm8pXSkKLQotY29udGVudHMgPSB3YXNtLmhl
YWRlciArICIiIgotLy8gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGlubGluZWQgYnkgV2Fz
bVZhbGlkYXRlLmNwcCBvbmx5ISBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGVsc2V3aGVyZS4K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSNpZiBBU1NFUlRfRElTQUJMRUQKLUlHTk9SRV9SRVRVUk5f
VFlQRV9XQVJOSU5HU19CRUdJTgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7Ci0KLSIiIiArIHVuYXJ5U3BlY2lhbGl6YXRpb25zICsgYmluYXJ5U3BlY2lhbGl6YXRp
b25zICsgIiIiCi0KLWF1dG8gVmFsaWRhdGU6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3QpIC0+IFJlc3Vs
dAotewotICAgIGlmIChVTkxJS0VMWSghaGFzTWVtb3J5KCkpKQotICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogbG9hZCBpbnN0
cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwotCi0gICAgc3dpdGNoIChvcCkgewotIiIiICsgbG9h
ZENhc2VzICsgIiIiCi0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1hdXRv
IFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoVU5M
SUtFTFkoIWhhc01lbW9yeSgpKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0Ojpl
cnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IHN0b3JlIGluc3RydWN0aW9uIHdpdGhvdXQg
bWVtb3J5Iik7Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0iIiIgKyBzdG9yZUNhc2VzICsgIiIiCi0g
ICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQotCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1JR05PUkVfUkVUVVJOX1RZUEVfV0FSTklO
R1NfRU5ECi0jZW5kaWYKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotIiIiCi0K
LXdhc21WYWxpZGF0ZUlubGluZXNIRmlsZS53cml0ZShjb250ZW50cykKLXdhc21WYWxpZGF0ZUlu
bGluZXNIRmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwCmluZGV4IDEwOTA4ODMxYmIyNmRkYTIzYTg2NDZkNzQxMGFmNjBjZjdh
YmIwNGIuLjZjMGI3Zjg2NGZhOGNlMjJlZGI3ZmY1MjZiOWJhYTdlYjE0MzM5MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC0yMjgs
NyArMjI4LDcgQEAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UKICAgICAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAg
ICAgICByZXNvbHZlKHZtLCBnbG9iYWxPYmplY3QsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUs
IGltcG9ydE9iamVjdCwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVLaW5kLCBj
cmVhdGlvbk1vZGUpOwogICAgICAgICB9KTsKLSAgICB9KSwgJldhc206OmNyZWF0ZUpTVG9XYXNt
V3JhcHBlciwgJldhc206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKTsKKyAgICB9KSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgY29uc3QgSWRlbnRpZmllciYg
bW9kdWxlS2V5LCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgUmVzb2x2
ZSByZXNvbHZlS2luZCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKQEAgLTMyOCwx
MiArMzI4LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5VmFsaWRhdGVGdW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGF1dG8gW2Jhc2UsIGJ5dGVTaXplXSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21D
b250ZXh0LCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CiAgICAg
Ly8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlm
IHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGJhc2UsIGJ5dGVTaXpl
KSkpOworICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9t
VmFsdWUodm0sIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgYXV0byB2YWxp
ZGF0aW9uUmVzdWx0ID0gV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMoJnZtLndhc21Db250ZXh0
LCBXVEZNb3ZlKHNvdXJjZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHZhbGlkYXRpb25SZXN1bHQuaGFzX3ZhbHVlKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1pbmdJbnRlcm5hbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwCmluZGV4IDYwMDI5ZWZlMGU4NjdhNjliODZkM2RjZTUyZDY0YjExMGM2
OWZmZTIuLjkwZjYyZGNlMzExNjc1ZTRlYjdlMGNiMzJmMTFhYzU2MGMxOTc2Y2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoSlNH
bG9iYWxPYmplYwogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmNyZWF0ZVByaXZhdGVNb2R1bGVLZXkoKSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGlu
c3RhbmNlU3RydWN0dXJlLCBSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSwgV2Fz
bTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAKLSAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0
LCBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2Ut
Pm1lbW9yeU1vZGUoKSwgJldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Om9wZXJh
dGlvbldhc21Ub0pTRXhjZXB0aW9uKSwgaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGU6
OkZyb21KUyk7CisgICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCwgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlU3luYygmdm0ud2FzbUNvbnRleHQsIGluc3RhbmNl
LT5tZW1vcnlNb2RlKCkpLCBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZTo6RnJvbUpT
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoaW5zdGFuY2UpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384874</attachid>
            <date>2019-12-04 19:57:32 -0800</date>
            <delta_ts>2019-12-04 20:41:59 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204474-20191204195731.patch</filename>
            <type>text/plain</type>
            <size>224324</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MjUwZmZkMDkwYjJjNWI2MmQxZmViYTk3OWZlNzIwODVjNzM4OTFmLi42MWE5OTM0NmExNjUwMWZi
OGNhOWU4YmFmMmEzZDZlODczMWU2ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMzUgQEAKKzIwMTktMTEtMjIgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgW1dlYkFzc2VtYmx5XSBWYWxpZGF0ZSBhbmQgZ2VuZXJhdGUgYnl0ZWNv
ZGUgaW4gb25lIHBhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNDQ3NAorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAg
ICAgIEN1cnJlbnRseSwgd2UgdHJhdmVyc2UgdGhlIFdlYkFzc2VtYmx5IGNvZGUgdHdpY2U6Cisg
ICAgICAgIC0gYSBmaXJzdCBzZXJpYWwgcGFzcyB0aGF0IHZhbGlkYXRlcyBhbGwgZnVuY3Rpb25z
CisgICAgICAgIC0gYSBzZWNvbmQgY29uY3VycmVudCBwYXNzIHRoYXQgY29tcGlsZXMgYWxsIGZ1
bmN0aW9ucy4KKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgbW92ZSB0aGUgdmFsaWRhdGlvbiBp
bnRvIHRoZSBwYXJzZXIgYW5kIHVwZGF0ZSB0aGUgTExJbnRQbGFuIHNvIHRoYXQgd2Ugbm8gbG9u
Z2VyIGhhdmUKKyAgICAgICAgdGhlIGZpcnN0IHBhc3MuIEluc3RlYWQsIHdlIG5vdyB2YWxpZGF0
ZSBjb25jdXJyZW50bHkgYXQgdGhlIHNhbWUgdGltZSB3ZSBnZW5lcmF0ZSBieXRlY29kZS4KKwor
ICAgICAgICBBcyBhIHJlc3VsdCwgd2hlbiB3ZSBjYWxsIFdlYkFzc2VtYmx5LnZhbGlkYXRlLCB3
ZSdsbCBzdGlsbCBnZW5lcmF0ZSBieXRlY29kZSBmb3IgdGhlIG1vZHVsZSwgYnV0IGl0IHdpbGwK
KyAgICAgICAgYmUgdGhyb3duIGF3YXkuIElmIHRoZSBtb2R1bGUgaXMgY29uc3RydWN0ZWQgd2l0
aCBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlLCB3ZSdsbCBhbHNvIGVhZ2VybHkgZ2VuZXJhdGUKKyAg
ICAgICAgYnl0ZWNvZGUsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGJ5dGVjb2RlIGlzIGtlcHQgYW5k
IHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbnRpYXRpb25zIG9mIHRoaXMgbW9kdWxlLgorCisgICAg
ICAgIFRoaXMgaXMgYSAxLjV4IHNwZWVkdXAgd2hlbiBjb21waWxpbmcgdGhlIFplbkdhcmRlbiBk
ZW1vLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiB3YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9y
OjpDb250cm9sRGF0YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGE6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6Q29udHJvbERhdGE6OmlzVG9wTGV2ZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5jaFRhcmdldEFyaXR5IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJn
ZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtcHR5
RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0Q2Fs
bFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6dG1wc0Zv
clNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjplbWl0UGF0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRSZWZJc051bGwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHZXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVTZXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJVcENoZWNrKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QWlySVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6dW5pZnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpk
dW1wRXhwcmVzc2lvblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnVuY1VGNjQ+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0
VHJ1bmNVRjMyPik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmlzSWYpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aXNUb3BMZXZlbCk6CisgICAgICAgIChKU0M6
Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpzaWduYXR1cmUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aGFzTm9uVm9pZHJl
c3VsdCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xE
YXRhOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldh
c206OkIzSVJHZW5lcmF0b3I6OmFkZFJlZklzTnVsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkVGFibGVTZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRUYWJsZUdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRUYWJs
ZUZpbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbWl0TG9vcFRpZXJV
cENoZWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTG9vcCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpkdW1wRXhwcmVzc2lvblN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZHVtcCk6CisgICAgICAgIChKU0M6
Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5oOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCQlFQbGFuOjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6d29yayk6
CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206OkJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QkJRUGxhbjo6ZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSk6CisgICAgICAgICogd2FzbS9X
YXNtQkJRUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OkNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICogd2FzbS9XYXNtRW50cnlQbGFuLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RW50cnlQbGFuOjpFbnRyeVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNt
OjpFbnRyeVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpFbnRyeVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpFbnRyeVBsYW46OmNv
bXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpFbnRyeVBsYW46OmNvbXBsZXRl
KToKKyAgICAgICAgKiB3YXNtL1dhc21FbnRyeVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpzcGxpdFN0YWNrKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OlR5cGVkRXhwcmVzc2lvbjo6VHlwZWRFeHBy
ZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OlR5cGVkRXhwcmVz
c2lvbjo6dHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpU
eXBlZEV4cHJlc3Npb246OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25QYXJzZXI6OlR5cGVkRXhwcmVzc2lvbjo6b3BlcmF0b3IgRXhwcmVzc2lvblR5cGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6VHlwZWRFeHByZXNzaW9uOjpv
cGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OmNv
bnRyb2xTdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjp2YWxpZGF0
aW9uRmFpbCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpiaW5hcnlDYXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnVuYXJ5Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnN0b3JlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmNo
ZWNrQnJhbmNoVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnVuaWZ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbik6CisgICAgICAgICogd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6Q29udHJvbFR5cGU6OnRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OkNvbnRyb2xUeXBlOjpsb29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OkNvbnRyb2xUeXBlOjppc0lmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OkNvbnRyb2xUeXBlOjppc1RvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpzdGFja1NpemUgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OnNpZ25hdHVyZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6YnJhbmNoVGFy
Z2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29u
dHJvbFR5cGU6OmJyYW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpM
TEludEdlbmVyYXRvcjo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmR1bXApOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6
Z2V0RHJvcEtlZXBDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpt
YXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fscyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjpzcGxpdFN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21w
aWxlQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6TExJbnRH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9y
bWF0aW9uRm9yQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFk
ZExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNt
OjpMTEludEdlbmVyYXRvcjo6YWRkSWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21MTEludFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTElu
dFBsYW46OkxMSW50UGxhbik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50UGxhbjo6Y29tcGls
ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpkaWRDb21wbGV0ZUNv
bXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjp3b3JrKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKToKKyAgICAg
ICAgKiB3YXNtL1dhc21MTEludFBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6Ok1vZHVsZSk6CisgICAgICAgIChKU0M6Oldh
c206Om1ha2VWYWxpZGF0aW9uUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFrZVZhbGlk
YXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5j
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6Y29tcGlsZVN5bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6
OmNvbXBpbGVBc3luYyk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlBsYW4pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZG9udEZpbmFsaXpl
KToKKyAgICAgICAgKiB3YXNtL1dhc21TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTElu
dDo6c2xvd19wYXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21U
aHVua3MuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAqIHdhc20vV2FzbVRodW5rcy5oOgorICAgICAgICAqIHdh
c20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNvbnRy
b2xEYXRhOjppc0lmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNvbnRyb2xEYXRh
Ojppc1RvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OkNvbnRyb2xEYXRh
OjpibG9ja1R5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Q29udHJv
bERhdGE6OnNpZ25hdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpD
b250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpWYWxpZGF0ZTo6Q29udHJvbERhdGE6OmJyYW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZW1wdHlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRh
dGU6OlZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRUYWJsZUdldCk6CisgICAgICAg
IChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRUYWJsZVNldCk6CisgICAgICAgIChKU0M6Oldhc206
OlZhbGlkYXRlOjphZGRUYWJsZVNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6
YWRkVGFibGVHcm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZFRhYmxlRmls
bCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRSZWZJc051bGwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkUmVmRnVuYyk6CisgICAgICAgIChKU0M6Oldhc206
OlZhbGlkYXRlOjphZGRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpnZXRM
b2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6Oldhc206OlZhbGlkYXRlOjpnZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpW
YWxpZGF0ZTo6c2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEJs
b2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZExvb3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkU2VsZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFs
aWRhdGU6OmFkZElmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmFkZEVsc2UpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VmFsaWRhdGU6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjph
ZGRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkR3Jvd01lbW9yeSk6
CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRDdXJyZW50TWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VmFsaWRhdGU6OmVuZEJsb2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxp
ZGF0ZTo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRlOjphZGRDYWxsSW5k
aXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6bG9hZCk6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjpzdG9yZSk6CisgICAgICAgIChKU0M6Oldhc206OlZhbGlkYXRl
OjphZGRPcCk6CisgICAgICAgIChKU0M6Oldhc206OmR1bXBFeHByZXNzaW9uU3RhY2spOgorICAg
ICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6ZHVtcCk6CisgICAgICAgIChKU0M6Oldhc206OnZh
bGlkYXRlRnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vV2FzbVdvcmtsaXN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V29ya2xpc3Q6OmVucXVldWUpOgorICAgICAgICAqIHdhc20vZ2VuZXJh
dGVXYXNtT3BzSGVhZGVyLnB5OgorICAgICAgICAoY3BwVHlwZSk6CisgICAgICAgIChjcHBNYWNy
byk6CisgICAgICAgIChvcGNvZGVNYWNyb2l6ZXIpOgorICAgICAgICAob3Bjb2RlV2l0aFR5cGVz
TWFjcm9pemVyKToKKyAgICAgICAgKG9wY29kZVdpdGhUeXBlc01hY3JvaXplci5tb2RpZmllcik6
CisgICAgICAgIChtZW1vcnlMb2FkTWFjcm9pemVyKToKKyAgICAgICAgKG1lbW9yeUxvYWRNYWNy
b2l6ZXIubW9kaWZpZXIpOgorICAgICAgICAobWVtb3J5U3RvcmVNYWNyb2l6ZXIpOgorICAgICAg
ICAobWVtb3J5U3RvcmVNYWNyb2l6ZXIubW9kaWZpZXIpOgorICAgICAgICAqIHdhc20vZ2VuZXJh
dGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5OiBSZW1vdmVkLgorICAgICAgICAqIHdhc20v
anMvSlNXZWJBc3NlbWJseS5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAg
ICAgKEpTQzo6d2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMpOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKwogMjAxOS0xMi0wNCAgWXVzdWtlIFN1enVraSAgPHlz
dXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTI0
MTYsIHZpbWVvIGRvZXMgbm90IHdvcmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCA1YzkwMzJlZGVlMjQ2ZjFjMTUxMmI5NDkyMWU0MDQyNTRmNjY2YTYzLi5jOWE4MmE3ODU0
ZmE3Yjk1MTM0NGM0ZmYxNWY0YWE1MGVlYzhhNTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC0zNjYsNyArMzY2LDYgQEAgbWFjcm8oR0VORVJBVEVfUFlUSE9OIF9nZW5l
cmF0b3IgX2FkZGl0aW9uYWxfZGVwcyBfaW5wdXQgX291dHB1dCkKICAgICBXRUJLSVRfQUREX1NP
VVJDRV9ERVBFTkRFTkNJRVMoJHtfaW5wdXR9ICR7X291dHB1dH0pCiBlbmRtYWNybygpCiBHRU5F
UkFURV9QWVRIT04oJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNt
T3BzSGVhZGVyLnB5ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2Fz
bS5weSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XYXNtT3BzLmgpCi1HRU5FUkFURV9QWVRIT04o
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxp
bmVzSGVhZGVyLnB5ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2Fz
bS5weSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XYXNtVmFsaWRhdGVJbmxpbmVzLmgpCiBHRU5F
UkFURV9QWVRIT04oJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNt
QjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9
L3dhc20vZ2VuZXJhdGVXYXNtLnB5ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL3dh
c20uanNvbiAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L1dhc21CM0lSR2Vu
ZXJhdG9ySW5saW5lcy5oKQogCiAjIExVVCBnZW5lcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZTIzYzcx
NGExNzBhZDQxNWRlZWM3MjFiZDA0N2UzMGQzMGQyM2IwYy4uZjhjMWI0YWU1NTZiNTM0YzJhYjEw
MWFjMzkwYmE3MTFiNDVjYmFlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE3Myw3ICsxNzMsNiBAQCAkKFBS
T0pFQ1RfRElSKS91Y2QvbGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5LnR4dAogJChQUk9KRUNUX0RJ
Uikvd2FzbS9nZW5lcmF0ZVdhc20ucHkKICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJhdGVXYXNt
QjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkKICQoUFJPSkVDVF9ESVIpL3dhc20vZ2VuZXJh
dGVXYXNtT3BzSGVhZGVyLnB5Ci0kKFBST0pFQ1RfRElSKS93YXNtL2dlbmVyYXRlV2FzbVZhbGlk
YXRlSW5saW5lc0hlYWRlci5weQogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0
cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJv
clByb3RvdHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCBlM2MxMzM4MjU5OTBkOGFjNmVhMWU2MzJl
YWU3NjEyYzNiMjk0YzhkLi4zZDJlN2RkYzYxYTVhNWFjOTBkYTExNTQ2ZWM4YWViYzk0OTVhNmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CkBAIC02MCw3ICs2MCw2IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9Vbmljb2RlUGF0dGVyblRhYmxlcy5oCiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2FzbUIzSVJH
ZW5lcmF0b3JJbmxpbmVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9K
YXZhU2NyaXB0Q29yZS9XYXNtTExJbnRHZW5lcmF0b3JJbmxpbmVzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XYXNtT3BzLmgKLSQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9XYXNtVmFsaWRhdGVJ
bmxpbmVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZS9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmx1dC5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9KYXZhU2NyaXB0Q29yZS9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmx1dC5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDQ4NjAyNmEyNTk2
NzhlMDMyZDMwZmE4ZjY2OTI2Y2M2ZTZiMzAzNWYuLjM4NjZlMmJjYjM3OGNmYmUyZWVjMjI1ZDlm
NDFmMDViZGVhNGJkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCkBAIC02MCw3ICs2MCw2IEBAIGFsbCA6IFwKICAgICBVbmljb2RlUGF0dGVyblRhYmxlcy5o
IFwKICAgICB5YXJyL1lhcnJDYW5vbmljYWxpemVVbmljb2RlLmNwcCBcCiAgICAgV2FzbU9wcy5o
IFwKLSAgICBXYXNtVmFsaWRhdGVJbmxpbmVzLmggXAogICAgIFdhc21CM0lSR2VuZXJhdG9ySW5s
aW5lcy5oIFwKICMKIApAQCAtMzU0LDkgKzM1Myw2IEBAIEludGxDYW5vbmljYWxpemVMYW5ndWFn
ZS5oOiAkKEphdmFTY3JpcHRDb3JlKS9TY3JpcHRzL2dlbmVyYXRlSW50bENhbm9uaWNhbGl6ZUxh
CiBXYXNtT3BzLmg6ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVy
LnB5ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2VuZXJhdGVXYXNtLnB5ICQoSmF2YVNjcmlwdENv
cmUpL3dhc20vd2FzbS5qc29uCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3dhc20vZ2Vu
ZXJhdGVXYXNtT3BzSGVhZGVyLnB5ICQoSmF2YVNjcmlwdENvcmUpL3dhc20vd2FzbS5qc29uIC4v
V2FzbU9wcy5oCiAKLVdhc21WYWxpZGF0ZUlubGluZXMuaDogJChKYXZhU2NyaXB0Q29yZSkvd2Fz
bS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkgJChKYXZhU2NyaXB0Q29yZSkv
d2FzbS9nZW5lcmF0ZVdhc20ucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS93YXNtLmpzb24KLQkk
KFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGlu
ZXNIZWFkZXIucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS93YXNtLmpzb24gLi9XYXNtVmFsaWRh
dGVJbmxpbmVzLmgKLQogV2FzbUIzSVJHZW5lcmF0b3JJbmxpbmVzLmg6ICQoSmF2YVNjcmlwdENv
cmUpL3dhc20vZ2VuZXJhdGVXYXNtQjNJUkdlbmVyYXRvcklubGluZXNIZWFkZXIucHkgJChKYXZh
U2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc20ucHkgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS93
YXNtLmpzb24KIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvd2FzbS9nZW5lcmF0ZVdhc21C
M0lSR2VuZXJhdG9ySW5saW5lc0hlYWRlci5weSAkKEphdmFTY3JpcHRDb3JlKS93YXNtL3dhc20u
anNvbiAuL1dhc21CM0lSR2VuZXJhdG9ySW5saW5lcy5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGU0NTMyNjAxMzRhY2Uz
ZTUyOWVlMDlhMjBmNjQ2YjEwNTQwNmJhYjguLjI1ODgxMmFiMzBkOWIxY2QxNjQ4NDA1N2VmMTQ5
Yzc4MDdjOWVjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcApAQCAtMTI5LDEyICsxMjksMTMgQEAgcHJpdmF0ZToKICAgICBUeXBl
IG1fdHlwZTsKIH07CiAKLXVzaW5nIFR5cGVkVG1wcyA9IFZlY3RvcjxUeXBlZFRtcCwgMT47Ci0K
IGNsYXNzIEFpcklSR2VuZXJhdG9yIHsKIHB1YmxpYzoKKyAgICB1c2luZyBFeHByZXNzaW9uVHlw
ZSA9IFR5cGVkVG1wOworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBWZWN0b3I8RXhwcmVzc2lvblR5
cGUsIDg+OworCiAgICAgc3RydWN0IENvbnRyb2xEYXRhIHsKLSAgICAgICAgQ29udHJvbERhdGEo
QjM6Ok9yaWdpbiBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHJlc3VsdCwgVHlwZWRUbXBzIHJlc3Vs
dFRtcHMsIEJsb2NrVHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxv
Y2sqIHNwZWNpYWwgPSBudWxscHRyKQorICAgICAgICBDb250cm9sRGF0YShCMzo6T3JpZ2luIG9y
aWdpbiwgQmxvY2tTaWduYXR1cmUgcmVzdWx0LCBSZXN1bHRMaXN0IHJlc3VsdFRtcHMsIEJsb2Nr
VHlwZSB0eXBlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24sIEJhc2ljQmxvY2sqIHNwZWNpYWwg
PSBudWxscHRyKQogICAgICAgICAgICAgOiBjb250cm9sQmxvY2tUeXBlKHR5cGUpCiAgICAgICAg
ICAgICAsIGNvbnRpbnVhdGlvbihjb250aW51YXRpb24pCiAgICAgICAgICAgICAsIHNwZWNpYWwo
c3BlY2lhbCkKQEAgLTE0OCw2ICsxNDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAg
fQogCisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbERhdGEmIGNvbnRyb2wp
IHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJZjsgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBjb250cm9sKSB7IHJl
dHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2ZWw7IH0KKwogICAg
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgewogICAgICAg
ICAgICAgc3dpdGNoIChibG9ja1R5cGUoKSkgewpAQCAtMTk0LDMxICsxOTgsNDYgQEAgcHVibGlj
OgogICAgICAgICAgICAgc3BlY2lhbCA9IG51bGxwdHI7CiAgICAgICAgIH0KIAorICAgICAgICBT
aWduYXR1cmVBcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJldHVyblR5cGUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXR1cm5UeXBlLT5yZXR1cm5Db3VudCgpOworICAgICAgICB9CisKKyAgICAgICAgVHlw
ZSBicmFuY2hUYXJnZXRUeXBlKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpIDwgYnJhbmNoVGFyZ2V0QXJpdHkoKSk7CisgICAgICAgICAgICBpZiAoYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR1
cm5UeXBlLT5hcmd1bWVudChpKTsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5yZXR1
cm5UeXBlKGkpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgQWlySVJHZW5lcmF0b3I7CiAgICAgICAgIEJsb2NrVHlwZSBjb250cm9sQmxvY2tUeXBlOwog
ICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb247CiAgICAgICAgIEJhc2ljQmxvY2sqIHNw
ZWNpYWw7Ci0gICAgICAgIFR5cGVkVG1wcyByZXN1bHRzOworICAgICAgICBSZXN1bHRMaXN0IHJl
c3VsdHM7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIHJldHVyblR5cGU7CiAgICAgfTsKIAotICAg
IHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVHlwZWRUbXA7CiAgICAgdXNpbmcgQ29udHJvbFR5cGUg
PSBDb250cm9sRGF0YTsKLSAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNz
aW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKLSAgICB1c2lu
ZyBSZXN1bHRMaXN0ID0gVHlwZWRUbXBzOwotICAgIHVzaW5nIENvbnRyb2xFbnRyeSA9IEZ1bmN0
aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OwogCi0gICAgc3RhdGljIEV4
cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsgcmV0dXJuIHsgfTsgfTsKLSAgICBTdGFj
ayBjcmVhdGVTdGFjaygpIHsgcmV0dXJuIFN0YWNrKCk7IH0KLSAgICBib29sIGlzQ29udHJvbFR5
cGVJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgdXNpbmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rp
b25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sRW50cnk7CisgICAgdXNpbmcgQ29udHJv
bFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+OjpDb250cm9sU3RhY2s7Cisg
ICAgdXNpbmcgU3RhY2sgPSBGdW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OlN0YWNrOwor
ICAgIHVzaW5nIFR5cGVkRXhwcmVzc2lvbiA9IEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9y
Pjo6VHlwZWRFeHByZXNzaW9uOwogCiAgICAgdXNpbmcgRXJyb3JUeXBlID0gU3RyaW5nOwogICAg
IHVzaW5nIFVuZXhwZWN0ZWRSZXN1bHQgPSBVbmV4cGVjdGVkPEVycm9yVHlwZT47CiAgICAgdXNp
bmcgUmVzdWx0ID0gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBF
cnJvclR5cGU+OwogICAgIHVzaW5nIFBhcnRpYWxSZXN1bHQgPSBFeHBlY3RlZDx2b2lkLCBFcnJv
clR5cGU+OwogCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxSZXN1bHRMaXN0LCBG
dW5jdGlvblBhcnNlcjxBaXJJUkdlbmVyYXRvcj46OlJlc3VsdExpc3Q+KTsKKworICAgIHN0YXRp
YyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiB7IH07IH07CisKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3Rl
ZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAg
ewpAQCAtMjMxLDcgKzI1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9f
VkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBBaXJJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5h
bEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwg
dW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24s
IGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAg
LTI0MCwxNSArMjU5LDE1IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBhZGRCb3R0b20o
QmFzaWNCbG9jayosIFR5cGUpOwogCiAgICAgLy8gUmVmZXJlbmNlcwotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUs
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkUmVmRnVu
Yyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKICAgICAvLyBUYWJs
ZXMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdldCh1bnNp
Z25lZCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwg
RXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlR2V0KHVuc2lnbmVkLCBFeHByZXNz
aW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBl
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkVGFibGVTaXplKHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdyb3codW5z
aWduZWQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVsdGEsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFRhYmxlRmlsbCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIG9mZnNldCwgRXhwcmVzc2lv
blR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBjb3VudCk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBm
aWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVGaWxsKHVuc2lnbmVkLCBF
eHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBl
IGNvdW50KTsKIAogICAgIC8vIExvY2FscwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
QEAgLTI3OSw3ICsyOTgsNyBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkRWxzZShDb250cm9sRGF0YSYsIGNvbnN0IFN0YWNrJik7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERh
dGEmKTsKIAotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihj
b25zdCBDb250cm9sRGF0YSYsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJldHVybihjb25zdCBDb250
cm9sRGF0YSYsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Npb25UeXBl
IGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlcyk7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkU3dpdGNoKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwg
Y29uc3QgVmVjdG9yPENvbnRyb2xEYXRhKj4mIHRhcmdldHMsIENvbnRyb2xEYXRhJiBkZWZhdWx0
VGFyZ2V0cywgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgU3RhY2smIGV4cHJl
c3Npb25TdGFjayk7CkBAIC0yODgsMjkgKzMwNywyMSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0
IFN0YWNrJikgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZSwgMT4mIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUm
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+
JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
KHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29u
c3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYg
cmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFj
aGFibGUoKTsKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1p
dENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvblR5cGUsIDE+JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBh
cmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0cmFBcmdzID0geyB9KTsKKyAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJh
c2ljQmxvY2sqLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBj
b25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+JiYgZXh0
cmFBcmdzID0geyB9KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFp
cjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihC
Mzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEZsb2F0aW5nUG9p
bnRBYnMoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBhZGRGbG9hdGluZ1BvaW50QmluT3AoVHlw
ZSwgQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJo
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAKLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9y
PENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFj
ayk7CisgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0IFN0YWNrKiBleHBy
ZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPEFpcklSR2Vu
ZXJhdG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogICAgIHZvaWQgZGlkRmlu
aXNoUGFyc2luZ0xvY2FscygpIHsgfQogICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7
IH0KIAotICAgIHN0YXRpYyBWZWN0b3I8VG1wPiB0b1RtcFZlY3Rvcihjb25zdCBWZWN0b3I8VHlw
ZWRUbXA+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBWZWN0b3I8VG1wPiByZXN1bHQ7Ci0gICAg
ICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IHZlY3RvcikKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoaXRlbS50bXAoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAg
Y29uc3QgQmFnPEIzOjpQYXRjaHBvaW50VmFsdWUqPiYgcGF0Y2hwb2ludHMoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fcGF0Y2hwb2ludHM7CkBAIC00MDEsOSArNDEyLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIFR5cGVkVG1wcyB0bXBzRm9yU2lnbmF0dXJl
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKKyAgICBSZXN1bHRMaXN0IHRtcHNGb3JTaWduYXR1
cmUoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKQogICAgIHsKLSAgICAgICAgVHlwZWRUbXBzIHJl
c3VsdChzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOworICAgICAgICBSZXN1bHRMaXN0IHJlc3Vs
dChzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgICAgICByZXN1bHRb
aV0gPSB0bXBGb3JUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CkBAIC00MjYsMTYgKzQzNywxNiBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSAuLi5BcmdzPgogICAgIHZvaWQgZW1pdFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmFz
aWNCbG9jaywgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2gsIFRtcCByZXN1bHQsIEFyZ3MuLi4g
dGhlQXJncykKICAgICB7Ci0gICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ssIHBhdGNo
LCBWZWN0b3I8VG1wLCAxPiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIHNpemVv
Zi4uLihBcmdzKT46OmZyb20odGhlQXJncy4uLikpOworICAgICAgICBlbWl0UGF0Y2hwb2ludChi
YXNpY0Jsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgOD4geyByZXN1bHQgfSwgVmVjdG9yPENvbnN0
cmFpbmVkVG1wLCBzaXplb2YuLi4oQXJncyk+Ojpmcm9tKHRoZUFyZ3MuLi4pKTsKICAgICB9CiAK
ICAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIzOjpQYXRj
aHBvaW50VmFsdWUqIHBhdGNoLCBUbXAgcmVzdWx0KQogICAgIHsKLSAgICAgICAgZW1pdFBhdGNo
cG9pbnQoYmFzaWNCbG9jaywgcGF0Y2gsIFZlY3RvcjxUbXAsIDE+IHsgcmVzdWx0IH0sIFZlY3Rv
cjxDb25zdHJhaW5lZFRtcD4oKSk7CisgICAgICAgIGVtaXRQYXRjaHBvaW50KGJhc2ljQmxvY2ss
IHBhdGNoLCBWZWN0b3I8VG1wLCA4PiB7IHJlc3VsdCB9LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
KCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUbXBUeXBlLCBzaXpl
X3QgaW5saW5lU2l6ZT4KLSAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2lj
QmxvY2ssIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8UmVzdWx0VG1w
VHlwZSwgMT4mICByZXN1bHRzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYg
YXJncykKKyAgICB2b2lkIGVtaXRQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNoLCBjb25zdCBWZWN0b3I8UmVzdWx0VG1wVHlwZSwgOD4m
ICByZXN1bHRzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXAsIGlubGluZVNpemU+JiYgYXJncykKICAg
ICB7CiAgICAgICAgIGlmICghbV9wYXRjaHBvaW50U3BlY2lhbCkKICAgICAgICAgICAgIG1fcGF0
Y2hwb2ludFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxCMzo6UGF0Y2hwb2ludFNwZWNpYWwqPihtX2Nv
ZGUuYWRkU3BlY2lhbChtYWtlVW5pcXVlPEIzOjpQYXRjaHBvaW50U3BlY2lhbD4oKSkpOwpAQCAt
NjMzLDcgKzY0NCw3IEBAIHByaXZhdGU6CiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdExvYWRPcChM
b2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQpOwogICAg
IHZvaWQgZW1pdFN0b3JlT3AoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4
cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwogCi0gICAgdm9pZCB1bmlmeShj
b25zdCBFeHByZXNzaW9uVHlwZSYgZHN0LCBjb25zdCBFeHByZXNzaW9uVHlwZSYgc291cmNlKTsK
KyAgICB2b2lkIHVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIGRzdCwgY29uc3QgRXhwcmVzc2lv
blR5cGUgc291cmNlKTsKICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IFN0YWNr
JiByZXN1bHRTdGFjaywgY29uc3QgUmVzdWx0TGlzdCYgc3RhY2spOwogCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEludFR5cGU+CkBAIC03NDMsNyArNzU0LDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRv
cjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ssIFR5cGVkVG1w
IGluc3QKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3Rh
bmNlKTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rp
b24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRp
b24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorQWlySVJHZW5lcmF0b3I6OkFpcklSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAg
ICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQpAQCAtNzcxLDkgKzc4Miw2IEBAIEFp
cklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgQjM6OlByb2NlZHVyZSYgcHJvCiAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX21lbW9y
eVNpemVHUFIpOwogICAgIH0KIAotICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCi0gICAgICAg
IFRodW5rczo6c2luZ2xldG9uKCkuc2V0VGhyb3dXYXNtRXhjZXB0aW9uKHRocm93V2FzbUV4Y2Vw
dGlvbik7Ci0KICAgICBpZiAoaW5mby5tZW1vcnkpIHsKICAgICAgICAgc3dpdGNoIChtX21vZGUp
IHsKICAgICAgICAgY2FzZSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzoKQEAgLTEwNDUsNyAr
MTA1Myw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYgdmFsdWUsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVCh2YWx1ZS50bXAoKSk7CiAgICAg
cmVzdWx0ID0gdG1wRm9yVHlwZShUeXBlOjpJMzIpOwpAQCAtMTA2Niw3ICsxMDc0LDcgQEAgYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGkKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25U
eXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogICAgIEFTU0VSVChpbmRleC50bXAoKSk7CkBAIC0xMDgz
LDcgKzEwOTEsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0
YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cAogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVlKSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgQVNTRVJUKGluZGV4LnRt
cCgpKTsKQEAgLTExMTIsNyArMTEyMCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxl
U2l6ZSh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgZGVs
dGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlw
ZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChmaWxsLnRtcCgpKTsKICAgICBBU1NFUlQoaXNT
dWJ0eXBlKGZpbGwudHlwZSgpLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkp
KTsKQEAgLTExMjUsNyArMTEzMyw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jv
dyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVk
IHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxs
LCBFeHByZXNzaW9uVHlwZSYgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSBv
ZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBlIGNvdW50KSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKGZpbGwudG1wKCkpOwogICAgIEFTU0VSVChpc1N1YnR5
cGUoZmlsbC50eXBlKCksIG1faW5mby50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSkpOwpA
QCAtMTc5MSw5ICsxNzk5LDkgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6ZW1pdExvb3BUaWVyVXBD
aGVjayh1aW50MzJfdCBsb29wSW5kZXgpCiAgICAgZm9yIChhdXRvJiBsb2NhbCA6IG1fbG9jYWxz
KQogICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKENvbnN0cmFpbmVkVG1wKGxvY2FsLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGNvbnRyb2xJbmRleCA9IDA7IGNv
bnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3RhY2soKS5zaXplKCk7ICsrY29udHJvbElu
ZGV4KSB7Ci0gICAgICAgIEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2sgPSBtX3BhcnNl
ci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjazsK
LSAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGV4cHJlc3Npb25TdGFjaykKLSAgICAgICAgICAg
IHBhdGNoQXJncy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodmFsdWUsIEIzOjpWYWx1ZVJlcDo6Q29s
ZEFueSkpOworICAgICAgICBTdGFjayYgZXhwcmVzc2lvblN0YWNrID0gbV9wYXJzZXItPmNvbnRy
b2xTdGFjaygpW2NvbnRyb2xJbmRleF0uZW5jbG9zZWRFeHByZXNzaW9uU3RhY2s7CisgICAgICAg
IGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQorICAgICAgICAg
ICAgcGF0Y2hBcmdzLmFwcGVuZChDb25zdHJhaW5lZFRtcCh2YWx1ZS52YWx1ZSgpLCBCMzo6VmFs
dWVSZXA6OkNvbGRBbnkpKTsKICAgICB9CiAKICAgICBUaWVyVXBDb3VudDo6VHJpZ2dlclJlYXNv
biogZm9yY2VFbnRyeVRyaWdnZXIgPSAmKG1fdGllclVwLT5vc3JFbnRyeVRyaWdnZXJzKCkubGFz
dCgpKTsKQEAgLTE4MjIsNyArMTgzMCw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OmVtaXRMb29w
VGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4KQogICAgICAgICB9KTsKICAgICB9KTsKIAot
ICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaCwgVmVjdG9yPFRtcCwgMT4o
KSwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKKyAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9j
aywgcGF0Y2gsIFJlc3VsdExpc3QgeyB9LCBXVEZNb3ZlKHBhdGNoQXJncykpOwogfQogCiBBaXJJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGEgQWlySVJHZW5lcmF0b3I6OmFkZFRvcExldmVsKEJsb2Nr
U2lnbmF0dXJlIHNpZ25hdHVyZSkKQEAgLTE4MzUsOCArMTg0MywxMiBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDbwogICAgIEJhc2ljQmxvY2sqIGJvZHkgPSBtX2NvZGUuYWRkQmxvY2soKTsKICAg
ICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX2NvZGUuYWRkQmxvY2soKTsKIAotICAgIG5l
d1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKLSAgICBibG9j
ayA9IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIG5ld1N0YWNrLCBCbG9ja1R5cGU6
Okxvb3AsIGNvbnRpbnVhdGlvbiwgYm9keSk7CisgICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVu
Y2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CisgICAgUmVzdWx0TGlzdCByZXN1bHRzOworICAgIHJl
c3VsdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXdTdGFjay5zaXplKCkpOworICAgIGZvciAo
YXV0byBpdGVtIDogbmV3U3RhY2spCisgICAgICAgIHJlc3VsdHMudW5jaGVja2VkQXBwZW5kKGl0
ZW0pOworICAgIGJsb2NrID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVyZSwgV1RGTW92
ZShyZXN1bHRzKSwgQmxvY2tUeXBlOjpMb29wLCBjb250aW51YXRpb24sIGJvZHkpOwogCiAgICAg
YXBwZW5kKEp1bXApOwogICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGJvZHkpOwpA
QCAtMTg0OSw3ICsxODYxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ28KIAogYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5j
bG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiBuZXdCbG9jaywgU3RhY2smIG5ld1N0YWNrKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5j
bG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywg
bmV3U3RhY2spOwogICAgIG5ld0Jsb2NrID0gQ29udHJvbERhdGEob3JpZ2luKCksIHNpZ25hdHVy
ZSwgdG1wc0ZvclNpZ25hdHVyZShzaWduYXR1cmUpLCBCbG9ja1R5cGU6OkJsb2NrLCBtX2NvZGUu
YWRkQmxvY2soKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE4NjUsNyArMTg3Nyw3IEBAIGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tT
aWduYXR1cmUgc2lnbmF0dXJlLCBTCiAgICAgbV9jdXJyZW50QmxvY2stPnNldFN1Y2Nlc3NvcnMo
dGFrZW4sIG5vdFRha2VuKTsKIAogICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47Ci0gICAgbmV3
U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0
U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIHJlc3VsdCA9
IENvbnRyb2xEYXRhKG9yaWdpbigpLCBzaWduYXR1cmUsIHRtcHNGb3JTaWduYXR1cmUoc2lnbmF0
dXJlKSwgQmxvY2tUeXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CiAgICAgcmV0dXJu
IHsgfTsKIH0KQEAgLTE4ODYsNyArMTg5OCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVs
c2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENv
bnRyb2xEYXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmV0dXJuVmFsdWVzKSAtPiBQ
YXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJv
bERhdGEmIGRhdGEsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKCpkYXRhLnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6Q2Fs
bGVlKTsKICAgICBpZiAoIXdhc21DYWxsSW5mby5yZXN1bHRzLnNpemUoKSkgewpAQCAtMTkyNCw3
ICsxOTM2LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xE
YXRhJiBkYXRhLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgcmUKICAgICAgICAgcmV0dXJuQ29uc3Ry
YWludHMuYXBwZW5kKENvbnN0cmFpbmVkVG1wKHRtcCwgd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV0p
KTsKICAgICB9CiAKLSAgICBlbWl0UGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFZl
Y3RvcjxUbXAsIDE+KCksIFdURk1vdmUocmV0dXJuQ29uc3RyYWludHMpKTsKKyAgICBlbWl0UGF0
Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2gsIFJlc3VsdExpc3QgeyB9LCBXVEZNb3ZlKHJl
dHVybkNvbnN0cmFpbnRzKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjAzOSwxMiArMjA1
MSwxNCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xF
bnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CiAgICAgICAg
ICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCiAgICAgICAgICAgICAgICAgZW50
cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2suYXBwZW5kKGFkZEJvdHRvbShtX2N1cnJlbnRCbG9jaywgZGF0YS5zaWduYXR1cmUoKS0+
cmV0dXJuVHlwZShpKSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgVHlw
ZSB0eXBlID0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAg
ICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQodHlwZSwg
YWRkQm90dG9tKG1fY3VycmVudEJsb2NrLCB0eXBlKSk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlc3VsdCA6IGRhdGEu
cmVzdWx0cykKLSAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVu
ZChyZXN1bHQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1
cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5
cGUoaSksIGRhdGEucmVzdWx0c1tpXSk7CiAgICAgfQogCiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBu
b3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVt
aXQgYSByZXR1cm4gaGVyZS4KQEAgLTIwNTQsNyArMjA2OCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2sm
IGV4cHJlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotQjM6OlBhdGNocG9pbnRWYWx1ZSogQWlySVJH
ZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4mIHJlc3Vs
dHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4m
JiBwYXRjaEFyZ3MpCitCMzo6UGF0Y2hwb2ludFZhbHVlKiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENh
bGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJn
cywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiYmIHBhdGNoQXJncykKIHsKICAgICBhdXRvKiBwYXRj
aHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKSk7CiAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMjA3OSw3ICsyMDkz
LDcgQEAgQjM6OlBhdGNocG9pbnRWYWx1ZSogQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hw
b2ludChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QKICAgICByZXR1cm4gcGF0Y2hwb2ludDsKIH0K
IAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
VmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIApAQCAtMjE2OSw3ICsyMTgzLDcgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZSwgMT4mIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlz
dCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxl
ZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKQEAgLTIzMjUsNyArMjMzOSw3IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBBaXJJUkdlbmVyYXRvcjo6
dW5pZnkoY29uc3QgRXhwcmVzc2lvblR5cGUmIGRzdCwgY29uc3QgRXhwcmVzc2lvblR5cGUmIHNv
dXJjZSkKK3ZvaWQgQWlySVJHZW5lcmF0b3I6OnVuaWZ5KGNvbnN0IEV4cHJlc3Npb25UeXBlIGRz
dCwgY29uc3QgRXhwcmVzc2lvblR5cGUgc291cmNlKQogewogICAgIEFTU0VSVChpc1N1YnR5cGUo
c291cmNlLnR5cGUoKSwgZHN0LnR5cGUoKSkpOwogICAgIGFwcGVuZChtb3ZlT3BGb3JWYWx1ZVR5
cGUoZHN0LnR5cGUoKSksIHNvdXJjZSwgZHN0KTsKQEAgLTIzNDMsMTAgKzIzNTcsMTAgQEAgc3Rh
dGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFjayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBj
b25zdCBBaXJJUkdlbmVyYXRvcjoKIHsKICAgICBkYXRhTG9nKGNvbW1hLCAiRXhwcmVzc2lvblN0
YWNrOiIpOwogICAgIGZvciAoY29uc3QgYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25TdGFj
aykKLSAgICAgICAgZGF0YUxvZyhjb21tYSwgZXhwcmVzc2lvbik7CisgICAgICAgIGRhdGFMb2co
Y29tbWEsIGV4cHJlc3Npb24udmFsdWUoKSk7CiB9CiAKLXZvaWQgQWlySVJHZW5lcmF0b3I6OmR1
bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sq
IHN0YWNrKQordm9pZCBBaXJJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBDb250cm9sU3RhY2smIGNv
bnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIHN0YWNrKQogewogICAgIGRhdGFMb2dMbigiUHJvY2Vz
c2luZyBHcmFwaDoiKTsKICAgICBkYXRhTG9nKG1fY29kZSk7CkBAIC0yMzY4LDcgKzIzODIsNyBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCiAgICAgcmV0dXJu
IEIzOjpPcmlnaW4oKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlN
b2RlIG1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRo
cm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBp
bGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1
bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVw
Q291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxG
dW5jdGlvbj4oKTsKIApAQCAtMjM5MSw3ICsyNDA1LDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxh
dGkKICAgICAKICAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoT3B0aW9uczo6d2ViQXNzZW1ibHlC
QlFBaXJPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJh
dG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25h
dHVyZSk7CisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCBy
ZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+
IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
cGFyc2VyLnBhcnNlKCkpOwogCkBAIC0yOTgwLDcgKzI5OTQsNyBAQCBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydW5jVUY2ND4oRXhwcmVzc2lvblR5cGUgYXJnLCBFeHBy
ZXNzaW9uVAogICAgIH0pOwogCiAgICAgcmVzdWx0ID0gZzY0KCk7Ci0gICAgZW1pdFBhdGNocG9p
bnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIFZlY3RvcjxUbXAsIDE+IHsgcmVzdWx0IH0s
IFdURk1vdmUoYXJncykpOworICAgIGVtaXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRj
aHBvaW50LCBWZWN0b3I8VHlwZWRUbXAsIDg+IHsgcmVzdWx0IH0sIFdURk1vdmUoYXJncykpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTMwNTUsNyArMzA2OSw3IEBAIGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1bmNVRjMyPihFeHByZXNzaW9uVHlwZSBhcmcsIEV4
cHJlc3Npb25UCiAgICAgfSk7CiAKICAgICByZXN1bHQgPSBnNjQoKTsKLSAgICBlbWl0UGF0Y2hw
b2ludChtX2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgVmVjdG9yPFRtcCwgMT4geyByZXN1bHQg
fSwgV1RGTW92ZShhcmdzKSk7CisgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBh
dGNocG9pbnQsIFZlY3RvcjxUeXBlZFRtcCwgOD4geyByZXN1bHQgfSwgV1RGTW92ZShhcmdzKSk7
CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuaAppbmRleCAzMzFiNGIwYWQzMTNlNjIzY2E3ZmY0YmQ4ZGU4YTE1
ODZmYzdkNTA1Li4xYzNmNWJhZjA5MTZkNGNhNzhjNWZiYjRiM2U2MjdjNzIzODQ1Zjg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaApAQCAt
MzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1FeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVw
Q291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAwMzMw
MzM5N2Y1N2Y2YTk5MzE5MjhlOWQ1YjNiZjY4ODQyYjQ4N2VlLi4yMzY2NTM2NWZlOGUyMDhhN2Q5
YWM5YTlkOTM0M2FhNjA0MWYyZDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC04NiwxMiArODYsMTMgQEAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogY2xhc3MgQjNJUkdlbmVyYXRvciB7CiBwdWJs
aWM6Ci0gICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxWYWx1ZSosIDE+OyAvLyBWYWx1ZSBt
dXN0IGJlIGEgUGhpCisgICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSBWYWx1ZSo7CisgICAgdXNp
bmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgOD47CiAKICAgICBzdHJ1Y3Qg
Q29udHJvbERhdGEgewogICAgICAgICBDb250cm9sRGF0YShQcm9jZWR1cmUmIHByb2MsIE9yaWdp
biBvcmlnaW4sIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgQmxvY2tUeXBlIHR5cGUsIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbiwgQmFzaWNCbG9jayogc3BlY2lhbCA9IG51bGxwdHIpCiAgICAg
ICAgICAgICA6IGNvbnRyb2xCbG9ja1R5cGUodHlwZSkKLSAgICAgICAgICAgICwgc2lnbmF0dXJl
KHNpZ25hdHVyZSkKKyAgICAgICAgICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQogICAgICAg
ICAgICAgLCBjb250aW51YXRpb24oY29udGludWF0aW9uKQogICAgICAgICAgICAgLCBzcGVjaWFs
KHNwZWNpYWwpCiAgICAgICAgIHsKQEAgLTEwOCw2ICsxMDksOSBAQCBwdWJsaWM6CiAgICAgICAg
IHsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbERh
dGEmIGNvbnRyb2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpJ
ZjsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xEYXRhJiBj
b250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6VG9wTGV2
ZWw7IH0KKwogICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgc3dpdGNoIChibG9ja1R5cGUoKSkgewpAQCAtMTMzLDcgKzEzNyw5
IEBAIHB1YmxpYzoKIAogICAgICAgICBCbG9ja1R5cGUgYmxvY2tUeXBlKCkgY29uc3QgeyByZXR1
cm4gY29udHJvbEJsb2NrVHlwZTsgfQogCi0gICAgICAgIGJvb2wgaGFzTm9uVm9pZHJlc3VsdCgp
IGNvbnN0IHsgcmV0dXJuIHNpZ25hdHVyZS0+cmV0dXJuc1ZvaWQoKTsgfQorICAgICAgICBCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQorCisg
ICAgICAgIGJvb2wgaGFzTm9uVm9pZHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJl
LT5yZXR1cm5zVm9pZCgpOyB9CiAKICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JC
cmFuY2goKQogICAgICAgICB7CkBAIC0xNDksMjkgKzE1NSw0NyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCisgICAgICAgIFNpZ25hdHVyZUFy
Z0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Np
Z25hdHVyZS0+cmV0dXJuQ291bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUgYnJhbmNo
VGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOworICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSgp
ID09IEJsb2NrVHlwZTo6TG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUt
PmFyZ3VtZW50KGkpOworICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBl
KGkpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQjNJ
UkdlbmVyYXRvcjsKICAgICAgICAgQmxvY2tUeXBlIGNvbnRyb2xCbG9ja1R5cGU7Ci0gICAgICAg
IEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZTsKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgbV9zaWdu
YXR1cmU7CiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbjsKICAgICAgICAgQmFzaWNC
bG9jayogc3BlY2lhbDsKICAgICAgICAgUmVzdWx0TGlzdCBwaGlzOwogICAgIH07CiAKLSAgICB1
c2luZyBFeHByZXNzaW9uVHlwZSA9IFZhbHVlKjsKKyAgICB1c2luZyBDb250cm9sVHlwZSA9IENv
bnRyb2xEYXRhOwogICAgIHVzaW5nIEV4cHJlc3Npb25MaXN0ID0gVmVjdG9yPEV4cHJlc3Npb25U
eXBlLCAxPjsKLSAgICB1c2luZyBTdGFjayA9IEV4cHJlc3Npb25MaXN0OwogCi0gICAgdXNpbmcg
Q29udHJvbFR5cGUgPSBDb250cm9sRGF0YTsKICAgICB1c2luZyBDb250cm9sRW50cnkgPSBGdW5j
dGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OworICAgIHVzaW5nIENvbnRy
b2xTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpDb250cm9sU3RhY2s7Cisg
ICAgdXNpbmcgU3RhY2sgPSBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPjo6U3RhY2s7Cisg
ICAgdXNpbmcgVHlwZWRFeHByZXNzaW9uID0gRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj46
OlR5cGVkRXhwcmVzc2lvbjsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUg
ZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIGJvb2wgaXNDb250cm9s
VHlwZUlmKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBjb250cm9sLmJsb2Nr
VHlwZSgpID09IEJsb2NrVHlwZTo6SWY7IH0KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZV92PFJlc3VsdExpc3QsIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+OjpSZXN1bHRMaXN0
Pik7CiAKICAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVj
dGVkPEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsKICAgICB0eXBlZGVmIEV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAg
dHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CisKKyAgICBz
dGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkgeyByZXR1cm4gbnVsbHB0cjsg
fTsKKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5FVkVSX0lOTElORSBV
bmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4gYXJncykgY29u
c3QKICAgICB7CkBAIC0xODMsMjIgKzIwNywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0g
ICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIElu
dGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25l
ZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwg
VGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIEIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50Kik7CiAKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVp
bnQ2NF90KTsKIAogICAgIC8vIFJlZmVyZW5jZXMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUmIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZWZJc051bGwoRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZkZ1bmModWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAgLy8gVGFibGVzCi0gICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJl
c3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVTZXQodW5zaWduZWQsIEV4cHJlc3Npb25U
eXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVlKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUdldCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFRhYmxlU2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFRhYmxlU2l6ZSh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHBy
ZXNzaW9uVHlwZSYgZmlsbCwgRXhwcmVzc2lvblR5cGUmIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYg
cmVzdWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZp
bGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxs
LCBFeHByZXNzaW9uVHlwZSYgY291bnQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVz
c2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRhYmxlRmlsbCh1bnNpZ25lZCwgRXhwcmVzc2lvblR5
cGUgb2Zmc2V0LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBjb3VudCk7CiAg
ICAgLy8gTG9jYWxzCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0TG9j
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSk7CkBAIC0yMjksNyArMjUzLDcgQEAgcHVibGljOgogICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2UoQ29udHJvbERhdGEmLCBjb25zdCBTdGFj
ayYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVh
Y2hhYmxlKENvbnRyb2xEYXRhJik7CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBFeHByZXNzaW9uTGlzdCYg
cmV0dXJuVmFsdWVzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRS
ZXR1cm4oY29uc3QgQ29udHJvbERhdGEmLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWVzKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEm
LCBFeHByZXNzaW9uVHlwZSBjb25kaXRpb24sIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZXMpOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFN3aXRjaChFeHByZXNzaW9u
VHlwZSBjb25kaXRpb24sIGNvbnN0IFZlY3RvcjxDb250cm9sRGF0YSo+JiB0YXJnZXRzLCBDb250
cm9sRGF0YSYgZGVmYXVsdFRhcmdldHMsIGNvbnN0IFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xFbnRy
eSYsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjQzLDcgKzI2Nyw3IEBAIHB1YmxpYzoK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwog
ICAgIEIzOjpWYWx1ZSogY3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIE9yaWdpbiwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgY29uc3QgU2Nv
cGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZhbHVlKik+JiBwYXRjaHBvaW50RnVuY3Rvcik7CiAK
LSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywg
Y29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CisgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRy
b2xTdGFjayYsIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFy
c2VyKEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBw
YXJzZXI7IH07CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCkgeyB9CiAgICAgdm9p
ZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgfQpAQCAtMzYyLDcgKzM4Niw3IEBAIHZvaWQgQjNJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBC
YXNpY0Jsb2NrKiBibG9jCiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJ
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnks
IFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRp
b24pCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRp
b24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlIG1vZGUs
IENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwKQogICAg
IDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25N
b2RlKGNvbXBpbGF0aW9uTW9kZSkKQEAgLTM5Myw5ICs0MTcsNiBAQCBCM0lSR2VuZXJhdG9yOjpC
M0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHBy
b2NlZHVyZQogICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9tZW1vcnlTaXplR1BSKTsKICAg
ICB9CiAKLSAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9uKQotICAgICAgICBUaHVua3M6OnNpbmds
ZXRvbigpLnNldFRocm93V2FzbUV4Y2VwdGlvbih0aHJvd1dhc21FeGNlcHRpb24pOwotCiAgICAg
aWYgKGluZm8ubWVtb3J5KSB7CiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUikgewogICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwpA
QCAtNjY3LDEzICs2ODgsMTMgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSYg
dmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkUmVmSXNOdWxsKEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1
ZSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR2V0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJl
c3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBF
eHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoQW55cmVmKSwgb3Jp
Z2luKCksCkBAIC02OTIsNyArNzEzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdl
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHIKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2lnbmVk
IHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHZhbHVl
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlU2V0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlIGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1
ZSkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICBhdXRv
IHNob3VsZFRocm93ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3By
b2MsIEIzOjpJbnQzMiwgb3JpZ2luKCksCkBAIC03MzIsNyArNzUzLDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRUYWJsZVNpemUodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhw
cmVzc2lvblR5cGUmIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jvdyh1bnNpZ25lZCB0YWJsZUluZGV4
LCBFeHByZXNzaW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHJlc3VsdCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShJMzIpLCBvcmlnaW4o
KSwKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZvcGVyYXRpb25XYXNtVGFibGVH
cm93LCBCM0NDYWxsUHRyVGFnKSksCkBAIC03NDEsNyArNzYyLDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRUYWJsZUdyb3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGZp
bGwsIEV4cHIKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRh
YmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgb2Zmc2V0LCBFeHBy
ZXNzaW9uVHlwZSYgZmlsbCwgRXhwcmVzc2lvblR5cGUmIGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1bnNpZ25lZCB0YWJsZUluZGV4LCBF
eHByZXNzaW9uVHlwZSBvZmZzZXQsIEV4cHJlc3Npb25UeXBlIGZpbGwsIEV4cHJlc3Npb25UeXBl
IGNvdW50KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgdG9CM1R5cGUoSTMyKSwgb3JpZ2lu
KCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPigmb3BlcmF0aW9uV2FzbVRhYmxl
RmlsbCwgQjNDQ2FsbFB0clRhZykpLApAQCAtMTI3MCwxMiArMTI5MSwxMiBAQCB2b2lkIEIzSVJH
ZW5lcmF0b3I6OmVtaXRMb29wVGllclVwQ2hlY2sodWludDMyX3QgbG9vcEluZGV4KQogCiAgICAg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiBzdGFja21hcDsKICAgICBmb3IgKGF1dG8mIGxvY2FsIDog
bV9sb2NhbHMpIHsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbiwgbG9j
YWwpOworICAgICAgICBWYWx1ZSogcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIG9yaWdpbiwgbG9jYWwpOwogICAgICAgICBz
dGFja21hcC5hcHBlbmQocmVzdWx0KTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBjb250cm9s
SW5kZXggPSAwOyBjb250cm9sSW5kZXggPCBtX3BhcnNlci0+Y29udHJvbFN0YWNrKCkuc2l6ZSgp
OyArK2NvbnRyb2xJbmRleCkgewogICAgICAgICBhdXRvJiBleHByZXNzaW9uU3RhY2sgPSBtX3Bh
cnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
azsKLSAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBleHByZXNzaW9uU3RhY2spCisgICAgICAg
IGZvciAoVHlwZWRFeHByZXNzaW9uIHZhbHVlIDogZXhwcmVzc2lvblN0YWNrKQogICAgICAgICAg
ICAgc3RhY2ttYXAuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKQEAgLTEzMzMsMTIgKzEzNTQsMTIg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb24KICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewotICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gZW5jbG9zaW5nU3RhY2suYXQo
b2Zmc2V0ICsgaSk7CisgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNsb3Np
bmdTdGFjay5hdChvZmZzZXQgKyBpKTsKICAgICAgICAgICAgIGF1dG8qIHVwc2lsb24gPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFs
dWUpOwogICAgICAgICAgICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07CiAgICAgICAgICAg
ICBib2R5LT5hcHBlbmQocGhpKTsKICAgICAgICAgICAgIHVwc2lsb24tPnNldFBoaShwaGkpOwot
ICAgICAgICAgICAgbmV3U3RhY2suYXBwZW5kKHBoaSk7CisgICAgICAgICAgICBuZXdTdGFjay5j
b25zdHJ1Y3RBbmRBcHBlbmQodmFsdWUudHlwZSgpLCBwaGkpOwogICAgICAgICB9CiAgICAgICAg
IGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOwogICAgIH0KQEAgLTEzNjksNyArMTM5MCw3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUs
IFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29uCiAgICAgICAgICAgICB1bnNpZ25lZCBibG9ja0lu
ZGV4ID0gMDsKICAgICAgICAgICAgIEIzOjpJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fcHJv
Yyk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwcmVzc2lvblN0YWNr
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogdmFsdWUgPSBleHByZXNzaW9u
U3RhY2tbaV07CisgICAgICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZXhwcmVz
c2lvblN0YWNrW2ldOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNDb25zdGFudCgpKSB7
CiAgICAgICAgICAgICAgICAgICAgICsraW5kZXhJbkJ1ZmZlcjsKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0xMzg4LDcgKzE0MDksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
bgogICAgICAgICAgICAgICAgIEFTU0VSVChzb3VyY2VCbG9jay0+YXQoYmxvY2tJbmRleCAtIDEp
ID09IHZhbHVlKTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIHBoaSA9IGRhdGEuY29udGludWF0
aW9uLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgUGhpLCAgdmFsdWUtPnR5cGUoKSwgdmFsdWUt
Pm9yaWdpbigpKTsKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uU3RhY2tbaV0gPSBwaGk7Cisg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvblN0YWNrW2ldID0gVHlwZWRFeHByZXNzaW9uIHsgdmFs
dWUudHlwZSgpLCBwaGkgfTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCksIGxvYWRGcm9tU2NyYXRj
aEJ1ZmZlcih2YWx1ZS0+dHlwZSgpKSwgcGhpKTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIHNv
dXJjZVVwc2lsb24gPSBtX3Byb2MuYWRkPFVwc2lsb25WYWx1ZT4odmFsdWUtPm9yaWdpbigpLCB2
YWx1ZSwgcGhpKTsKQEAgLTE0MTYsNyArMTQzNyw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
QmxvY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENv
CiB7CiAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAK
LSAgICBuZXdTdGFjayA9IHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjayk7Cisg
ICAgc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrLCBuZXdTdGFjayk7CiAgICAg
bmV3QmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBzaWduYXR1cmUsIEJsb2Nr
VHlwZTo6QmxvY2ssIGNvbnRpbnVhdGlvbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE0MzUs
NyArMTQ1Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkSWYoRXhwcmVzc2lvblR5cGUgY29u
ZGl0aW9uLCBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0CiAgICAgbm90VGFrZW4tPmFkZFBy
ZWRlY2Vzc29yKG1fY3VycmVudEJsb2NrKTsKIAogICAgIG1fY3VycmVudEJsb2NrID0gdGFrZW47
Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOwor
ICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAg
IHJlc3VsdCA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tU
eXBlOjpJZiwgY29udGludWF0aW9uLCBub3RUYWtlbik7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAg
LTE0NTUsNyArMTQ3Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFi
bGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKICAgICByZXR1cm4geyB9Owog
fQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYsIGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiwgY29uc3QgU3RhY2sm
IHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIENhbGxJbmZvcm1hdGlvbiB3
YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Io
bV9wYXJzZXItPnNpZ25hdHVyZSgpLCBDYWxsUm9sZTo6Q2FsbGVlKTsKIApAQCAtMTUyNiw3ICsx
NTQ3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRW50cnkmIGVudHJ5
LCBTdGFjayYgZXhwcmVzc2lvblN0YWNrKSAtPiBQYXIKIHsKICAgICBDb250cm9sRGF0YSYgZGF0
YSA9IGVudHJ5LmNvbnRyb2xEYXRhOwogCi0gICAgQVNTRVJUKGV4cHJlc3Npb25TdGFjay5zaXpl
KCkgPT0gZGF0YS5zaWduYXR1cmUtPnJldHVybkNvdW50KCkpOworICAgIEFTU0VSVChleHByZXNz
aW9uU3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCkpOwogICAg
IGlmIChkYXRhLmJsb2NrVHlwZSgpICE9IEJsb2NrVHlwZTo6TG9vcCkKICAgICAgICAgdW5pZnlW
YWx1ZXNXaXRoQmxvY2soZXhwcmVzc2lvblN0YWNrLCBkYXRhLnBoaXMpOwogCkBAIC0xNTQ3LDE3
ICsxNTY4LDIwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250
cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzCiAgICAgfQogCiAgICAgaWYgKGRh
dGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpMb29wKSB7Ci0gICAgICAgIGZvciAoVmFsdWUq
IHJlc3VsdCA6IGRhdGEucGhpcykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBWYWx1
ZSogcmVzdWx0ID0gZGF0YS5waGlzW2ldOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZChyZXN1bHQpOwotICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgcmVz
dWx0KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVy
ZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIGlm
IChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5h
cHBlbmQoY29uc3RhbnQodG9CM1R5cGUoZGF0YS5zaWduYXR1cmUtPnJldHVyblR5cGUoaSkpLCAw
eGJiYWRiZWVmKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBUeXBlIHJl
dHVyblR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAg
ICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChyZXR1
cm5UeXBlLCBjb25zdGFudCh0b0IzVHlwZShyZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xODk1LDE0ICsxOTE5LDE0IEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6dW5pZnlWYWx1ZXNXaXRoQmxvY2soY29uc3QgU3RhY2smIHJlc3Vs
dFN0YWNrLCBjb25zdCBSZXN1bHRMCiAgICAgICAgIHVuaWZ5KHJlc3VsdFtyZXN1bHQuc2l6ZSgp
IC0gMSAtIGldLCByZXN1bHRTdGFjay5hdChyZXN1bHRTdGFjay5zaXplKCkgLSAxIC0gaSkpOwog
fQogCi1zdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYg
Y29tbWEsIGNvbnN0IEIzSVJHZW5lcmF0b3I6OkV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3Rh
Y2spCitzdGF0aWMgdm9pZCBkdW1wRXhwcmVzc2lvblN0YWNrKGNvbnN0IENvbW1hUHJpbnRlciYg
Y29tbWEsIGNvbnN0IEIzSVJHZW5lcmF0b3I6OlN0YWNrJiBleHByZXNzaW9uU3RhY2spCiB7CiAg
ICAgZGF0YUxvZyhjb21tYSwgIkV4cHJlc3Npb25TdGFjazoiKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCiAgICAgICAgIGRhdGFMb2coY29tbWEs
ICpleHByZXNzaW9uKTsKIH0KIAotdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3Rv
cjxDb250cm9sRW50cnk+JiBjb250cm9sU3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3Rh
Y2spCit2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiBjb250cm9s
U3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spCiB7CiAgICAgZGF0YUxvZ0xuKCJD
b25zdGFudHM6Iik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBjb25zdGFudCA6IG1fY29uc3RhbnRQ
b29sKQpAQCAtMTkzMCw3ICsxOTU0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAt
PiBPcmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKIH0KIAot
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3Qg
RnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGll
clVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikK
K0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNp
Z25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRp
ZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVy
bmFsRnVuY3Rpb24+KCk7CiAKQEAgLTE5NTQsNyArMTk3OCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGls
YXRpb25DCiAgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFCM09wdGltaXphdGlvbkxl
dmVsKCkKICAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVs
KCkpOwogCi0gICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJl
c3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9y
T1NSRW50cnksIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBCM0lSR2VuZXJhdG9y
IGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRpb25N
b2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVwKTsKICAgICBG
dW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9u
LmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAg
ICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggZWE1NTAyNDAx
OGQzMGQzOGZmMWVhN2E3YWJmMWMxNjViY2Y1NjdmOC4uZDJmODgxZTFlNDEyNzMzZTgyNmQ5YjE0
N2ZjZWY3YzAxYjk2NDUzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oCkBAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRl
eHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5
cG9pbnRCeXByb2R1Y3RzOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3Vu
dCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKK0V4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUo
Q29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29t
cGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhG
b3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApp
bmRleCBhYWM1YThjMjY1MmUzNjMwMTBkYzgxYzcyZjNjZDA2NDRjNTI5Y2FlLi5iYzkyYjZkZDYy
YjhkODg0MDBhZDgzZGFjNGUwN2Q2M2YzMmZlMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkpTVG9XYXNt
LmgiCiAjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQmluZGluZy5oIgpAQCAtNTQsNyArNTUsNyBAQCBz
dGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCiBCQlFQbGFuOjpCQlFQ
bGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3Jt
YXRpb24sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21w
bGV0aW9uVGFzayYmIGNvbXBsZXRpb25UYXNrKQotICAgIDogRW50cnlQbGFuKGNvbnRleHQsIFdU
Rk1vdmUobW9kdWxlSW5mb3JtYXRpb24pLCBXVEZNb3ZlKGNvbXBsZXRpb25UYXNrKSkKKyAgICA6
IEVudHJ5UGxhbihjb250ZXh0LCBXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSwgQXN5bmNXb3Jr
OjpGdWxsQ29tcGlsZSwgV1RGTW92ZShjb21wbGV0aW9uVGFzaykpCiAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKQEAg
LTc5LDcgKzgwLDI0IEBAIGJvb2wgQkJRUGxhbjo6cHJlcGFyZUltcGwoKQogdm9pZCBCQlFQbGFu
Ojp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBpZiAoIW1fY29kZUJsb2Nr
KSB7Ci0gICAgICAgIEJhc2U6OndvcmsoZWZmb3J0KTsKKyAgICAgICAgc3dpdGNoIChtX3N0YXRl
KSB7CisgICAgICAgIGNhc2UgU3RhdGU6OkluaXRpYWw6CisgICAgICAgICAgICBwYXJzZUFuZFZh
bGlkYXRlTW9kdWxlKCk7CisgICAgICAgICAgICBpZiAoIWhhc1dvcmsoKSkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpWYWxpZGF0ZWQpOworICAgICAgICAgICAg
ICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgU3Rh
dGU6OlZhbGlkYXRlZDoKKyAgICAgICAgICAgIHByZXBhcmUoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0YXRlOjpQcmVwYXJlZDoKKyAgICAgICAgICAgIGNvbXBpbGVGdW5j
dGlvbnMoZWZmb3J0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTE1LDcgKzEzMyw3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0gPSBjYWxsZWUu
Y29weVJlZigpOwogICAgICAgICB7Ci0gICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxs
ZWUgPSAqbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF07CisgICAg
ICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENh
bGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKTsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7CiAgICAgICAgICAg
ICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKICAgICAgICAg
ICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJ
bnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CkBAIC0xNTMsMTAg
KzE3MSwxMSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9X
YXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9j
b2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoTExJ
bnRDYWxsZWUqIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW2ldLmdl
dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUg
PSBsbGludENhbGxlZS0+cmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9j
ay0+bV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRD
YWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbaV0uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBs
YWNlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRD
YWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLT5vc3JFbnRyeUNh
bGxlZSgpKQorICAgICAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50
cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBt
X2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW2ldLmdldCgpKSB7CkBAIC0xOTEsNyArMjEwLDcgQEAg
dm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICBTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9u
cy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoKm1fY29tcGlsYXRp
b25Db250ZXh0c1tmdW5jdGlvbkluZGV4XS5lbWJlZGRlckVudHJ5cG9pbnRKSVQsIHNpZ25hdHVy
ZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOworICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRl
eCwgY3JlYXRlSlNUb1dhc21XcmFwcGVyKCptX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25J
bmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklULCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIGZ1bmN0aW9uSW5kZXgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKICAgICB9CiB9CkBAIC0yMTUsOSArMjM0LDkgQEAgc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBm
dW5jdGlvbkluZGUKICAgICAgICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKIAogICAgIGlmICghZm9y
Y2VVc2luZ0IzICYmIE9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihjb250ZXh0LCBmdW5jdGlvbiwgc2ln
bmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsK
KyAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKGNvbnRl
eHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAgICAg
ZWxzZQotICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29u
dGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwg
Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVy
VXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9y
bWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25J
bmRleCwgVUlOVDMyX01BWCwgdGllclVwKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRD
b21waWxlUmVzdWx0KSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CkBAIC0yODMsMjEgKzMwMiw0MSBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNv
bnN0IENhbGxlZUluaXRpYWxpemVyJiBjYWxsYmFjaykKICAgICBBU1NFUlQoIWZhaWxlZCgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVu
Y3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1
bmN0aW9uSW5kZXgpIHsKIAotICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWU7CisgICAgICAgIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+
IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dh
c21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJu
YWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
ID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRl
clRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7CisgICAgICAgICAgICBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUgPSBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGVt
YmVkZGVyVG9XYXNtRnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdl
dCgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7CiAg
ICAgICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBpbnRlcm5hbEZ1bmN0aW9uSW5kZXgg
KyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgICAgIFJl
ZjxXYXNtOjpDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6QkJRQ2FsbGVlOjpj
cmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
LCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3Zl
KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOworICAg
ICAgICBSZWY8QkJRQ2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IEJCUUNhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwg
V1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZSht
X3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsK
IAogICAgICAgICBjYWxsYmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwogICAg
IH0KIH0KIAorYm9vbCBCQlFQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRhKHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24pCit7CisgICAgZGF0YUxv
Z0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlByb2Nlc3NpbmcgZnVuY3Rpb24g
c3RhcnRpbmcgYXQ6ICIsIGZ1bmN0aW9uLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGZ1bmN0
aW9uLmVuZCk7CisgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gZnVuY3Rpb24uZW5kIC0gZnVu
Y3Rpb24uc3RhcnQ7CisgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoID09IGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpKTsKKyAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhd
OworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CisKKyAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxp
ZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCkpOworICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkgeworICAgICAgICBpZiAoV2FzbUJCUVBs
YW5JbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZ1bmN0aW9uTGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2lu
dGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uLmRhdGFbaV0pKSwgIiwgIik7Cisg
ICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgfQorICAgICAgICBmYWlsKGhvbGRMb2Nr
KG1fbG9jayksIG1ha2VTdHJpbmcodmFsaWRhdGlvblJlc3VsdC5lcnJvcigpLCAiLCBpbiBmdW5j
dGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOyAvLyBGSVhN
RSBtYWtlIHRoaXMgYW4gRXhwZWN0ZWQuCisgICAgfQorICAgIHJldHVybiAhIXZhbGlkYXRpb25S
ZXN1bHQ7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApp
bmRleCBmMjJlMTg5NjQ3MjdhZjNlNWU4MDRmZTg1Mzc4YTEwYzllZjA0N2FkLi41ZTJkZmRmZmM2
MzAxYTU2Mjc0MGNmY2MyZTc0MWQ0ZjM2M2JmODI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmgKQEAgLTQ0LDcgKzQ0LDkgQEAgY2xhc3MgQ2FsbExpbmtJbmZvOwog
CiBuYW1lc3BhY2UgV2FzbSB7CiAKK2NsYXNzIEJCUUNhbGxlZTsKIGNsYXNzIENvZGVCbG9jazsK
K2NsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKIAogY2xhc3MgQkJRUGxhbiBmaW5hbCA6
IHB1YmxpYyBFbnRyeVBsYW4gewogcHVibGljOgpAQCAtNTQsOCArNTYsMjQgQEAgcHVibGljOgog
CiAgICAgQkJRUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrKiwgQ29tcGxldGlvblRhc2smJik7CiAKKyAgICBib29s
IGhhc1dvcmsoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fYXN5bmNXb3Jr
ID09IEFzeW5jV29yazo6VmFsaWRhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0YXRlIDwg
U3RhdGU6OlZhbGlkYXRlZDsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGls
ZWQ7CisgICAgfQorCiAgICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IENhbGxlZUluaXRpYWxpemVyJikgb3Zl
cnJpZGU7CisKKyAgICB1c2luZyBDYWxsZWVJbml0aWFsaXplciA9IEZ1bmN0aW9uPHZvaWQodWlu
dDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+JiYsIFJlZjxCQlFDYWxsZWU+
JiYpPjsKKyAgICB2b2lkIGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IENhbGxlZUluaXRpYWxpemVy
Jik7CisKKyAgICBib29sIGRpZFJlY2VpdmVGdW5jdGlvbkRhdGEodW5zaWduZWQsIGNvbnN0IEZ1
bmN0aW9uRGF0YSYpIG92ZXJyaWRlOworCisgICAgYm9vbCBwYXJzZUFuZFZhbGlkYXRlTW9kdWxl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlOjpwYXJzZUFuZFZhbGlkYXRlTW9kdWxlKG1f
c291cmNlLmRhdGEoKSwgbV9zb3VyY2Uuc2l6ZSgpKTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAg
ICBib29sIHByZXBhcmVJbXBsKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IDQwMmU3MGJkODRhMWYwNmYxOTY0MjA3OWJiMDZi
M2M1NTgzNGYyMWEuLjEzNGRhN2RlMGIzZTk3NTU3NDE2ZGM0MzE5NWJjYWRmZWZlOTIyNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC0zNiw1
OCArMzYsNzIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotUmVmPENv
ZGVCbG9jaz4gQ29kZUJsb2NrOjpjcmVhdGUoQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBt
b2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24sIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKK1JlZjxDb2RlQmxvY2s+IENvZGVCbG9jazo6Y3JlYXRlKENvbnRleHQq
IGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9y
bWF0aW9uLCBjb25zdCBSZWY8TExJbnRDYWxsZWU+KiBsbGludENhbGxlZXMpCiB7Ci0gICAgYXV0
byogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBmYXN0TWFsbG9jKHNpemVvZihDb2RlQmxvY2spKSkg
Q29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBXVEZNb3ZlKGNyZWF0
ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgYXV0byogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBmYXN0TWFsbG9jKHNpemVvZihDb2RlQmxvY2spKSkgQ29kZUJsb2Nr
KGNvbnRleHQsIG1vZGUsIG1vZHVsZUluZm9ybWF0aW9uLCBsbGludENhbGxlZXMpOwogICAgIHJl
dHVybiBhZG9wdFJlZigqcmVzdWx0KTsKIH0KIAotQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4
dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5m
b3JtYXRpb24sIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0NvZGVCbG9jazo6Q29kZUJs
b2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24m
IG1vZHVsZUluZm9ybWF0aW9uLCBjb25zdCBSZWY8TExJbnRDYWxsZWU+KiBsbGludENhbGxlZXMp
CiAgICAgOiBtX2NhbGxlZUNvdW50KG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRnVuY3Rpb25D
b3VudCgpKQogICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX2xsaW50Q2FsbGVlcyhsbGludENh
bGxlZXMpCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7CiAK
LSAgICBhdXRvIHRhc2sgPSBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICBpZiAobV9wbGFu
LT5mYWlsZWQoKSkgewotICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtX3BsYW4tPmVycm9y
TWVzc2FnZSgpOwotICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBl
dmVudHVhbGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgotICAgICAgICBtX2xsaW50Q2FsbGVlcy5y
ZXNpemUobV9jYWxsZWVDb3VudCk7Ci0gICAgICAgIG1fYmJxQ2FsbGVlcy5yZXNpemUobV9jYWxs
ZWVDb3VudCk7Ci0gICAgICAgIG1fb21nQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7Ci0g
ICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50
KTsKLQotICAgICAgICBtX3BsYW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2Fs
bGVlSW5kZXgsIFJlZlB0cjxDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBSZWZQ
dHI8Q2FsbGVlPiYmIHdhc21FbnRyeXBvaW50KSB7Ci0gICAgICAgICAgICBpZiAoZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVk
ZGVyQ2FsbGVlcy5zZXQoY2FsbGVlSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05l
d0VudHJ5KTsKKyAgICBpZiAoT3B0aW9uczo6dXNlV2FzbUxMSW50KCkpIHsKKyAgICAgICAgbV9w
bGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZv
cm1hdGlvbiksIG1fbGxpbnRDYWxsZWVzLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNr
VHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxh
biYpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAg
ICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7CisgICAgICAgICAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtX3BsYW4tPmVycm9yTWVzc2FnZSgpOworICAgICAgICAgICAgICAgIHNldENvbXBp
bGF0aW9uRmluaXNoZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF0g
PSB3YXNtRW50cnlwb2ludC0+ZW50cnlwb2ludCgpOwogCi0gICAgICAgICAgICBpZiAoT3B0aW9u
czo6dXNlV2FzbUxMSW50KCkpCi0gICAgICAgICAgICAgICAgbV9sbGludENhbGxlZXNbY2FsbGVl
SW5kZXhdID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8TExJbnRDYWxsZWUqPih3YXNtRW50cnlwb2lu
dC5sZWFrUmVmKCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2JicUNh
bGxlZXNbY2FsbGVlSW5kZXhdID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4od2Fz
bUVudHJ5cG9pbnQubGVha1JlZigpKSk7Ci0gICAgICAgIH0pOworICAgICAgICAgICAgLy8gRklY
TUU6IHdlIHNob3VsZCBldmVudHVhbGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgorICAgICAgICAg
ICAgbV9iYnFDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fb21n
Q2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisgICAgICAgICAgICBtX3dhc21JbmRpcmVj
dENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxlZUNvdW50OyArK2kpCisgICAgICAgICAgICAg
ICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbaV0gPSBtX2xsaW50Q2FsbGVlc1tpXS0+
ZW50cnlwb2ludCgpOworCisgICAgICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMgPSBtX3Bs
YW4tPnRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCk7CisgICAgICAgICAgICBtX3dhc21Ub1dhc21D
YWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CisgICAgICAgICAg
ICBtX2VtYmVkZGVyQ2FsbGVlcyA9IHN0YXRpY19jYXN0PExMSW50UGxhbio+KG1fcGxhbi5nZXQo
KSktPnRha2VFbWJlZGRlckNhbGxlZXMoKTsKIAotICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1
YnMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCk7Ci0gICAgICAgIG1fd2FzbVRv
V2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKKyAgICAg
ICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKKyAgICAgICAgfSkpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFr
ZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEVudHJ5UGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNo
YXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOworICAgICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKKyAg
ICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7Cisg
ICAgICAgICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAoT3B0aW9uczo6dXNlV2FzbUxM
SW50KCkpCi0gICAgICAgICAgICBtX2xsaW50RW50cnlUaHVua3MgPSBiaXR3aXNlX2Nhc3Q8TExJ
bnRQbGFuKj4obV9wbGFuLmdldCgpKS0+dGFrZUVudHJ5VGh1bmtzKCk7CisgICAgICAgICAgICAv
LyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCisgICAg
ICAgICAgICBtX2JicUNhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgICAgICAgICAg
bV9vbWdDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgICAgIG1fd2FzbUlu
ZGlyZWN0Q2FsbEVudHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKworICAgICAgICAg
ICAgQkJRUGxhbiogYmJxUGxhbiA9IHN0YXRpY19jYXN0PEJCUVBsYW4qPihtX3BsYW4uZ2V0KCkp
OworICAgICAgICAgICAgYmJxUGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBj
YWxsZWVJbmRleCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiBlbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUsIFJlZlB0cjxCQlFDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlckNhbGxlZXMuc2V0KGNhbGxlZUluZGV4
LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxs
ZWVJbmRleF0gPSB3YXNtRW50cnlwb2ludC0+ZW50cnlwb2ludCgpOworICAgICAgICAgICAgICAg
IG1fYmJxQ2FsbGVlc1tjYWxsZWVJbmRleF0gPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxCQlFDYWxs
ZWUqPih3YXNtRW50cnlwb2ludC5sZWFrUmVmKCkpKTsKKyAgICAgICAgICAgIH0pOwogCi0gICAg
ICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKLSAgICB9KTsKKyAgICAgICAgICAgIG1fd2Fz
bVRvV2FzbUV4aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKKyAg
ICAgICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21D
YWxsc2l0ZXMoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQoKSkKLSAgICAgICAg
bV9wbGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJ
bmZvcm1hdGlvbiksIEVudHJ5UGxhbjo6RnVsbENvbXBpbGUsIFdURk1vdmUodGFzayksIFdURk1v
dmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJl
Zihtb2R1bGVJbmZvcm1hdGlvbiksIEVudHJ5UGxhbjo6RnVsbENvbXBpbGUsIFdURk1vdmUodGFz
ayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7
CisgICAgICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CisgICAgICAgIH0pKSk7Cisg
ICAgfQogICAgIG1fcGxhbi0+c2V0TW9kZShtb2RlKTsKIAogICAgIGF1dG8mIHdvcmtsaXN0ID0g
V2FzbTo6ZW5zdXJlV29ya2xpc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b2RlQmxvY2suaAppbmRleCAyYmZjMWIyNjA2MTcwMmE3NzkwNTJhZGM5NzljOGI4MTkyZjZjNDk4
Li4wMTU0N2ZkNTNjMmViOWFmYzc2MWI0ZjRhMjUzYjYwZmEzNGYzNTIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNz
IENvZGVCbG9jayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb2RlQmxvY2s+IHsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIHZvaWQgQ2FsbGJhY2tUeXBlKFJlZjxDb2RlQmxvY2s+JiYpOwog
ICAgIHVzaW5nIEFzeW5jQ29tcGlsYXRpb25DYWxsYmFjayA9IFJlZlB0cjxXVEY6OlNoYXJlZFRh
c2s8Q2FsbGJhY2tUeXBlPj47Ci0gICAgc3RhdGljIFJlZjxDb2RlQmxvY2s+IGNyZWF0ZShDb250
ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mLCBDcmVhdGVFbWJlZGRlcldyYXBw
ZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgUmVmPENvZGVCbG9jaz4gY3Jl
YXRlKENvbnRleHQqLCBNZW1vcnlNb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFJlZjxM
TEludENhbGxlZT4qKTsKIAogICAgIHZvaWQgd2FpdFVudGlsRmluaXNoZWQoKTsKICAgICB2b2lk
IGNvbXBpbGVBc3luYyhDb250ZXh0KiwgQXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYpOwpAQCAt
OTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gKm1fb21nQ2FsbGVlc1tj
YWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgICAgIGlmIChtX2JicUNhbGxlZXNbY2FsbGVlSW5kZXhd
KQogICAgICAgICAgICAgcmV0dXJuICptX2JicUNhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwot
ICAgICAgICByZXR1cm4gKm1fbGxpbnRDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIG1fbGxpbnRDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKICAg
ICBCQlFDYWxsZWUmIHdhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKQEAgLTEyOCwxNSArMTI4LDE0IEBAIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIE9NR1BsYW47CiAgICAgZnJpZW5kIGNsYXNzIE9NR0Zvck9TUkVudHJ5UGxh
bjsKIAotICAgIENvZGVCbG9jayhDb250ZXh0KiwgTWVtb3J5TW9kZSwgTW9kdWxlSW5mb3JtYXRp
b24mLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBD
b2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3Qg
UmVmPExMSW50Q2FsbGVlPiopOwogICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwog
ICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CiAgICAg
VmVjdG9yPFJlZlB0cjxPTUdDYWxsZWU+PiBtX29tZ0NhbGxlZXM7CiAgICAgVmVjdG9yPFJlZlB0
cjxCQlFDYWxsZWU+PiBtX2JicUNhbGxlZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxMTEludENhbGxl
ZT4+IG1fbGxpbnRDYWxsZWVzOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0
aW9uUHRyVGFnPiBtX2xsaW50RW50cnlUaHVua3M7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVm
UHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVz
OworICAgIGNvbnN0IFJlZjxMTEludENhbGxlZT4qIG1fbGxpbnRDYWxsZWVzOworICAgIEhhc2hN
YXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCB0eXBlbmFtZSBE
ZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKICAgICBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzOwogICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRv
V2FzbUNhbGxzaXRlczsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21FbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUVudHJ5UGxhbi5jcHAKaW5kZXggNWQzNDcyYjRhZjU3ZTRkMmU4MjI3ZTczNzg2
ODUzMTdjMjE5M2E4OS4uNzdkMDNkMzBiNjgyY2E2YmEzZGEwZjQ4NTlkYTI5ZmUxNjFkNjQ0YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAKQEAgLTQ3
LDMzICs0NywxNyBAQCBuYW1lc3BhY2UgV2FzbUVudHJ5UGxhbkludGVybmFsIHsKIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotRW50cnlQbGFuOjpFbnRyeVBsYW4oQ29u
dGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29y
aywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVF
bWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCi0g
ICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQorRW50cnlQbGFuOjpF
bnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBB
c3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorICAgIDogQmFzZShjb250ZXh0
LCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9zdHJlYW1pbmdQYXJzZXIo
bV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgKnRoaXMpCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpW
YWxpZGF0ZWQpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewogfQogCi1FbnRyeVBsYW46OkVu
dHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
IGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKLSAgICA6IEJhc2UoY29udGV4dCwgTW9kdWxlSW5mb3JtYXRpb246OmNyZWF0ZSgpLCBX
VEZNb3ZlKHRhc2spLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4
Y2VwdGlvbikKLSAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKLSAgICAsIG1fc3RyZWFt
aW5nUGFyc2VyKG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksICp0aGlzKQotICAgICwgbV9zdGF0
ZShTdGF0ZTo6SW5pdGlhbCkKLSAgICAsIG1fYXN5bmNXb3JrKHdvcmspCi17Ci19Ci0KLUVudHJ5
UGxhbjo6RW50cnlQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4g
bW9kdWxlSW5mb3JtYXRpb24sIENvbXBsZXRpb25UYXNrJiYgdGFzaykKLSAgICA6IEJhc2UoY29u
dGV4dCwgV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbiksIFdURk1vdmUodGFzaykpCi0gICAgLCBt
X3N0cmVhbWluZ1BhcnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKLSAgICAs
IG1fc3RhdGUoU3RhdGU6OkluaXRpYWwpCi0gICAgLCBtX2FzeW5jV29yayhBc3luY1dvcms6OkZ1
bGxDb21waWxlKQotewotfQotCi1FbnRyeVBsYW46OkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0
LCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQorRW50cnlQbGFuOjpFbnRy
eVBsYW4oQ29udGV4dCogY29udGV4dCwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291cmNlLCBBc3luY1dv
cmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQogICAgIDogQmFzZShjb250ZXh0LCBXVEZN
b3ZlKHRhc2spKQorICAgICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2UpKQogICAgICwgbV9zdHJl
YW1pbmdQYXJzZXIobV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgKnRoaXMpCiAgICAgLCBtX3N0
YXRlKFN0YXRlOjpJbml0aWFsKQogICAgICwgbV9hc3luY1dvcmsod29yaykKQEAgLTk5LDI2ICs4
Myw2IEBAIHZvaWQgRW50cnlQbGFuOjptb3ZlVG9TdGF0ZShTdGF0ZSBzdGF0ZSkKICAgICBtX3N0
YXRlID0gc3RhdGU7CiB9CiAKLWJvb2wgRW50cnlQbGFuOjpkaWRSZWNlaXZlRnVuY3Rpb25EYXRh
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24pCi17
Ci0gICAgZGF0YUxvZ0xuSWYoV2FzbUVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiUHJvY2Vz
c2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgZnVuY3Rpb24uc3RhcnQsICIgYW5kIGVuZGlu
ZyBhdDogIiwgZnVuY3Rpb24uZW5kKTsKLSAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBmdW5j
dGlvbi5lbmQgLSBmdW5jdGlvbi5zdGFydDsKLSAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPT0g
ZnVuY3Rpb24uZGF0YS5zaXplKCkpOwotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNb
ZnVuY3Rpb25JbmRleF07Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLQotICAgIGF1dG8gdmFsaWRhdGlv
blJlc3VsdCA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSk7Ci0gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0KSB7Ci0gICAgICAg
IGlmIChXYXNtRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbi5kYXRh
W2ldKSksICIsICIpOwotICAgICAgICAgICAgZGF0YUxvZ0xuKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHZhbGlkYXRpb25SZXN1bHQuZXJy
b3IoKSwgIiwgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25J
bmRleCkpKTsgLy8gRklYTUUgbWFrZSB0aGlzIGFuIEV4cGVjdGVkLgotICAgIH0KLSAgICByZXR1
cm4gISF2YWxpZGF0aW9uUmVzdWx0OwotfQotCiBib29sIEVudHJ5UGxhbjo6cGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZShjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7
CiAgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkluaXRpYWwpCkBAIC0xNDUsOCArMTA5LDYgQEAg
Ym9vbCBFbnRyeVBsYW46OnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoY29uc3QgdWludDhfdCogc291
cmNlLCBzaXplX3Qgc291cmNlTGVuZ3QKICAgICAgICAgZGF0YUxvZ0xuKCJUb29rICIsIChNb25v
dG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWljcm9zZWNvbmRzKCksICIgdXMgdG8gdmFs
aWRhdGUgbW9kdWxlIik7CiAKICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKTsKLSAg
ICBpZiAobV9hc3luY1dvcmsgPT0gVmFsaWRhdGlvbikKLSAgICAgICAgY29tcGxldGUoaG9sZExv
Y2sobV9sb2NrKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Niw2ICsxMTgsNyBAQCB2
b2lkIEVudHJ5UGxhbjo6cHJlcGFyZSgpCiAgICAgZGF0YUxvZ0xuSWYoV2FzbUVudHJ5UGxhbklu
dGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgcHJlcGFyYXRpb24iKTsKIAogICAgIGNvbnN0IGF1
dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKKyAgICBtX251
bWJlck9mRnVuY3Rpb25zID0gZnVuY3Rpb25zLnNpemUoKTsKICAgICBpZiAoIXRyeVJlc2VydmVD
YXBhY2l0eShtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9y
dEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNj
cmlwdCBzdHVicyIpCiAgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgZnVuY3Rpb25zLnNpemUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0
byBXZWJBc3NlbWJseSBjYWxscyIpKQogICAgICAgICByZXR1cm47CkBAIC0yMjMsMjAgKzE4Niw2
IEBAIHB1YmxpYzoKICAgICBFbnRyeVBsYW4mIG1fcGxhbjsKIH07CiAKLXZvaWQgRW50cnlQbGFu
Ojpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQotewotICAgIEFTU0VSVCht
X3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpKTsKLSAgICBkYXRhTG9nTG5JZihXYXNtRW50cnlQ
bGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9uIik7Ci0KLSAgICBpZiAo
IWZhaWxlZCgpICYmIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKQotICAgICAgICBkaWRDb21w
bGV0ZUNvbXBpbGF0aW9uKGxvY2tlcik7Ci0KLSAgICBpZiAoIWlzQ29tcGxldGUoKSkgewotICAg
ICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKLSAgICAgICAgcnVuQ29tcGxldGlv
blRhc2tzKGxvY2tlcik7Ci0gICAgfQotfQotCiAKIHZvaWQgRW50cnlQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKQEAgLTI1Miw3ICsyMDEsNiBAQCB2
b2lkIEVudHJ5UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiAgICAgVGhyZWFkQ291bnRIb2xkZXIgaG9sZGVyKCp0aGlzKTsKIAogICAgIHNpemVfdCBieXRl
c0NvbXBpbGVkID0gMDsKLSAgICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnM7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKGVmZm9y
dCA9PSBQYXJ0aWFsICYmIGJ5dGVzQ29tcGlsZWQgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlQYXJ0
aWFsQ29tcGlsZUxpbWl0KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNjAsNyArMjA4LDcg
QEAgdm9pZCBFbnRyeVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAgICAgICB7CiAgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBpZiAobV9j
dXJyZW50SW5kZXggPj0gZnVuY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudEluZGV4ID49IG1fbnVtYmVyT2ZGdW5jdGlvbnMpIHsKICAgICAgICAgICAgICAgICBpZiAo
aGFzV29yaygpKQogICAgICAgICAgICAgICAgICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGls
ZWQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3MCwzMSArMjE4LDI1IEBAIHZvaWQg
RW50cnlQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAg
ICAgICAgfQogCiAgICAgICAgIGNvbXBpbGVGdW5jdGlvbihmdW5jdGlvbkluZGV4KTsKLSAgICAg
ICAgYnl0ZXNDb21waWxlZCArPSBmdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZGF0YS5zaXplKCk7
CisgICAgICAgIGJ5dGVzQ29tcGlsZWQgKz0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25z
W2Z1bmN0aW9uSW5kZXhdLmRhdGEuc2l6ZSgpOwogICAgIH0KIH0KIAotdm9pZCBFbnRyeVBsYW46
OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQordm9pZCBFbnRyeVBsYW46OmNvbXBsZXRl
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiB7Ci0gICAgc3dpdGNoIChtX3N0YXRlKSB7
Ci0gICAgY2FzZSBTdGF0ZTo6SW5pdGlhbDoKLSAgICAgICAgcGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7Ci0gICAgICAgIGlmICghaGFzV29y
aygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNDb21wbGV0ZSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgU3RhdGU6OlZh
bGlkYXRlZDoKLSAgICAgICAgcHJlcGFyZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFN0
YXRlOjpQcmVwYXJlZDoKLSAgICAgICAgY29tcGlsZUZ1bmN0aW9ucyhlZmZvcnQpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBBU1NFUlQobV9zdGF0
ZSAhPSBTdGF0ZTo6Q29tcGlsZWQgfHwgbV9jdXJyZW50SW5kZXggPj0gbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbUVudHJ5UGxhbklu
dGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgQ29tcGxldGlvbiIpOworCisgICAgaWYgKCFmYWls
ZWQoKSAmJiBtX3N0YXRlID09IFN0YXRlOjpDb21waWxlZCkKKyAgICAgICAgZGlkQ29tcGxldGVD
b21waWxhdGlvbihsb2NrZXIpOworCisgICAgaWYgKCFpc0NvbXBsZXRlKCkpIHsKKyAgICAgICAg
bW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBsZXRlZCk7CisgICAgICAgIHJ1bkNvbXBsZXRpb25UYXNr
cyhsb2NrZXIpOwogICAgIH0KIH0KIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUVudHJ5UGxhbi5oCmluZGV4IDI0ODM2MjhiY2NkNTMwMDBhOWQ2YmEwNTU1NzQ2MDU3YTI1
NTkwOGYuLmI0OWRjMmIxNTkxMmRlOTY2Y2Q4ODZhNjQ3NDhmMDFiYzdjMmY0NDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbnRyeVBsYW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmgKQEAgLTQ3LDM2ICs0NywxNSBA
QCBwdWJsaWM6CiAgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZh
bGlkYXRpb24gfTsKIAogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9s
ZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVy
ZW5jZSBjeWNsZS4KLSAgICBFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlv
bj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYs
IFRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgRW50cnlQbGFuKENv
bnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmLCBD
cmVhdGVFbWJlZGRlcldyYXBwZXImJiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBFbnRyeVBs
YW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIENvbXBsZXRpb25UYXNrJiYpOwot
ICAgIEVudHJ5UGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKKyAg
ICBFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywg
Q29tcGxldGlvblRhc2smJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRW50cnlQbGFuKENvbnRl
eHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIAog
ICAgIHZpcnR1YWwgfkVudHJ5UGxhbigpID0gZGVmYXVsdDsKIAotICAgIHVzaW5nIENhbGxlZUlu
aXRpYWxpemVyID0gRnVuY3Rpb248dm9pZCh1aW50MzJfdCwgUmVmUHRyPENhbGxlZT4mJiwgUmVm
PENhbGxlZT4mJik+OwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhjb25zdCBD
YWxsZWVJbml0aWFsaXplciYpID0gMDsKLQotICAgIGJvb2wgcGFyc2VBbmRWYWxpZGF0ZU1vZHVs
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShtX3NvdXJj
ZS5kYXRhKCksIG1fc291cmNlLnNpemUoKSk7Ci0gICAgfQotICAgIGJvb2wgcGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICB2b2lkIHByZXBhcmUoKTsK
IAogICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCk7CiAKLSAgICBW
ZWN0b3I8RXhwb3J0PiYgZXhwb3J0cygpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5leHBvcnRzOwotICAgIH0KLQotICAgIHNpemVfdCBpbnRlcm5hbEZ1bmN0aW9u
Q291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYm
ICFoYXNXb3JrKCkpOwotICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJu
YWxGdW5jdGlvbkNvdW50KCk7Ci0gICAgfQotCiAgICAgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYm
IHRha2VNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7CkBAIC0xMDMsMzkgKzgyLDI3IEBAIHB1YmxpYzoKICAg
ICAgICAgQ29tcGxldGVkIC8vIFdlIHNob3VsZCBvbmx5IG1vdmUgdG8gQ29tcGxldGVkIGlmIHdl
IGFyZSBob2xkaW5nIHRoZSBsb2NrLgogICAgIH07CiAKLSAgICBib29sIGhhc1dvcmsoKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKG1fYXN5bmNXb3JrID09IEFzeW5jV29yazo6
VmFsaWRhdGlvbikKLSAgICAgICAgICAgIHJldHVybiBtX3N0YXRlIDwgU3RhdGU6OlZhbGlkYXRl
ZDsKLSAgICAgICAgcmV0dXJuIG1fc3RhdGUgPCBTdGF0ZTo6Q29tcGlsZWQ7Ci0gICAgfQotCi0g
ICAgdm9pZCB3b3JrKENvbXBpbGF0aW9uRWZmb3J0KSBvdmVycmlkZTsKLSAgICBib29sIGhhc0Jl
ZW5QcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkOyB9
Ci0gICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaGFzQmVl
blByZXBhcmVkKCk7IH0KLQotICAgIGJvb2wgZGlkUmVjZWl2ZUZ1bmN0aW9uRGF0YSh1bnNpZ25l
ZCwgY29uc3QgRnVuY3Rpb25EYXRhJikgb3ZlcnJpZGU7CisgICAgYm9vbCBtdWx0aVRocmVhZGVk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQ7IH0K
IAogcHJpdmF0ZToKICAgICBjbGFzcyBUaHJlYWRDb3VudEhvbGRlcjsKICAgICBmcmllbmQgY2xh
c3MgVGhyZWFkQ291bnRIb2xkZXI7CiAKLSAgICB2b2lkIHByZXBhcmUoKTsKLSAgICBib29sIGlz
Q29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpDb21w
bGV0ZWQ7IH0KLSAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgb3ZlcnJp
ZGU7Ci0KLSAgICBjb25zdCBjaGFyKiBzdGF0ZVN0cmluZyhTdGF0ZSk7Ci0KIHByb3RlY3RlZDoK
ICAgICAvLyBGb3Igc29tZSByZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVuZCB0byBwYXJl
bnQgY2xhc3Nlcy4uLgogICAgIHVzaW5nIEJhc2U6Om1fbG9jazsKIAorICAgIGJvb2wgcGFyc2VB
bmRWYWxpZGF0ZU1vZHVsZShjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIGNvbnN0IGNo
YXIqIHN0YXRlU3RyaW5nKFN0YXRlKTsKKyAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKKyAg
ICBib29sIGlzQ29tcGxldGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3N0YXRlID09IFN0
YXRlOjpDb21wbGV0ZWQ7IH0KKyAgICB2b2lkIGNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jikgb3ZlcnJpZGU7CisKICAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZUltcGwoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlQ29tcGlsYXRpb24oY29uc3QgQWJzdHJhY3RM
b2NrZXImKSA9IDA7CiAKLSAgICB2b2lkIG1vdmVUb1N0YXRlKFN0YXRlKTsKLQogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICAgYm9vbCB0cnlSZXNlcnZlQ2FwYWNpdHkoVmVjdG9yPFQ+JiB2
ZWN0b3IsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiB3aGF0KQogICAgIHsKQEAgLTE1Nyw2ICsx
MjQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgQXN5bmNXb3JrIG1fYXN5bmNXb3JrOwogICAg
IHVpbnQ4X3QgbV9udW1iZXJPZkFjdGl2ZVRocmVhZHMgeyAwIH07CiAgICAgdWludDMyX3QgbV9j
dXJyZW50SW5kZXggeyAwIH07CisgICAgdWludDMyX3QgbV9udW1iZXJPZkZ1bmN0aW9ucyB7IDAg
fTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Q
YXJzZXIuaAppbmRleCBjY2ZhMTg1NDM1NDk5OWY4MmE4YWE0MjhlOGQ0OGU1YzQxZjQ3ODdkLi5k
MTJjOTQ4YTQ2NTkzNTE4ODgxMTZiMzI4NjMzYzkxZmZkYzIyYTEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtNDAsMzEgKzQwLDUw
IEBAIGVudW0gY2xhc3MgQmxvY2tUeXBlIHsKICAgICBUb3BMZXZlbAogfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgU3RhY2s+Ci1TdGFjayBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVy
ZSwgU3RhY2smIHN0YWNrKQordGVtcGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3RhY2ssIHR5cGVu
YW1lIE5ld1N0YWNrPgordm9pZCBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
RW5jbG9zaW5nU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBOZXdTdGFjayYgbmV3U3RhY2spCiB7Ci0g
ICAgU3RhY2sgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpKTsKLSAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBzdGFjay5zaXpl
KCkgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBuZXdTdGFjay5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBBU1NFUlQoZW5j
bG9zaW5nU3RhY2suc2l6ZSgpID49IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICB1
bnNpZ25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChzdGFjay5h
dChpICsgb2Zmc2V0KSk7Ci0gICAgc3RhY2suc2hyaW5rKG9mZnNldCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgbmV3U3RhY2sudW5jaGVja2VkQXBwZW5kKGVuY2xvc2luZ1N0YWNrLmF0
KGkgKyBvZmZzZXQpKTsKKyAgICBlbmNsb3NpbmdTdGFjay5zaHJpbmsob2Zmc2V0KTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGNsYXNzIEZ1bmN0aW9uUGFyc2VyIDogcHVibGlj
IFBhcnNlcjx2b2lkPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgRXhwcmVzc2lvblR5cGUgPSB0eXBl
bmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZTsKKyAgICBzdHJ1Y3QgQ29udHJvbEVudHJ5Owor
CiAgICAgdXNpbmcgQ29udHJvbFR5cGUgPSB0eXBlbmFtZSBDb250ZXh0OjpDb250cm9sVHlwZTsK
LSAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25M
aXN0OwotICAgIHVzaW5nIFN0YWNrID0gdHlwZW5hbWUgQ29udGV4dDo6U3RhY2s7Ci0gICAgdXNp
bmcgUmVzdWx0TGlzdCA9IHR5cGVuYW1lIENvbnRleHQ6OlJlc3VsdExpc3Q7CisgICAgdXNpbmcg
RXhwcmVzc2lvblR5cGUgPSB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZTsKIAotICAg
IEZ1bmN0aW9uUGFyc2VyKENvbnRleHQmLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBz
aXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJik7CisgICAgY2xhc3MgVHlwZWRFeHByZXNzaW9uIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFR5cGVkRXhwcmVzc2lvbigpID0gZGVmYXVsdDsKIAotICAgIFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2UoKTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uKFR5cGUgdHlwZSwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpCisgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAg
ICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgICAgICBFeHByZXNzaW9uVHlw
ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgb3BlcmF0b3IgRXhw
cmVzc2lvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICAgICAgRXhwcmVz
c2lvblR5cGUgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFR5cGUgbV90eXBlOworICAgICAgICBFeHByZXNzaW9uVHlwZSBtX3Zh
bHVlOworICAgIH07CisKKyAgICB1c2luZyBDb250cm9sU3RhY2sgPSBWZWN0b3I8Q29udHJvbEVu
dHJ5LCAxNj47CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwg
OD47CisgICAgdXNpbmcgU3RhY2sgPSBWZWN0b3I8VHlwZWRFeHByZXNzaW9uLCAxNiwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+OwogCiAgICAgc3RydWN0IENvbnRyb2xFbnRyeSB7CiAgICAgICAgIFN0
YWNrIGVuY2xvc2VkRXhwcmVzc2lvblN0YWNrOwpAQCAtNzIsMTEgKzkxLDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgQ29udHJvbFR5cGUgY29udHJvbERhdGE7CiAgICAgfTsKIAorICAgIEZ1bmN0aW9u
UGFyc2VyKENvbnRleHQmLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVu
Y3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJik7
CisKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CisKICAgICBPcFR5cGUg
Y3VycmVudE9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZTsgfQogICAgIHNp
emVfdCBjdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRPcGNvZGVTdGFydGluZ09mZnNldDsgfQogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KIAotICAgIFZlY3RvcjxDb250cm9sRW50
cnk+JiBjb250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsgfQorICAgIENvbnRy
b2xTdGFjayYgY29udHJvbFN0YWNrKCkgeyByZXR1cm4gbV9jb250cm9sU3RhY2s7IH0KICAgICBT
dGFjayYgZXhwcmVzc2lvblN0YWNrKCkgeyByZXR1cm4gbV9leHByZXNzaW9uU3RhY2s7IH0KIAog
cHJpdmF0ZToKQEAgLTg2LDYgKzEwOSw4IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKTsKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB1bmlmeUNvbnRyb2woVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYsIHVuc2lnbmVkIGxldmVsKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBjaGVja0JyYW5jaFRhcmdldChjb25zdCBDb250cm9sVHlwZSYpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5KGNvbnN0IENvbnRyb2xUeXBlJik7CiAK
ICNkZWZpbmUgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyZXN1bHQsIHdoYXQp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkoKSwgImNhbid0IHBvcCBlbXB0eSBz
dGFjayBpbiAiIHdoYXQpOyBcCkBAIC05NCwxOCArMTE5LDM5IEBAIHByaXZhdGU6CiAgICAgfSB3
aGlsZSAoMCkKIAogICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiB1bmFyeUNhc2UoKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiB1bmFyeUNhc2UoVHlwZSByZXR1cm5UeXBlLCBUeXBlIG9wZXJhbmRUeXBlKTsKIAog
ICAgIHRlbXBsYXRlPE9wVHlwZT4KLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBiaW5hcnlDYXNlKCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYmlu
YXJ5Q2FzZShUeXBlIHJldHVyblR5cGUsIFR5cGUgbGhzVHlwZSwgVHlwZSByaHNUeXBlKTsKKwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHN0b3JlKFR5cGUgbWVtb3J5VHlw
ZSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gbG9hZChUeXBlIG1lbW9y
eVR5cGUpOwogCiAjZGVmaW5lIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZF9leHByZXNzaW9u
KSBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKG1fY29udGV4dC5hZGRfZXhwcmVzc2lvbikKIAor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgorICAgIE5FVkVSX0lOTElORSBVbmV4cGVj
dGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiB2YWxpZGF0aW9uRmFpbChjb25zdCBBcmdzJi4u
LiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEZhaWx1cmVIZWxw
ZXI7IC8vIFNlZSBBREwgY29tbWVudCBpbiBXYXNtUGFyc2VyLmguCisgICAgICAgIGlmIChVTkxJ
S0VMWSghQVNTRVJUX0RJU0FCTEVEICYmIE9wdGlvbnM6OmNyYXNoT25GYWlsZWRXZWJBc3NlbWJs
eVZhbGlkYXRlKCkpKQorICAgICAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKKworICAgICAg
ICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgIG91dC5wcmludCgiV2ViQXNzZW1ibHku
TW9kdWxlIGRvZXNuJ3QgdmFsaWRhdGU6ICJfcywgYXJncy4uLik7CisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkUmVzdWx0KG91dC50b1N0cmluZygpKTsKKyAgICB9CisKKyNkZWZpbmUgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRihjb25kaXRpb24sIC4uLikgZG8geyBcCisgICAgICAgIGlmIChVTkxJ
S0VMWShjb25kaXRpb24pKSBcCisgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbkZhaWwoX19W
QV9BUkdTX18pOyBcCisgICAgfSB3aGlsZSAoMCkgXAorCiAgICAgLy8gRklYTUUgYWRkIGEgbWFj
cm8gYXMgYWJvdmUgZm9yIFdBU01fVFJZX0FQUEVORF9UT19DT05UUk9MX1NUQUNLIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4NjIKIAogICAgIENvbnRleHQmIG1f
Y29udGV4dDsKICAgICBTdGFjayBtX2V4cHJlc3Npb25TdGFjazsKLSAgICBWZWN0b3I8Q29udHJv
bEVudHJ5PiBtX2NvbnRyb2xTdGFjazsKKyAgICBDb250cm9sU3RhY2sgbV9jb250cm9sU3RhY2s7
CisgICAgVmVjdG9yPFR5cGUsIDE2PiBtX2xvY2FsczsKICAgICBjb25zdCBTaWduYXR1cmUmIG1f
c2lnbmF0dXJlOwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CiAKQEAgLTEz
Niw2ICsxODIsMTAgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2UoKSAtPiBS
ZXN1bHQKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1f
c2lnbmF0dXJlKSwgImNhbid0IGFkZCAiLCBtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIg
YXJndW1lbnRzIHRvIEZ1bmN0aW9uIik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIobG9jYWxHcm91cHNDb3VudCksICJjYW4ndCBnZXQgbG9jYWwgZ3JvdXBzIGNvdW50
Iik7CiAKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNp
dHkobV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yIGZ1bmN0aW9uJ3MgIiwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFy
Z3VtZW50cyIpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3NpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKG1fc2ln
bmF0dXJlLmFyZ3VtZW50KGkpKTsKKwogICAgIHVpbnQ2NF90IHRvdGFsTnVtYmVyT2ZMb2NhbHMg
PSBtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IGxvY2FsR3JvdXBzQ291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZkxv
Y2FsczsKQEAgLTE0NSw2ICsxOTUsMTEgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2UoKSAtPiBSZXN1bHQKICAgICAgICAgdG90YWxOdW1iZXJPZkxvY2FscyArPSBudW1iZXJP
ZkxvY2FsczsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0b3RhbE51bWJlck9mTG9jYWxz
ID4gbWF4RnVuY3Rpb25Mb2NhbHMsICJGdW5jdGlvbidzIG51bWJlciBvZiBsb2NhbHMgaXMgdG9v
IGJpZyAiLCB0b3RhbE51bWJlck9mTG9jYWxzLCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25Mb2Nh
bHMpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZSh0eXBlT2ZM
b2NhbCksICJjYW4ndCBnZXQgRnVuY3Rpb24gbG9jYWwncyB0eXBlIGluIGdyb3VwICIsIGkpOwor
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0
eSh0b3RhbE51bWJlck9mTG9jYWxzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9y
IGZ1bmN0aW9uJ3MgIiwgdG90YWxOdW1iZXJPZkxvY2FscywgIiBsb2NhbHMiKTsKKyAgICAgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mTG9jYWxzOyArK2kpCisgICAgICAgICAg
ICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQodHlwZU9mTG9jYWwpOworCiAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZExvY2FsKHR5cGVPZkxvY2FsLCBudW1iZXJPZkxvY2Fscykp
OwogICAgIH0KIApAQCAtMTg2LDMxICsyNDEsMTA0IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OnBhcnNlQm9keSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KIHRlbXBsYXRlPE9wVHlwZSBvcD4KLWF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OmJpbmFyeUNhc2UoKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpiaW5hcnlDYXNlKFR5cGUgcmV0dXJuVHlwZSwgVHlwZSBsaHNUeXBlLCBUeXBlIHJo
c1R5cGUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBFeHByZXNzaW9uVHlwZSByaWdodDsKLSAg
ICBFeHByZXNzaW9uVHlwZSBsZWZ0OwotICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKKyAgICBU
eXBlZEV4cHJlc3Npb24gcmlnaHQ7CisgICAgVHlwZWRFeHByZXNzaW9uIGxlZnQ7CiAKICAgICBX
QVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHJpZ2h0LCAiYmluYXJ5IHJpZ2h0Iik7
CiAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhsZWZ0LCAiYmluYXJ5IGxl
ZnQiKTsKLSAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVCh0ZW1wbGF0ZSBhZGRPcDxvcD4obGVm
dCwgcmlnaHQsIHJlc3VsdCkpOwogCi0gICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3Vs
dCk7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihsZWZ0LnR5cGUoKSAhPSBsaHNUeXBlLCBv
cCwgIiBsZWZ0IHZhbHVlIHR5cGUgbWlzbWF0Y2giKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKHJpZ2h0LnR5cGUoKSAhPSByaHNUeXBlLCBvcCwgIiByaWdodCB2YWx1ZSB0eXBlIG1pc21h
dGNoIik7CisKKyAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CisgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQodGVtcGxhdGUgYWRkT3A8b3A+KGxlZnQsIHJpZ2h0LCByZXN1bHQpKTsKKyAgICBt
X2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcmVzdWx0KTsK
ICAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogdGVtcGxh
dGU8T3BUeXBlIG9wPgotYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5hcnlDYXNlKCkg
LT4gUGFydGlhbFJlc3VsdAorYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5hcnlDYXNl
KFR5cGUgcmV0dXJuVHlwZSwgVHlwZSBvcGVyYW5kVHlwZSkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOwotICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLQor
ICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1ZTsKICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9T
VEFDS19JTlRPKHZhbHVlLCAidW5hcnkiKTsKKworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
dmFsdWUudHlwZSgpICE9IG9wZXJhbmRUeXBlLCBvcCwgIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7
CisKKyAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQodGVtcGxhdGUgYWRkT3A8b3A+KHZhbHVlLCByZXN1bHQpKTsKKyAgICBtX2V4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcmVzdWx0KTsKKyAgICByZXR1cm4g
eyB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorYXV0byBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6bG9hZChUeXBlIG1lbW9yeVR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFtX2luZm8ubWVtb3J5LCAibG9hZCBpbnN0cnVjdGlv
biB3aXRob3V0IG1lbW9yeSIpOworCisgICAgdWludDMyX3QgYWxpZ25tZW50OworICAgIHVpbnQz
Ml90IG9mZnNldDsKKyAgICBUeXBlZEV4cHJlc3Npb24gcG9pbnRlcjsKKyAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhbGlnbm1lbnQpLCAiY2FuJ3QgZ2V0IGxvYWQgYWxp
Z25tZW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cy
QWxpZ25tZW50KG1fY3VycmVudE9wY29kZSksICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFs
aWdubWVudCwgIiBleGNlZWRzIGxvYWQncyBuYXR1cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8IG1l
bW9yeUxvZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bjb2RlKSk7CisgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBsb2FkIG9mZnNldCIpOwor
ICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8ocG9pbnRlciwgImxvYWQgcG9p
bnRlciIpOworCisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihwb2ludGVyLnR5cGUoKSAhPSBJ
MzIsIG1fY3VycmVudE9wY29kZSwgIiBwb2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKKworICAgIEV4
cHJlc3Npb25UeXBlIHJlc3VsdDsKKyAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChsb2FkKHN0
YXRpY19jYXN0PExvYWRPcFR5cGU+KG1fY3VycmVudE9wY29kZSksIHBvaW50ZXIsIHJlc3VsdCwg
b2Zmc2V0KSk7CisgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKG1lbW9y
eVR5cGUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29udGV4dD4KK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnN0b3JlKFR5cGUgbWVtb3J5
VHlwZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIW1f
aW5mby5tZW1vcnksICJzdG9yZSBpbnN0cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOworCisgICAg
dWludDMyX3QgYWxpZ25tZW50OworICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICBUeXBlZEV4cHJl
c3Npb24gdmFsdWU7CisgICAgVHlwZWRFeHByZXNzaW9uIHBvaW50ZXI7CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBzdG9yZSBh
bGlnbm1lbnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFsaWdubWVudCA+IG1lbW9yeUxv
ZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bjb2RlKSwgImJ5dGUgYWxpZ25tZW50ICIsIDF1bGwgPDwg
YWxpZ25tZW50LCAiIGV4Y2VlZHMgc3RvcmUncyBuYXR1cmFsIGFsaWdubWVudCAiLCAxdWxsIDw8
IG1lbW9yeUxvZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bjb2RlKSk7CisgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBzdG9yZSBvZmZzZXQi
KTsKKyAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUg
dmFsdWUiKTsKKyAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBvaW50ZXIs
ICJzdG9yZSBwb2ludGVyIik7CisKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHBvaW50ZXIu
dHlwZSgpICE9IEkzMiwgbV9jdXJyZW50T3Bjb2RlLCAiIHBvaW50ZXIgdHlwZSBtaXNtYXRjaCIp
OworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWUudHlwZSgpICE9IG1lbW9yeVR5cGUs
IG1fY3VycmVudE9wY29kZSwgIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7CisKKyAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChzdG9yZShzdGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4obV9jdXJyZW50
T3Bjb2RlKSwgcG9pbnRlciwgdmFsdWUsIG9mZnNldCkpOworICAgIHJldHVybiB7IH07Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CithdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpjaGVja0JyYW5jaFRhcmdldChjb25zdCBDb250cm9sVHlwZSYgdGFyZ2V0KSAtPiBQYXJ0aWFs
UmVzdWx0Cit7CisgICAgaWYgKCF0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3Rh
Y2suc2l6ZSgpIDwgdGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCksIENvbnRyb2xUeXBlOjppc1Rv
cExldmVsKHRhcmdldCkgPyAiYnJhbmNoIG91dCBvZiBmdW5jdGlvbiIgOiAiYnJhbmNoIHRvIGJs
b2NrIiwgIiBvbiBleHByZXNzaW9uIHN0YWNrIG9mIHNpemUgIiwgbV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpLCAiLCBidXQgYmxvY2ssICIsIHRhcmdldC5zaWduYXR1cmUoKS0+dG9TdHJpbmcoKSAs
ICIgZXhwZWN0cyAiLCB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSwgIiB2YWx1ZXMiKTsKKwor
CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gdGFyZ2V0
LmJyYW5jaFRhcmdldEFyaXR5KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdl
dC5icmFuY2hUYXJnZXRBcml0eSgpOyArK2kpCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIWlzU3VidHlwZSh0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgbV9leHByZXNzaW9uU3Rh
Y2tbb2Zmc2V0ICsgaV0udHlwZSgpKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgaXMgbm90IGEgc3Vi
dHlwZSBvZiBibG9jaydzIHR5cGUgYnJhbmNoIHRhcmdldCB0eXBlLiBTdGFjayB2YWx1ZSBoYXMg
dHlwZSIsIG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSwgIiBidXQgYnJhbmNo
IHRhcmdldCBleHBlY3RzIGEgdmFsdWUgd2l0aCBzdWJ0eXBlIG9mICIsIHRhcmdldC5icmFuY2hU
YXJnZXRUeXBlKGkpLCAiIGF0IGluZGV4ICIsIGkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KK2F1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnVuaWZ5KGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sRGF0YSkgLT4gUGFydGlhbFJlc3VsdAor
eworICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29udHJvbERhdGEuc2lnbmF0dXJlKCktPnJl
dHVybkNvdW50KCkgIT0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIGJsb2NrIHdpdGggdHlw
ZTogIiwgY29udHJvbERhdGEuc2lnbmF0dXJlKCktPnRvU3RyaW5nKCksICIgcmV0dXJuczogIiwg
Y29udHJvbERhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCksICIgYnV0IHN0YWNrIGhhczog
IiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytp
KQorICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUobV9leHByZXNzaW9u
U3RhY2tbaV0udHlwZSgpLCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSks
ICJjb250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZS4gIiwgbV9leHByZXNz
aW9uU3RhY2tbaV0udHlwZSgpLCAiIGlzIG5vdCBhIHN1YnR5cGUgb2YgIiwgY29udHJvbERhdGEu
c2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSkpOwogCi0gICAgbV9leHByZXNzaW9uU3RhY2suYXBw
ZW5kKHJlc3VsdCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMjE4LDg1ICszNDYsNjYgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBzd2l0Y2ggKG1fY3Vy
cmVudE9wY29kZSkgewotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jKSBj
YXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIGJpbmFyeUNhc2U8T3BUeXBlOjpuYW1lPigpOworI2Rl
ZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjNvcCwgaW5jLCBsaHNUeXBlLCByaHNUeXBlLCBy
ZXR1cm5UeXBlKSBjYXNlIE9wVHlwZTo6bmFtZTogcmV0dXJuIGJpbmFyeUNhc2U8T3BUeXBlOjpu
YW1lPihyZXR1cm5UeXBlLCBsaHNUeXBlLCByaHNUeXBlKTsKICAgICBGT1JfRUFDSF9XQVNNX0JJ
TkFSWV9PUChDUkVBVEVfQ0FTRSkKICN1bmRlZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFU
RV9DQVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gdW5h
cnlDYXNlPE9wVHlwZTo6bmFtZT4oKTsKKyNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIz
b3AsIGluYywgb3BlcmFuZFR5cGUsIHJldHVyblR5cGUpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1
cm4gdW5hcnlDYXNlPE9wVHlwZTo6bmFtZT4ocmV0dXJuVHlwZSwgb3BlcmFuZFR5cGUpOwogICAg
IEZPUl9FQUNIX1dBU01fVU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAjdW5kZWYgQ1JFQVRFX0NBU0UK
IAogICAgIGNhc2UgU2VsZWN0OiB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsK
LSAgICAgICAgRXhwcmVzc2lvblR5cGUgemVybzsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgbm9u
WmVybzsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIGNvbmRpdGlvbjsKKyAgICAgICAgVHlwZWRF
eHByZXNzaW9uIHplcm87CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBub25aZXJvOwogCiAgICAg
ICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8oY29uZGl0aW9uLCAic2VsZWN0
IGNvbmRpdGlvbiIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KHplcm8sICJzZWxlY3QgemVybyIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9T
VEFDS19JTlRPKG5vblplcm8sICJzZWxlY3Qgbm9uLXplcm8iKTsKIAorICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKGNvbmRpdGlvbi50eXBlKCkgIT0gSTMyLCAic2VsZWN0IGNvbmRpdGlv
biBtdXN0IGJlIGkzMiwgZ290ICIsIGNvbmRpdGlvbi50eXBlKCkpOworICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKG5vblplcm8udHlwZSgpICE9IHplcm8udHlwZSgpLCAic2VsZWN0IHJl
c3VsdCB0eXBlcyBtdXN0IG1hdGNoLCBnb3QgIiwgbm9uWmVyby50eXBlKCksICIgYW5kICIsIHpl
cm8udHlwZSgpKTsKKwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZFNlbGVjdChjb25kaXRpb24sIG5vblplcm8sIHplcm8s
IHJlc3VsdCkpOwogCi0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoemVyby50eXBlKCks
IHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0jZGVmaW5lIENSRUFURV9D
QVNFKG5hbWUsIGlkLCBiM29wLCBpbmMpIGNhc2UgT3BUeXBlOjpuYW1lOgotICAgIEZPUl9FQUNI
X1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NBU0UpIHsKLSAgICAgICAgdWludDMyX3QgYWxp
Z25tZW50OwotICAgICAgICB1aW50MzJfdCBvZmZzZXQ7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBl
IHBvaW50ZXI7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKLSAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBsb2Fk
IGFsaWdubWVudCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFsaWdubWVudCA+IG1l
bW9yeUxvZzJBbGlnbm1lbnQobV9jdXJyZW50T3Bjb2RlKSwgImJ5dGUgYWxpZ25tZW50ICIsIDF1
bGwgPDwgYWxpZ25tZW50LCAiIGV4Y2VlZHMgbG9hZCdzIG5hdHVyYWwgYWxpZ25tZW50ICIsIDF1
bGwgPDwgbWVtb3J5TG9nMkFsaWdubWVudChtX2N1cnJlbnRPcGNvZGUpKTsKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIob2Zmc2V0KSwgImNhbid0IGdldCBsb2Fk
IG9mZnNldCIpOwotICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHBv
aW50ZXIsICJsb2FkIHBvaW50ZXIiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
bG9hZChzdGF0aWNfY2FzdDxMb2FkT3BUeXBlPihtX2N1cnJlbnRPcGNvZGUpLCBwb2ludGVyLCBy
ZXN1bHQsIG9mZnNldCkpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0
KTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUs
IGlkLCBiM29wLCBpbmMsIG1lbW9yeVR5cGUpIGNhc2UgT3BUeXBlOjpuYW1lOiByZXR1cm4gbG9h
ZChtZW1vcnlUeXBlKTsKK0ZPUl9FQUNIX1dBU01fTUVNT1JZX0xPQURfT1AoQ1JFQVRFX0NBU0Up
CisjdW5kZWYgQ1JFQVRFX0NBU0UKIAotICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09Q
KENSRUFURV9DQVNFKSB7Ci0gICAgICAgIHVpbnQzMl90IGFsaWdubWVudDsKLSAgICAgICAgdWlu
dDMyX3Qgb2Zmc2V0OwotICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKLSAgICAgICAgRXhw
cmVzc2lvblR5cGUgcG9pbnRlcjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoYWxpZ25tZW50KSwgImNhbid0IGdldCBzdG9yZSBhbGlnbm1lbnQiKTsKLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhbGlnbm1lbnQgPiBtZW1vcnlMb2cyQWxpZ25tZW50KG1f
Y3VycmVudE9wY29kZSksICJieXRlIGFsaWdubWVudCAiLCAxdWxsIDw8IGFsaWdubWVudCwgIiBl
eGNlZWRzIHN0b3JlJ3MgbmF0dXJhbCBhbGlnbm1lbnQgIiwgMXVsbCA8PCBtZW1vcnlMb2cyQWxp
Z25tZW50KG1fY3VycmVudE9wY29kZSkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihvZmZzZXQpLCAiY2FuJ3QgZ2V0IHN0b3JlIG9mZnNldCIpOwotICAgICAg
ICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic3RvcmUgdmFsdWUi
KTsKLSAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhwb2ludGVyLCAi
c3RvcmUgcG9pbnRlciIpOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChzdG9yZShz
dGF0aWNfY2FzdDxTdG9yZU9wVHlwZT4obV9jdXJyZW50T3Bjb2RlKSwgcG9pbnRlciwgdmFsdWUs
IG9mZnNldCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KKyNkZWZpbmUgQ1JFQVRFX0NB
U0UobmFtZSwgaWQsIGIzb3AsIGluYywgbWVtb3J5VHlwZSkgY2FzZSBPcFR5cGU6Om5hbWU6IHJl
dHVybiBzdG9yZShtZW1vcnlUeXBlKTsKK0ZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENS
RUFURV9DQVNFKQogI3VuZGVmIENSRUFURV9DQVNFCiAKICAgICBjYXNlIEYzMkNvbnN0OiB7CiAg
ICAgICAgIHVpbnQzMl90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVVJbnQzMihjb25zdGFudCksICJjYW4ndCBwYXJzZSAzMi1iaXQgZmxvYXRpbmctcG9pbnQg
Y29uc3RhbnQiKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5h
ZGRDb25zdGFudChGMzIsIGNvbnN0YW50KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNv
bnN0cnVjdEFuZEFwcGVuZChGMzIsIG1fY29udGV4dC5hZGRDb25zdGFudChGMzIsIGNvbnN0YW50
KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBJMzJDb25zdDogewog
ICAgICAgICBpbnQzMl90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhckludDMyKGNvbnN0YW50KSwgImNhbid0IHBhcnNlIDMyLWJpdCBjb25zdGFudCIpOwot
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50KEkz
MiwgY29uc3RhbnQpKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBw
ZW5kKEkzMiwgbV9jb250ZXh0LmFkZENvbnN0YW50KEkzMiwgY29uc3RhbnQpKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIEY2NENvbnN0OiB7CiAgICAgICAgIHVpbnQ2
NF90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVVJbnQ2NChj
b25zdGFudCksICJjYW4ndCBwYXJzZSA2NC1iaXQgZmxvYXRpbmctcG9pbnQgY29uc3RhbnQiKTsK
LSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFudChG
NjQsIGNvbnN0YW50KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFw
cGVuZChGNjQsIG1fY29udGV4dC5hZGRDb25zdGFudChGNjQsIGNvbnN0YW50KSk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2FzZSBJNjRDb25zdDogewogICAgICAgICBpbnQ2
NF90IGNvbnN0YW50OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhckludDY0
KGNvbnN0YW50KSwgImNhbid0IHBhcnNlIDY0LWJpdCBjb25zdGFudCIpOwotICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50KEk2NCwgY29uc3RhbnQp
KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKEk2NCwgbV9j
b250ZXh0LmFkZENvbnN0YW50KEk2NCwgY29uc3RhbnQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKQEAgLTMwNCwxMCArNDEzLDE2IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlSZWZlcmVuY2VzKCksICJyZWZlcmVu
Y2VzIGFyZSBub3QgZW5hYmxlZCIpOwogICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4OwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNh
bid0IHBhcnNlIHRhYmxlIGluZGV4Iik7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCwg
aW5kZXg7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFibGVJbmRleCA+PSBtX2lu
Zm8udGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBpcyBpbnZhbGlk
LCBsaW1pdCBpcyAiLCBtX2luZm8udGFibGVDb3VudCgpKTsKKworICAgICAgICBUeXBlZEV4cHJl
c3Npb24gaW5kZXg7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
aW5kZXgsICJ0YWJsZS5nZXQiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihJMzIg
IT0gaW5kZXgudHlwZSgpLCAidGFibGUuZ2V0IGluZGV4IHRvIHR5cGUgIiwgaW5kZXgudHlwZSgp
LCAiIGV4cGVjdGVkICIsIEkzMik7CisKKyAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0Owog
ICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUYWJsZUdldCh0YWJsZUluZGV4LCBp
bmRleCwgcmVzdWx0KSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQp
OworICAgICAgICBUeXBlIHJlc3VsdFR5cGUgPSBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndh
c21UeXBlKCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChy
ZXN1bHRUeXBlLCByZXN1bHQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMzE1
LDEwICs0MzAsMTUgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRp
b25zOjp1c2VXZWJBc3NlbWJseVJlZmVyZW5jZXMoKSwgInJlZmVyZW5jZXMgYXJlIG5vdCBlbmFi
bGVkIik7CiAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXg7CiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgcGFyc2UgdGFibGUg
aW5kZXgiKTsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgdmFsLCBpbmRleDsKLSAgICAgICAgV0FT
TV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWwsICJ0YWJsZS5zZXQiKTsKKyAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1faW5mby50YWJsZUNvdW50
KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIs
IG1faW5mby50YWJsZUNvdW50KCkpOworICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUsIGlu
ZGV4OworICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAi
dGFibGUuc2V0Iik7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8o
aW5kZXgsICJ0YWJsZS5zZXQiKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
VGFibGVTZXQodGFibGVJbmRleCwgaW5kZXgsIHZhbCkpOworICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKEkzMiAhPSBpbmRleC50eXBlKCksICJ0YWJsZS5zZXQgaW5kZXggdG8gdHlwZSAi
LCBpbmRleC50eXBlKCksICIgZXhwZWN0ZWQgIiwgSTMyKTsKKyAgICAgICAgVHlwZSB0eXBlID0g
bV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpOworICAgICAgICBXQVNNX1ZBTElE
QVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUodmFsdWUudHlwZSgpLCB0eXBlKSwgInRhYmxlLnNldCB2
YWx1ZSB0byB0eXBlICIsIHZhbHVlLnR5cGUoKSwgIiBleHBlY3RlZCAiLCB0eXBlKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFi
bGVFbGVtZW50VHlwZTo6QW55cmVmIHx8IG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgp
ID09IFRhYmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRUYWJsZVNldCh0YWJsZUluZGV4LCBpbmRleCwgdmFsdWUpKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTMyOCwyNyArNDQ4LDM5IEBAIGF1dG8gRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChleHRPcCksICJjYW4ndCBwYXJzZSB0
YWJsZSBleHRlbmRlZCBvcGNvZGUiKTsKICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleDsKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJj
YW4ndCBwYXJzZSB0YWJsZSBpbmRleCIpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KHRhYmxlSW5kZXggPj0gbV9pbmZvLnRhYmxlQ291bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxl
SW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwgbV9pbmZvLnRhYmxlQ291bnQoKSk7CiAK
ICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxFeHRUYWJsZU9wVHlwZT4oZXh0T3ApKSB7CiAg
ICAgICAgIGNhc2UgRXh0VGFibGVPcFR5cGU6OlRhYmxlU2l6ZTogewogICAgICAgICAgICAgRXhw
cmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkVGFibGVTaXplKHRhYmxlSW5kZXgsIHJlc3VsdCkpOwotICAgICAgICAgICAgbV9leHByZXNz
aW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5j
b25zdHJ1Y3RBbmRBcHBlbmQoSTMyLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBFeHRUYWJsZU9wVHlwZTo6VGFibGVHcm93OiB7Ci0gICAgICAg
ICAgICBFeHByZXNzaW9uVHlwZSBmaWxsLCBkZWx0YSwgcmVzdWx0OworICAgICAgICAgICAgVHlw
ZWRFeHByZXNzaW9uIGZpbGw7CisgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gZGVsdGE7CiAg
ICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGRlbHRhLCAidGFi
bGUuZ3JvdyIpOwogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5U
TyhmaWxsLCAidGFibGUuZ3JvdyIpOworCisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFpc1N1YnR5cGUoZmlsbC50eXBlKCksIG1faW5mby50YWJsZXNbdGFibGVJbmRleF0ud2Fz
bVR5cGUoKSksICJ0YWJsZS5ncm93IGV4cGVjdHMgZmlsbCB2YWx1ZSBvZiB0eXBlICIsIG1faW5m
by50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKSwgIiBnb3QgIiwgZmlsbC50eXBlKCkpOwor
ICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihJMzIgIT0gZGVsdGEudHlwZSgpLCAi
dGFibGUuZ3JvdyBleHBlY3RzIGFuIGkzMiBkZWx0YSB2YWx1ZSwgZ290ICIsIGRlbHRhLnR5cGUo
KSk7CisKKyAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAgICAgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlR3Jvdyh0YWJsZUluZGV4LCBmaWxsLCBkZWx0
YSwgcmVzdWx0KSk7Ci0gICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJMzIs
IHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4
dFRhYmxlT3BUeXBlOjpUYWJsZUZpbGw6IHsKLSAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIG9m
ZnNldCwgZmlsbCwgY291bnQ7CisgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gb2Zmc2V0LCBm
aWxsLCBjb3VudDsKICAgICAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lO
VE8oY291bnQsICJ0YWJsZS5maWxsIik7CiAgICAgICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVT
U0lPTl9TVEFDS19JTlRPKGZpbGwsICJ0YWJsZS5maWxsIik7CiAgICAgICAgICAgICBXQVNNX1RS
WV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKG9mZnNldCwgInRhYmxlLmZpbGwiKTsKKworICAg
ICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGZpbGwudHlwZSgpLCBt
X2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkpLCAidGFibGUuZmlsbCBleHBlY3Rz
IGZpbGwgdmFsdWUgb2YgdHlwZSAiLCBtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBl
KCksICIgZ290ICIsIGZpbGwudHlwZSgpKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoSTMyICE9IG9mZnNldC50eXBlKCksICJ0YWJsZS5maWxsIGV4cGVjdHMgYW4gaTMyIG9m
ZnNldCB2YWx1ZSwgZ290ICIsIG9mZnNldC50eXBlKCkpOworICAgICAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihJMzIgIT0gY291bnQudHlwZSgpLCAidGFibGUuZmlsbCBleHBlY3RzIGFu
IGkzMiBjb3VudCB2YWx1ZSwgZ290ICIsIGNvdW50LnR5cGUoKSk7CisKICAgICAgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZFRhYmxlRmlsbCh0YWJsZUluZGV4LCBvZmZzZXQsIGZp
bGwsIGNvdW50KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYxLDE2ICs0
OTMsMTggQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkg
LT4gUGFydGlhbFJlc3VsdAogCiAgICAgY2FzZSBSZWZOdWxsOiB7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5UmVmZXJlbmNlcygpLCAicmVmZXJl
bmNlcyBhcmUgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5k
KG1fY29udGV4dC5hZGRDb25zdGFudChGdW5jcmVmLCBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChGdW5jcmVm
LCBtX2NvbnRleHQuYWRkQ29uc3RhbnQoRnVuY3JlZiwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgUmVmSXNOdWxsOiB7
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5UmVm
ZXJlbmNlcygpLCAicmVmZXJlbmNlcyBhcmUgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgRXhwcmVz
c2lvblR5cGUgcmVzdWx0LCB2YWx1ZTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlOwog
ICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAicmVmLmlz
X251bGwiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKHZhbHVl
LnR5cGUoKSwgQW55cmVmKSwgInJlZi5pc19udWxsIHRvIHR5cGUgIiwgdmFsdWUudHlwZSgpLCAi
IGV4cGVjdGVkICIsIEFueXJlZik7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdDsKICAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkUmVmSXNOdWxsKHZhbHVlLCByZXN1bHQp
KTsKLSAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChJMzIsIHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zODAsOCArNTE0LDEwIEBAIGF1dG8gRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlSZWZlcmVuY2Vz
KCksICJyZWZlcmVuY2VzIGFyZSBub3QgZW5hYmxlZCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHJlZi5m
dW5jIik7CiAKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2luZm8u
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAicmVmLmZ1bmMgaW5kZXggIiwgaW5kZXgsICIgaXMg
dG9vIGxhcmdlLCBtYXggaXMgIiwgbV9pbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Cisg
ICAgICAgIG1faW5mby5hZGRSZWZlcmVuY2VkRnVuY3Rpb24oaW5kZXgpOwogICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZWZGdW5jKGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0
YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChGdW5jcmVmLCByZXN1bHQpOwogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIApAQCAtMzg5LDE2ICs1MjUsMTggQEAgYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICB1aW50
MzJfdCBpbmRleDsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRleCksICJjYW4ndCBnZXQgaW5kZXgg
Zm9yIGdldF9sb2NhbCIpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49
IG1fbG9jYWxzLnNpemUoKSwgImF0dGVtcHQgdG8gdXNlIHVua25vd24gbG9jYWwgIiwgaW5kZXgs
ICIgbGFzdCBvbmUgaXMgIiwgbV9sb2NhbHMuc2l6ZSgpKTsKICAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoZ2V0TG9jYWwoaW5kZXgsIHJlc3VsdCkpOwotICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3Ry
dWN0QW5kQXBwZW5kKG1fbG9jYWxzW2luZGV4XSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4
OwotICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKKyAgICAgICAgVHlwZWRFeHByZXNzaW9u
IHZhbHVlOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihpbmRl
eCksICJjYW4ndCBnZXQgaW5kZXggZm9yIHNldF9sb2NhbCIpOwogICAgICAgICBXQVNNX1RSWV9Q
T1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic2V0X2xvY2FsIik7CisgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZS50eXBlKCksIG1fbG9jYWxzW2lu
ZGV4XSksICJzZXRfbG9jYWwgdG8gdHlwZSAiLCB2YWx1ZS50eXBlKCksICIgZXhwZWN0ZWQgIiwg
bV9sb2NhbHNbaW5kZXhdKTsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9j
YWwoaW5kZXgsIHZhbHVlKSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNDA3LDcg
KzU0NSw5IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigp
IC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0IGdldCBpbmRleCBm
b3IgdGVlX2xvY2FsIik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9leHByZXNzaW9u
U3RhY2suaXNFbXB0eSgpLCAiY2FuJ3QgdGVlX2xvY2FsIG9uIGVtcHR5IGV4cHJlc3Npb24gc3Rh
Y2siKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIG1f
ZXhwcmVzc2lvblN0YWNrLmxhc3QoKSkpOworICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUg
PSBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCk7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYoIWlzU3VidHlwZSh2YWx1ZS50eXBlKCksIG1fbG9jYWxzW2luZGV4XSksICJzZXRfbG9jYWwg
dG8gdHlwZSAiLCB2YWx1ZS50eXBlKCksICIgZXhwZWN0ZWQgIiwgbV9sb2NhbHNbaW5kZXhdKTsK
KyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoc2V0TG9jYWwoaW5kZXgsIHZhbHVlKSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC00MTUsMTYgKzU1NSwyNyBAQCBhdXRv
IEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVz
dWx0CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1
bHQ7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwg
ImNhbid0IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihpbmRleCA+PSBtX2luZm8uZ2xvYmFscy5zaXplKCksICJnZXRfZ2xvYmFsICIsIGlu
ZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBsaW1pdCBpcyAiLCBtX2luZm8uZ2xvYmFscy5zaXpl
KCkpOworICAgICAgICBUeXBlIHJlc3VsdFR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF0udHlw
ZTsKKyAgICAgICAgQVNTRVJUKGlzVmFsdWVUeXBlKHJlc3VsdFR5cGUpKTsKICAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoZ2V0R2xvYmFsKGluZGV4LCByZXN1bHQpKTsKLSAgICAgICAg
bV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0
YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChyZXN1bHRUeXBlLCByZXN1bHQpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgU2V0R2xvYmFsOiB7CiAgICAgICAgIHVpbnQzMl90
IGluZGV4OwotICAgICAgICBFeHByZXNzaW9uVHlwZSB2YWx1ZTsKKyAgICAgICAgVHlwZWRFeHBy
ZXNzaW9uIHZhbHVlOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
MihpbmRleCksICJjYW4ndCBnZXQgc2V0X2dsb2JhbCdzIGluZGV4Iik7CiAgICAgICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7
CisKKyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+PSBtX2luZm8uZ2xvYmFs
cy5zaXplKCksICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25vd24gZ2xvYmFsLCBsaW1p
dCBpcyAiLCBtX2luZm8uZ2xvYmFscy5zaXplKCkpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKG1faW5mby5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IEdsb2JhbEluZm9ybWF0
aW9uOjpJbW11dGFibGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlzIGltbXV0YWJsZSIpOwor
CisgICAgICAgIFR5cGUgZ2xvYmFsVHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOwor
ICAgICAgICBBU1NFUlQoaXNWYWx1ZVR5cGUoZ2xvYmFsVHlwZSkpOworICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKGdsb2JhbFR5cGUgIT0gdmFsdWUudHlwZSgpLCAic2V0X2dsb2JhbCAi
LCBpbmRleCwgIiB3aXRoIHR5cGUgIiwgZ2xvYmFsVHlwZSwgIiB3aXRoIGEgdmFyaWFibGUgb2Yg
dHlwZSAiLCB2YWx1ZS50eXBlKCkpOworCiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KHNldEdsb2JhbChpbmRleCwgdmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBA
IC00NDIsMTUgKzU5MywyMiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4gYXJnczsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgIiBhcmd1bWVudHMiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJ
bmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBh
cmdzLnVuY2hlY2tlZEFwcGVuZChtX2V4cHJlc3Npb25TdGFjay5hdChpKSk7CisgICAgICAgICAg
ICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQoaSk7CisgICAgICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoYXJnLnR5cGUoKSwgY2FsbGVl
U2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpKSwgImFyZ3VtZW50IHR5
cGUgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIsIGFyZy50eXBlKCksICIsIGV4cGVjdGVkICIsIGNh
bGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KSk7CisgICAgICAg
ICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRp
ZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisKICAgICAg
ICAgUmVzdWx0TGlzdCByZXN1bHRzOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRDYWxsKGZ1bmN0aW9uSW5kZXgsIGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0cykpOwog
Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZFZlY3RvcihyZXN1bHRzKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCkgPT0gcmVzdWx0
cy5zaXplKCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsZWVTaWdu
YXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2su
Y29uc3RydWN0QW5kQXBwZW5kKGNhbGxlZVNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpLCByZXN1bHRz
W2ldKTsKIAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTQ2OSwxOCArNjI3LDI3IEBA
IGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbigpIC0+IFBhcnRp
YWxSZXN1bHQKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBpbmRleC4KICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpLCAiY2FsbF9pbmRpcmVjdCBleHBlY3RzICIsIGFyZ3VtZW50Q291bnQsICIgYXJndW1lbnRz
LCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAorICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKS50eXBlKCkgIT0gSTMyLCAibm9uLWkzMiBjYWxs
X2luZGlyZWN0IGluZGV4ICIsIG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKS50eXBlKCkpOworCiAg
ICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4gYXJnczsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighYXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBhcmd1bWVudENvdW50LCAiIGNhbGxfaW5kaXJl
Y3QgYXJndW1lbnRzIik7CiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCkgLSBhcmd1bWVudENvdW50OwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKG1fZXhwcmVzc2lvblN0YWNr
LmF0KGkpKTsKKyAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25T
dGFjay5hdChpKTsKKyAgICAgICAgICAgIGlmIChpIDwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSkKKyAgICAgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5
cGUoYXJnLnR5cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50
SW5kZXgpKSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIs
IGFyZy50eXBlKCksICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0g
Zmlyc3RBcmd1bWVudEluZGV4KSk7CisgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChh
cmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAg
ICAgIH0KICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRl
eCk7CiAKKworCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkQ2FsbEluZGlyZWN0KHRhYmxlSW5kZXgsIGNhbGxlZVNpZ25hdHVy
ZSwgYXJncywgcmVzdWx0cykpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmRWZWN0
b3IocmVzdWx0cyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxlZVNp
Z25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQoY2FsbGVlU2lnbmF0dXJlLnJldHVyblR5cGUoaSksIHJlc3Vs
dHNbaV0pOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNDg5LDYgKzY1NiwxMyBA
QCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGlu
ZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgYmxvY2sncyBzaWduYXR1cmUiKTsKIAorICAgICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2YWx1ZXMgb24gc3RhY2sgZm9yIGJs
b2NrLiBCbG9jayBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAi
LCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBC
bG9jayBoYXMgaW5saW5lU2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkp
OworICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBp
bmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIFR5cGUgdHlwZSA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KG9mZnNldCArIGkpLnR5cGUo
KTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh0eXBlLCBp
bmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpKSwgIkJsb2NrIGV4cGVjdHMgdGhlIGFyZ3VtZW50
IGF0IGluZGV4IiwgaSwgIiB0byBiZSBhIHN1YnR5cGUgb2YgIiwgaW5saW5lU2lnbmF0dXJlLT5h
cmd1bWVudChpKSwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgdHlwZSk7CisgICAgICAgIH0K
KwogICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAg
ICAgICAgIFN0YWNrIG5ld1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBibG9jazsKQEAgLTUw
NSw2ICs2NzksMTMgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBCbG9ja1NpZ25hdHVyZSBpbmxpbmVTaWdu
YXR1cmU7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlQmxvY2tTaWduYXR1cmUo
bV9pbmZvLCBpbmxpbmVTaWduYXR1cmUpLCAiY2FuJ3QgZ2V0IGxvb3AncyBzaWduYXR1cmUiKTsK
IAorICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUo
KSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2YWx1ZXMgb24g
c3RhY2sgZm9yIGxvb3AgYmxvY2suIExvb3AgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAi
IHdlcmUgcHJlc2VudC4gTG9vcCBoYXMgaW5saW5lU2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1
cmUtPnRvU3RyaW5nKCkpOworICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
OyArK2kpIHsKKyAgICAgICAgICAgIFR5cGUgdHlwZSA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KG9m
ZnNldCArIGkpLnR5cGUoKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZSh0eXBlLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0
cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlIGEgc3VidHlwZSBvZiAiLCBpbmxp
bmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCB0eXBl
KTsKKyAgICAgICAgfQorCiAgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0
YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7CiAgICAgICAgIENvbnRyb2xUeXBl
IGxvb3A7CkBAIC01MTksMTAgKzcwMCwxNiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBjYXNlIElmOiB7CiAg
ICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgRXhwcmVzc2lv
blR5cGUgY29uZGl0aW9uOworICAgICAgICBUeXBlZEV4cHJlc3Npb24gY29uZGl0aW9uOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5s
aW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBpZidzIHNpZ25hdHVyZSIpOwogICAgICAgICBXQVNN
X1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImlmIGNvbmRpdGlvbiIp
OwogCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uLnR5cGUoKSAhPSBJ
MzIsICJpZiBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAiLCBjb25kaXRpb24udHlwZSgpKTsK
KyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkg
PCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9u
IHN0YWNrIGZvciBpZiBibG9jay4gSWYgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdl
cmUgcHJlc2VudC4gSWYgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50
b1N0cmluZygpKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytp
KQorICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKG1fZXhwcmVz
c2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChp
KSksICJMb29wIGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSBhIHN1
YnR5cGUgb2YgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIiBidXQgYXJndW1lbnQg
aGFzIHR5cGUgIiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgpKTsKKwogICAgICAgICBpbnQ2
NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNrIG5l
d1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sOwpAQCAtNTM3LDMyICs3MjQsNDAg
QEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFy
dGlhbFJlc3VsdAogCiAgICAgY2FzZSBFbHNlOiB7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYobV9jb250cm9sU3RhY2suc2l6ZSgpID09IDEsICJjYW4ndCB1c2UgZWxzZSBibG9jayBhdCB0
aGUgdG9wLWxldmVsIG9mIGEgZnVuY3Rpb24iKTsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkRWxzZShtX2NvbnRyb2xTdGFjay5sYXN0KCkuY29udHJvbERhdGEsIG1fZXhwcmVz
c2lvblN0YWNrKSk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0gV1RGTW92ZShtX2NvbnRy
b2xTdGFjay5sYXN0KCkuZWxzZUJsb2NrU3RhY2spOworCisgICAgICAgIENvbnRyb2xFbnRyeSYg
Y29udHJvbEVudHJ5ID0gbV9jb250cm9sU3RhY2subGFzdCgpOworCisgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFModW5pZnkoY29udHJvbEVudHJ5LmNvbnRyb2xEYXRhKSk7CisKKyAg
ICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkRWxzZShjb250cm9sRW50cnkuY29udHJv
bERhdGEsIG1fZXhwcmVzc2lvblN0YWNrKSk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrID0g
V1RGTW92ZShjb250cm9sRW50cnkuZWxzZUJsb2NrU3RhY2spOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIGNhc2UgQnI6CiAgICAgY2FzZSBCcklmOiB7CiAgICAgICAgIHVpbnQz
Ml90IHRhcmdldDsKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uID0gQ29udGV4dDo6
ZW1wdHlFeHByZXNzaW9uKCk7CisgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBjb25kaXRpb247CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhcmdldCksICJjYW4n
dCBnZXQgYnIgLyBicl9pZidzIHRhcmdldCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHRhcmdldCA+PSBtX2NvbnRyb2xTdGFjay5zaXplKCksICJiciAvIGJyX2lmJ3MgdGFyZ2V0ICIs
IHRhcmdldCwgIiBleGNlZWRzIGNvbnRyb2wgc3RhY2sgc2l6ZSAiLCBtX2NvbnRyb2xTdGFjay5z
aXplKCkpOwotICAgICAgICBpZiAobV9jdXJyZW50T3Bjb2RlID09IEJySWYpCisgICAgICAgIGlm
IChtX2N1cnJlbnRPcGNvZGUgPT0gQnJJZikgewogICAgICAgICAgICAgV0FTTV9UUllfUE9QX0VY
UFJFU1NJT05fU1RBQ0tfSU5UTyhjb25kaXRpb24sICJiciAvIGJyX2lmIGNvbmRpdGlvbiIpOwot
ICAgICAgICBlbHNlCisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRpdGlv
bi50eXBlKCkgIT0gSTMyLCAiY29uZGl0aW9uYWwgYnJhbmNoIHdpdGggbm9uLWkzMiBjb25kaXRp
b24gIiwgY29uZGl0aW9uLnR5cGUoKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBt
X3VucmVhY2hhYmxlQmxvY2tzID0gMTsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IFR5cGVkRXhw
cmVzc2lvbiB7IFZvaWQsIENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbigpIH07CisgICAgICAgIH0K
IAogICAgICAgICBDb250cm9sVHlwZSYgZGF0YSA9IG1fY29udHJvbFN0YWNrW21fY29udHJvbFN0
YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNvbnRyb2xEYXRhOwotCisgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMoY2hlY2tCcmFuY2hUYXJnZXQoZGF0YSkpOwogICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChhZGRCcmFuY2goZGF0YSwgY29uZGl0aW9uLCBtX2V4cHJlc3Np
b25TdGFjaykpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2UgQnJUYWJs
ZTogewogICAgICAgICB1aW50MzJfdCBudW1iZXJPZlRhcmdldHM7Ci0gICAgICAgIHVpbnQzMl90
IGRlZmF1bHRUYXJnZXQ7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbjsKKyAgICAg
ICAgdWludDMyX3QgZGVmYXVsdFRhcmdldEluZGV4OworICAgICAgICBUeXBlZEV4cHJlc3Npb24g
Y29uZGl0aW9uOwogICAgICAgICBWZWN0b3I8Q29udHJvbFR5cGUqPiB0YXJnZXRzOwogCiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKG51bWJlck9mVGFyZ2V0cyks
ICJjYW4ndCBnZXQgdGhlIG51bWJlciBvZiB0YXJnZXRzIGZvciBicl90YWJsZSIpOwpAQCAtNTc2
LDE3ICs3NzEsMjkgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNz
aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgdGFyZ2V0cy51bmNoZWNrZWRBcHBl
bmQoJm1fY29udHJvbFN0YWNrW21fY29udHJvbFN0YWNrLnNpemUoKSAtIDEgLSB0YXJnZXRdLmNv
bnRyb2xEYXRhKTsKICAgICAgICAgfQogCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGRlZmF1bHRUYXJnZXQpLCAiY2FuJ3QgZ2V0IGRlZmF1bHQgdGFyZ2V0IGZv
ciBicl90YWJsZSIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQg
Pj0gbV9jb250cm9sU3RhY2suc2l6ZSgpLCAiYnJfdGFibGUncyBkZWZhdWx0IHRhcmdldCAiLCBk
ZWZhdWx0VGFyZ2V0LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29udHJvbFN0
YWNrLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGRlZmF1bHRUYXJnZXRJbmRleCksICJjYW4ndCBnZXQgZGVmYXVsdCB0YXJnZXQgZm9yIGJyX3Rh
YmxlIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZGVmYXVsdFRhcmdldEluZGV4ID49
IG1fY29udHJvbFN0YWNrLnNpemUoKSwgImJyX3RhYmxlJ3MgZGVmYXVsdCB0YXJnZXQgIiwgZGVm
YXVsdFRhcmdldEluZGV4LCAiIGV4Y2VlZHMgY29udHJvbCBzdGFjayBzaXplICIsIG1fY29udHJv
bFN0YWNrLnNpemUoKSk7CisgICAgICAgIENvbnRyb2xUeXBlJiBkZWZhdWx0VGFyZ2V0ID0gbV9j
b250cm9sU3RhY2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRJbmRl
eF0uY29udHJvbERhdGE7CiAKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyhjb25kaXRpb24sICJicl90YWJsZSBjb25kaXRpb24iKTsKLSAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkU3dpdGNoKGNvbmRpdGlvbiwgdGFyZ2V0cywgbV9jb250cm9sU3Rh
Y2tbbV9jb250cm9sU3RhY2suc2l6ZSgpIC0gMSAtIGRlZmF1bHRUYXJnZXRdLmNvbnRyb2xEYXRh
LCBtX2V4cHJlc3Npb25TdGFjaykpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNv
bmRpdGlvbi50eXBlKCkgIT0gSTMyLCAiYnJfdGFibGUgd2l0aCBub24taTMyIGNvbmRpdGlvbiAi
LCBjb25kaXRpb24udHlwZSgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGFyZ2V0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQ29udHJvbFR5cGUqIHRhcmdldCA9
IHRhcmdldHNbaV07CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGRlZmF1bHRU
YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSAhPSB0YXJnZXQtPmJyYW5jaFRhcmdldEFyaXR5KCks
ICJicl90YWJsZSB0YXJnZXQgdHlwZSBzaXplIG1pc21hdGNoLiBEZWZhdWx0IGhhcyBzaXplOiAi
LCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCksICJidXQgdGFyZ2V0OiAiLCBpLCAi
IGhhcyBzaXplOiAiLCB0YXJnZXQtPmJyYW5jaFRhcmdldEFyaXR5KCkpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB0eXBlID0gMDsgdHlwZSA8IGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0
QXJpdHkoKTsgKyt0eXBlKQorICAgICAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
IWlzU3VidHlwZShkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldFR5cGUodHlwZSksIHRhcmdldC0+
YnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSksICJicl90YWJsZSB0YXJnZXQgdHlwZSBtaXNtYXRjaCBh
dCBvZmZzZXQgIiwgdHlwZSwgIiBleHBlY3RlZDogIiwgZGVmYXVsdFRhcmdldC5icmFuY2hUYXJn
ZXRUeXBlKHR5cGUpLCAiIGJ1dCBzYXc6ICIsIHRhcmdldC0+YnJhbmNoVGFyZ2V0VHlwZSh0eXBl
KSwgIiB3aGVuIHRhcmdldGluZyBibG9jazogIiwgdGFyZ2V0LT5zaWduYXR1cmUoKS0+dG9TdHJp
bmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGNo
ZWNrQnJhbmNoVGFyZ2V0KGRlZmF1bHRUYXJnZXQpKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQoYWRkU3dpdGNoKGNvbmRpdGlvbiwgdGFyZ2V0cywgZGVmYXVsdFRhcmdldCwgbV9l
eHByZXNzaW9uU3RhY2spKTsKIAogICAgICAgICBtX3VucmVhY2hhYmxlQmxvY2tzID0gMTsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIFJldHVybjogeworICAgICAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGNoZWNrQnJhbmNoVGFyZ2V0KG1fY29udHJvbFN0YWNr
WzBdLmNvbnRyb2xEYXRhKSk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFJl
dHVybihtX2NvbnRyb2xTdGFja1swXS5jb250cm9sRGF0YSwgbV9leHByZXNzaW9uU3RhY2spKTsK
ICAgICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CiAgICAgICAgIHJldHVybiB7IH07CkBA
IC01OTQsMTMgKzgwMSwxNSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBjYXNlIEVuZDogewogICAgICAgICBD
b250cm9sRW50cnkgZGF0YSA9IG1fY29udHJvbFN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIGlm
IChtX2NvbnRleHQuaXNDb250cm9sVHlwZUlmKGRhdGEuY29udHJvbERhdGEpKSB7CisgICAgICAg
IGlmIChDb250cm9sVHlwZTo6aXNJZihkYXRhLmNvbnRyb2xEYXRhKSkgeworICAgICAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1bmlmeShkYXRhLmNvbnRyb2xEYXRhKSk7CiAgICAg
ICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlKGRhdGEuY29udHJvbERhdGEs
IG1fZXhwcmVzc2lvblN0YWNrKSk7CiAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjayA9IFdU
Rk1vdmUoZGF0YS5lbHNlQmxvY2tTdGFjayk7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6
IFRoaXMgaXMgYSBsaXR0bGUgd2VpcmQgaW4gdGhhdCBpdCB3aWxsIG1vZGlmeSB0aGUgZXhwcmVz
c2lvblN0YWNrIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBibG9jay4KICAgICAgICAgLy8gVGhhdCdz
IGEgbGl0dGxlIHRvbyBlZmZlY3RmdWwgZm9yIG1lIGJ1dCBJIGRvbid0IGhhdmUgYSBiZXR0ZXIg
QVBJIHJpZ2h0IG5vdy4KICAgICAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY0MzUzCisgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMo
dW5pZnkoZGF0YS5jb250cm9sRGF0YSkpOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChlbmRCbG9jayhkYXRhLCBtX2V4cHJlc3Npb25TdGFjaykpOwogICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5zd2FwKGRhdGEuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2spOwogICAgICAgICByZXR1
cm4geyB9OwpAQCAtNjMwLDEyICs4MzksMTMgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0
Pjo6cGFyc2VFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQxKHJlc2VydmVkKSwgImNhbid0IHBhcnNlIHJlc2VydmVk
IHZhclVpbnQxIGZvciBncm93X21lbW9yeSIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KHJlc2VydmVkICE9IDAsICJyZXNlcnZlZCB2YXJVaW50MSBmb3IgZ3Jvd19tZW1vcnkgbXVzdCBi
ZSB6ZXJvIik7CiAKLSAgICAgICAgRXhwcmVzc2lvblR5cGUgZGVsdGE7CisgICAgICAgIFR5cGVk
RXhwcmVzc2lvbiBkZWx0YTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tf
SU5UTyhkZWx0YSwgImV4cGVjdCBhbiBpMzIgYXJndW1lbnQgdG8gZ3Jvd19tZW1vcnkgb24gdGhl
IHN0YWNrIik7CisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZGVsdGEudHlwZSgpICE9
IEkzMiwgImdyb3dfbWVtb3J5IHdpdGggbm9uLWkzMiBkZWx0YSBhcmd1bWVudCBoYXMgdHlwZTog
IiwgZGVsdGEudHlwZSgpKTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQ7CiAgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEdyb3dNZW1vcnkoZGVsdGEsIHJlc3VsdCkp
OwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKEkzMiwgcmVzdWx0KTsKIAogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KQEAgLTY0OSw3ICs4NTksNyBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAg
ICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0OwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRDdXJyZW50TWVtb3J5KHJlc3VsdCkpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5h
cHBlbmQocmVzdWx0KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBw
ZW5kKEkzMiwgcmVzdWx0KTsKIAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTY2NCw3
ICs4NzQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogYXV0byBGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgQVNTRVJUKG1fdW5yZWFjaGFibGVCbG9ja3MpOwotI2RlZmluZSBDUkVBVEVfQ0FT
RShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIE9wVHlwZTo6bmFtZToKKyNkZWZpbmUgQ1JFQVRF
X0NBU0UobmFtZSwgLi4uKSBjYXNlIE9wVHlwZTo6bmFtZToKICAgICBzd2l0Y2ggKG1fY3VycmVu
dE9wY29kZSkgewogICAgIGNhc2UgRWxzZTogewogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJs
b2NrcyA+IDEpCkBAIC02ODAsOSArODkwLDEwIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgIGNh
c2UgRW5kOiB7CiAgICAgICAgIGlmIChtX3VucmVhY2hhYmxlQmxvY2tzID09IDEpIHsKICAgICAg
ICAgICAgIENvbnRyb2xFbnRyeSBkYXRhID0gbV9jb250cm9sU3RhY2sudGFrZUxhc3QoKTsKLSAg
ICAgICAgICAgIGlmIChtX2NvbnRleHQuaXNDb250cm9sVHlwZUlmKGRhdGEuY29udHJvbERhdGEp
KSB7CisgICAgICAgICAgICBpZiAoQ29udHJvbFR5cGU6OmlzSWYoZGF0YS5jb250cm9sRGF0YSkp
IHsKICAgICAgICAgICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRFbHNlVG9VbnJl
YWNoYWJsZShkYXRhLmNvbnRyb2xEYXRhKSk7CiAgICAgICAgICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2sgPSBXVEZNb3ZlKGRhdGEuZWxzZUJsb2NrU3RhY2spOworICAgICAgICAgICAgICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFModW5pZnkoZGF0YS5jb250cm9sRGF0YSkpOwogICAgICAg
ICAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGVuZEJsb2NrKGRhdGEsIG1fZXhwcmVz
c2lvblN0YWNrKSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRFbmRUb1VucmVhY2hhYmxlKGRhdGEpKTsKQEAgLTgxNCw0ICsx
MDI1LDggQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4
cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKKyN1bmRlZiBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPCisjdW5kZWYgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQKKyN1bmRlZiBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGCisKICNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAppbmRleCBhZDM2Mzk4Y2IyNGY0NDc0YWI4YzBh
N2Y4MWI0OTA3MWM3Y2Q0Yjk2Li43M2ZmMjM5ZjBkZTEwYjQ4ZTExZDQ3YmEyYjNmMDZiMWJkYWNj
YzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVy
YXRvci5jcHAKQEAgLTQ5LDggKzQ5LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIGNsYXNzIExMSW50R2VuZXJhdG9yIDogcHVibGljIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxH
ZW5lcmF0b3JUcmFpdHM+IHsKIHB1YmxpYzoKICAgICB1c2luZyBFeHByZXNzaW9uVHlwZSA9IFZp
cnR1YWxSZWdpc3RlcjsKLSAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNz
aW9uVHlwZSwgMT47Ci0gICAgdXNpbmcgU3RhY2sgPSBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE2
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz47CiAKICAgICBzdHJ1Y3QgQ29udHJvbExvb3AgIHsKICAg
ICAgICAgUmVmPExhYmVsPiBtX2JvZHk7CkBAIC03NCwxNCArNzIsMTQgQEAgcHVibGljOgogICAg
ICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGJv
ZHksIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24pCisgICAgICAgIHN0YXRpYyBDb250cm9s
VHlwZSB0b3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6
ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3Zl
KGJvZHkpIH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3Rh
Y2tTaXplLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xUb3BMZXZlbCB7IH0pOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIHRvcExldmVsKEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWZQdHI8TGFiZWw+JiYgY29udGlu
dWF0aW9uKQorICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGJvZHksIFJlZlB0cjxM
YWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250
cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250
cm9sVG9wTGV2ZWwgeyB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1
cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRp
bnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9KTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBibG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUs
IHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKQEAgLTk0
LDYgKzkyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWdu
YXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNv
bnRpbnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1vdmUoYWx0ZXJuYXRlKSB9KTsKICAgICAgICAg
fQogCisgICAgICAgIHN0YXRpYyBib29sIGlzSWYoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wp
IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbElmPihjb250cm9sKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBpc1RvcExldmVsKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9s
KSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xUb3BMZXZlbD4oY29udHJv
bCk7IH0KKworICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0
YWNrU2l6ZTsgfQorICAgICAgICBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3NpZ25hdHVyZTsgfQorCiAgICAgICAgIFJlZlB0cjxMYWJlbD4gdGFyZ2V0TGFiZWxG
b3JCcmFuY2goKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oKnRoaXMpKQpAQCAtMTAxLDE0ICsxMDUsMjAgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIG1fY29udGludWF0aW9uOwogICAgICAgICB9CiAKLSAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICBTaWduYXR1cmVBcmdD
b3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPigqdGhpcykpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbV9zaWduYXR1cmUtPnJldHVybkNvdW50KCk7CiAgICAgICAgIH0KIAotICAgICAgICB1
bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2l6ZTsgfQorICAgICAg
ICBUeXBlIGJyYW5jaFRhcmdldFR5cGUodW5zaWduZWQgaSkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBicmFuY2hUYXJnZXRBcml0eSgpKTsKKyAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPigqdGhpcykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudChpKTsKKyAgICAgICAgICAgIHJldHVy
biBtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEJsb2Nr
U2lnbmF0dXJlIG1fc2lnbmF0dXJlOwogICAgICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKQEAg
LTEyNywxNCArMTM3LDE1IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIEVycm9yVHlwZSA9IFN0cmlu
ZzsKICAgICB1c2luZyBQYXJ0aWFsUmVzdWx0ID0gRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPjsK
LSAgICB1c2luZyBSZXN1bHRMaXN0ID0gRXhwcmVzc2lvbkxpc3Q7CiAgICAgdXNpbmcgVW5leHBl
Y3RlZFJlc3VsdCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKIAogICAgIHVzaW5nIENvbnRyb2xF
bnRyeSA9IEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPjo6Q29udHJvbEVudHJ5OworICAg
IHVzaW5nIENvbnRyb2xTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPjo6Q29u
dHJvbFN0YWNrOworICAgIHVzaW5nIFJlc3VsdExpc3QgPSBGdW5jdGlvblBhcnNlcjxMTEludEdl
bmVyYXRvcj46OlJlc3VsdExpc3Q7CisgICAgdXNpbmcgU3RhY2sgPSBGdW5jdGlvblBhcnNlcjxM
TEludEdlbmVyYXRvcj46OlN0YWNrOworICAgIHVzaW5nIFR5cGVkRXhwcmVzc2lvbiA9IEZ1bmN0
aW9uUGFyc2VyPExMSW50R2VuZXJhdG9yPjo6VHlwZWRFeHByZXNzaW9uOwogCi0gICAgTExJbnRH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBmaW5hbGl6ZSgpOworICAgIHN0YXRpYyBFeHByZXNz
aW9uVHlwZSBlbXB0eUV4cHJlc3Npb24oKSB7IHJldHVybiB7IH07IH07CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CkBAIC0xNDMsNiArMTU0
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmlu
ZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhh
cmdzKS4uLikpOwogICAgIH0KIAorICAgIExMSW50R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGZpbmFsaXplKCk7CisKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeHByZXNzaW9uTGlzdEEsIHR5cGVuYW1lIEV4cHJlc3Npb25MaXN0
Qj4KICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0QSYg
ZGVzdGluYXRpb25zLCBjb25zdCBFeHByZXNzaW9uTGlzdEImIHZhbHVlcykKICAgICB7CkBAIC0x
NjcsMTAgKzE4Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2so
KSB7IC0tbV9zdGFja1NpemU7IH0KIAotICAgIHN0YXRpYyBFeHByZXNzaW9uVHlwZSBlbXB0eUV4
cHJlc3Npb24oKSB7IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIgeyB9OyB9OwotICAgIFN0YWNrIGNy
ZWF0ZVN0YWNrKCkgeyByZXR1cm4gU3RhY2soKTsgfQotICAgIGJvb2wgaXNDb250cm9sVHlwZUlm
KGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPENvbnRyb2xJZj4oY29udHJvbCk7IH0KLQogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhw
cmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgaW50NjRfdCk7CkBAIC0yMjMsMTUgKzIzNCwx
NSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9w
TGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJik7CiAKICAgICAvLyBDYWxscwotICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25MaXN0JiByZXN1bHRzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdHMp
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3Qg
Y2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwog
CiAgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nTG9jYWxzKCk7CiAKICAgICB2b2lkIHNldFBhcnNl
cihGdW5jdGlvblBhcnNlcjxMTEludEdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBh
cnNlcjsgfTsKIAotICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYsIGNv
bnN0IFN0YWNrKikgeyB9CisgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNvbnN0
IFN0YWNrKikgeyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIEdlbmVyaWNMYWJlbDxXYXNtOjpH
ZW5lcmF0b3JUcmFpdHM+OwpAQCAtMjM5LDggKzI1MCw4IEBAIHByaXZhdGU6CiAgICAgc3RydWN0
IExMSW50Q2FsbEluZm9ybWF0aW9uIHsKICAgICAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQ7CiAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tBcmd1bWVudHM7Ci0gICAgICAgIEV4cHJlc3Np
b25MaXN0IGFyZ3VtZW50czsKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHByZXNz
aW9uTGlzdCYpPiBjb21taXRSZXN1bHRzOworICAgICAgICBSZXN1bHRMaXN0IGFyZ3VtZW50czsK
KyAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXN1bHRMaXN0Jik+IGNvbW1pdFJlc3Vs
dHM7CiAgICAgfTsKIAogICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbkZv
ckNhbGxlcihjb25zdCBTaWduYXR1cmUmKTsKQEAgLTI4Miw4ICsyOTMsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZ2V0RHJvcEtlZXBDb3VudChjb25zdCBDb250cm9sVHlwZSYgdGFyZ2V0LCB1bnNp
Z25lZCYgc3RhcnRPZmZzZXQsIHVuc2lnbmVkJiBkcm9wLCB1bnNpZ25lZCYga2VlcCkKICAgICB7
CiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGFyZ2V0LnN0YWNrU2l6ZSgpICsgMTsKLSAgICAgICAg
a2VlcCA9IHRhcmdldC50YXJnZXRBcml0eSgpOwotICAgICAgICBkcm9wID0gbV9zdGFja1NpemUg
LSB0YXJnZXQuc3RhY2tTaXplKCkgLSB0YXJnZXQudGFyZ2V0QXJpdHkoKTsKKyAgICAgICAga2Vl
cCA9IHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOworICAgICAgICBkcm9wID0gbV9zdGFja1Np
emUgLSB0YXJnZXQuc3RhY2tTaXplKCkgLSB0YXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKTsKICAg
ICB9CiAKICAgICB2b2lkIGRyb3BLZWVwKFN0YWNrJiB2YWx1ZXMsIGNvbnN0IENvbnRyb2xUeXBl
JiB0YXJnZXQsIGJvb2wgZHJvcFZhbHVlcykKQEAgLTM1MiwzMiArMzYzLDMxIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
ICAgICB3YWxrRXhwcmVzc2lvblN0YWNrKGV4cHJlc3Npb25TdGFjaywgWyZdKFZpcnR1YWxSZWdp
c3RlciYgZXhwcmVzc2lvbiwgVmlydHVhbFJlZ2lzdGVyIHNsb3QpIHsKLSAgICAgICAgICAgIEFT
U0VSVChleHByZXNzaW9uID09IHNsb3QgfHwgZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkgfHwgZXhw
cmVzc2lvbi5pc0FyZ3VtZW50KCkgfHwgZXhwcmVzc2lvbi50b0xvY2FsKCkgPCBtX2NvZGVCbG9j
ay0+bV9udW1WYXJzKTsKLSAgICAgICAgICAgIGlmIChleHByZXNzaW9uID09IHNsb3QpCisgICAg
ICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZXhwcmVzc2lvblN0YWNrLCBbJl0oVHlwZWRFeHByZXNz
aW9uJiBleHByZXNzaW9uLCBWaXJ0dWFsUmVnaXN0ZXIgc2xvdCkgeworICAgICAgICAgICAgQVNT
RVJUKGV4cHJlc3Npb24udmFsdWUoKSA9PSBzbG90IHx8IGV4cHJlc3Npb24udmFsdWUoKS5pc0Nv
bnN0YW50KCkgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlzQXJndW1lbnQoKSB8fCBleHByZXNzaW9u
LnZhbHVlKCkudG9Mb2NhbCgpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFycyk7CisgICAgICAgICAg
ICBpZiAoZXhwcmVzc2lvbi52YWx1ZSgpID09IHNsb3QpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCBzbG90LCBleHByZXNzaW9uKTsKLSAg
ICAgICAgICAgIGV4cHJlc3Npb24gPSBzbG90OworICAgICAgICAgICAgZXhwcmVzc2lvbiA9IFR5
cGVkRXhwcmVzc2lvbiB7IGV4cHJlc3Npb24udHlwZSgpLCBzbG90IH07CiAgICAgICAgIH0pOwog
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogCi0gICAgU3RhY2sgc3BsaXRTdGFj
ayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBzdGFjaykKKyAgICB2b2lkIHNwbGl0
U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIFN0
YWNrJiBuZXdTdGFjaykKICAgICB7Ci0gICAgICAgIFN0YWNrIHJlc3VsdCA9IEpTQzo6V2FzbTo6
c3BsaXRTdGFjayhzaWduYXR1cmUsIHN0YWNrKTsKKyAgICAgICAgSlNDOjpXYXNtOjpzcGxpdFN0
YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKIAotICAgICAgICBtX3N0
YWNrU2l6ZSAtPSByZXN1bHQuc2l6ZSgpOworICAgICAgICBtX3N0YWNrU2l6ZSAtPSBuZXdTdGFj
ay5zaXplKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgd2Fsa0V4cHJl
c3Npb25TdGFjayhzdGFjaywgWyZdKFZpcnR1YWxSZWdpc3RlciYgZXhwcmVzc2lvbiwgVmlydHVh
bFJlZ2lzdGVyIHNsb3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChleHByZXNzaW9uID09IHNsb3Qg
fHwgZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkgfHwgZXhwcmVzc2lvbi5pc0FyZ3VtZW50KCkgfHwg
ZXhwcmVzc2lvbi50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKLSAgICAgICAg
ICAgIGlmIChleHByZXNzaW9uID09IHNsb3QgfHwgZXhwcmVzc2lvbi5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHdhbGtFeHByZXNzaW9uU3RhY2soZW5jbG9zaW5nU3RhY2ssIFsmXShUeXBlZEV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7CisgICAgICAgICAgICBB
U1NFUlQoZXhwcmVzc2lvbi52YWx1ZSgpID09IHNsb3QgfHwgZXhwcmVzc2lvbi52YWx1ZSgpLmlz
Q29uc3RhbnQoKSB8fCBleHByZXNzaW9uLnZhbHVlKCkuaXNBcmd1bWVudCgpIHx8IGV4cHJlc3Np
b24udmFsdWUoKS50b0xvY2FsKCkgPCBtX2NvZGVCbG9jay0+bV9udW1WYXJzKTsKKyAgICAgICAg
ICAgIGlmIChleHByZXNzaW9uLnZhbHVlKCkgPT0gc2xvdCB8fCBleHByZXNzaW9uLnZhbHVlKCku
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIFdhc21N
b3Y6OmVtaXQodGhpcywgc2xvdCwgZXhwcmVzc2lvbik7Ci0gICAgICAgICAgICBleHByZXNzaW9u
ID0gc2xvdDsKKyAgICAgICAgICAgIGV4cHJlc3Npb24gPSBUeXBlZEV4cHJlc3Npb24geyBleHBy
ZXNzaW9uLnR5cGUoKSwgc2xvdCB9OwogICAgICAgICB9KTsKICAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgICAgICBtX3N0YWNrU2l6ZSArPSByZXN1bHQuc2l6ZSgpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICBtX3N0YWNrU2l6ZSArPSBuZXdTdGFjay5zaXplKCk7CiAg
ICAgfQogCiAgICAgc3RydWN0IFN3aXRjaEVudHJ5IHsKQEAgLTM5OCwyMyArNDA4LDIzIEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxMYWJlbCosIFZlY3RvcjxTd2l0Y2hFbnRyeT4+IG1fc3dpdGNo
ZXM7CiAgICAgRXhwcmVzc2lvblR5cGUgbV9qc051bGxDb25zdGFudDsKICAgICBFeHByZXNzaW9u
VHlwZSBtX3plcm9Db25zdGFudDsKLSAgICBFeHByZXNzaW9uTGlzdCBtX3VuaXRpYWxpemVkTG9j
YWxzOworICAgIFJlc3VsdExpc3QgbV91bml0aWFsaXplZExvY2FsczsKICAgICBIYXNoTWFwPEVu
Y29kZWRKU1ZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIsIFdURjo6SW50SGFzaDxFbmNvZGVkSlNWYWx1
ZT4sIENvbnN0YW50TWFwSGFzaFRyYWl0cz4gbV9jb25zdGFudE1hcDsKICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCAyPiBtX3Jlc3VsdHM7CiAgICAgdW5zaWduZWQgbV9zdGFja1NpemUgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9tYXhTdGFja1NpemUgeyAwIH07CiB9OwogCi1FeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdWludDMyX3QgZnVuY3Rpb25JbmRleCkK
IHsKLSAgICBMTEludEdlbmVyYXRvciBsbGludEdlbmVyYXRvcihpbmZvLCBmdW5jdGlvbkluZGV4
LCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgTExJbnRHZW5lcmF0b3IgbGxp
bnRHZW5lcmF0b3IoaW5mbywgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlv
blBhcnNlcjxMTEludEdlbmVyYXRvcj4gcGFyc2VyKGxsaW50R2VuZXJhdG9yLCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIAogICAgIHJldHVybiBsbGludEdlbmVyYXRv
ci5maW5hbGl6ZSgpOwogfQogCi1MTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRocm93V2Fz
bUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpCitMTEludEdl
bmVyYXRvcjo6TExJbnRHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpCiAgICAgOiBCeXRlY29kZUdl
bmVyYXRvckJhc2UobWFrZVVuaXF1ZTxGdW5jdGlvbkNvZGVCbG9jaz4oZnVuY3Rpb25JbmRleCks
IDApCiAgICAgLCBtX2luZm8oaW5mbykKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbklu
ZGV4KQpAQCAtNDIzLDkgKzQzMyw2IEBAIExMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JCiAgICAgbV9z
dGFja1NpemUgPSBudW1iZXJPZkxMSW50Q2FsbGVlU2F2ZVJlZ2lzdGVyczsKICAgICBtX21heFN0
YWNrU2l6ZSA9IG51bWJlck9mTExJbnRDYWxsZWVTYXZlUmVnaXN0ZXJzOwogCi0gICAgaWYgKHRo
cm93V2FzbUV4Y2VwdGlvbikKLSAgICAgICAgVGh1bmtzOjpzaW5nbGV0b24oKS5zZXRUaHJvd1dh
c21FeGNlcHRpb24odGhyb3dXYXNtRXhjZXB0aW9uKTsKLQogICAgIFdhc21FbnRlcjo6ZW1pdCh0
aGlzKTsKIH0KIApAQCAtNTE4LDggKzUyNSw4IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJ
bmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAg
ICAgICAgIG1fbWF4U3RhY2tTaXplID0gbV9zdGFja1NpemU7CiAKIAotICAgIEV4cHJlc3Npb25M
aXN0IGFyZ3VtZW50cyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKLSAgICBFeHByZXNzaW9u
TGlzdCB0ZW1wb3JhcnlSZXN1bHRzKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpKTsKKyAgICBSZXN1
bHRMaXN0IGFyZ3VtZW50cyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBSZXN1bHRM
aXN0IHRlbXBvcmFyeVJlc3VsdHMoc2lnbmF0dXJlLnJldHVybkNvdW50KCkpOwogCiAgICAgY29u
c3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBtX3N0YWNrU2l6ZTsKICAgICBjb25zdCB1bnNpZ25l
ZCBiYXNlID0gc3RhY2tPZmZzZXQgLSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVyczsK
QEAgLTU4Myw3ICs1OTAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogCiAgICAgbV9zdGFj
a1NpemUgPSBpbml0aWFsU3RhY2tTaXplOwogCi0gICAgYXV0byBjb21taXRSZXN1bHRzID0gW3Ro
aXMsIHRlbXBvcmFyeVJlc3VsdHMgPSBXVEZNb3ZlKHRlbXBvcmFyeVJlc3VsdHMpXShFeHByZXNz
aW9uTGlzdCYgcmVzdWx0cykgeworICAgIGF1dG8gY29tbWl0UmVzdWx0cyA9IFt0aGlzLCB0ZW1w
b3JhcnlSZXN1bHRzID0gV1RGTW92ZSh0ZW1wb3JhcnlSZXN1bHRzKV0oUmVzdWx0TGlzdCYgcmVz
dWx0cykgewogICAgICAgICBmb3IgKGF1dG8gdGVtcG9yYXJ5UmVzdWx0IDogdGVtcG9yYXJ5UmVz
dWx0cykgewogICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gcHVzaCgpOwogICAg
ICAgICAgICAgV2FzbU1vdjo6ZW1pdCh0aGlzLCByZXN1bHQsIHRlbXBvcmFyeVJlc3VsdCk7CkBA
IC02ODksMTYgKzY5NiwxNSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBtX2NvZGVCbG9jay0+bV9udW1WYXJzICs9IGNvdW50OwotICAgIHdoaWxlIChj
b3VudC0tKSB7Ci0gICAgICAgIGF1dG8gbG9jYWwgPSBwdXNoKCk7Ci0gICAgICAgIHN3aXRjaCAo
dHlwZSkgewotICAgICAgICBjYXNlIFR5cGU6OkFueXJlZjoKLSAgICAgICAgY2FzZSBUeXBlOjpG
dW5jcmVmOgotICAgICAgICAgICAgbV91bml0aWFsaXplZExvY2Fscy5hcHBlbmQobG9jYWwpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZTo6QW55cmVmOgor
ICAgIGNhc2UgVHlwZTo6RnVuY3JlZjoKKyAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAg
ICAgICBtX3VuaXRpYWxpemVkTG9jYWxzLmFwcGVuZChwdXNoKCkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBtX3N0YWNrU2l6ZSArPSBjb3VudDsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiB7IH07CiB9CkBAIC03NTAsMTEgKzc1NiwxMSBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUg
dmFsdWUpIC0+IFBhcnRpYWxSZQogICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JXYXNtTG9jYWwoaW5kZXgpOwogCiAgICAgLy8gSWYgdGhpcyBsb2NhbCBpcyBj
dXJyZW50bHkgb24gdGhlIHN0YWNrIHdlIG5lZWQgdG8gbWF0ZXJpYWxpemUgaXQsIG90aGVyd2lz
ZSBpdCdsbCBzZWUgdGhlIG5ldyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSBvbGQgb25lCi0gICAgd2Fs
a0V4cHJlc3Npb25TdGFjayhtX3BhcnNlci0+ZXhwcmVzc2lvblN0YWNrKCksIFsmXShWaXJ0dWFs
UmVnaXN0ZXImIGV4cHJlc3Npb24sIFZpcnR1YWxSZWdpc3RlciBzbG90KSB7Ci0gICAgICAgIGlm
IChleHByZXNzaW9uICE9IHRhcmdldCkKKyAgICB3YWxrRXhwcmVzc2lvblN0YWNrKG1fcGFyc2Vy
LT5leHByZXNzaW9uU3RhY2soKSwgWyZdKFR5cGVkRXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVmly
dHVhbFJlZ2lzdGVyIHNsb3QpIHsKKyAgICAgICAgaWYgKGV4cHJlc3Npb24udmFsdWUoKSAhPSB0
YXJnZXQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFdhc21Nb3Y6OmVtaXQodGhpcywg
c2xvdCwgZXhwcmVzc2lvbik7Ci0gICAgICAgIGV4cHJlc3Npb24gPSBzbG90OworICAgICAgICBl
eHByZXNzaW9uID0gVHlwZWRFeHByZXNzaW9uIHsgZXhwcmVzc2lvbi50eXBlKCksIHNsb3QgfTsK
ICAgICB9KTsKIAogICAgIFdhc21Nb3Y6OmVtaXQodGhpcywgdGFyZ2V0LCB2YWx1ZSk7CkBAIC04
MDAsNyArODA2LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFIKIAogYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdT
dGFjaywgQ29udHJvbFR5cGUmIGJsb2NrLCBTdGFjayYgbmV3U3RhY2ssIHVpbnQzMl90IGxvb3BJ
bmRleCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWdu
YXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9z
aW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExvY2Fscyhu
ZXdTdGFjayk7CiAKICAgICBSZWY8TGFiZWw+IGJvZHkgPSBuZXdFbWl0dGVkTGFiZWwoKTsKQEAg
LTgxOSw3ICs4MjUsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRMb29wKEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDbwogICAgICAgICBvc3JFbnRy
eURhdGEuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGNvbnRyb2xJbmRleCA9IDA7IGNvbnRyb2xJbmRleCA8IG1fcGFyc2VyLT5jb250cm9sU3Rh
Y2soKS5zaXplKCk7ICsrY29udHJvbEluZGV4KSB7CiAgICAgICAgIFN0YWNrJiBleHByZXNzaW9u
U3RhY2sgPSBtX3BhcnNlci0+Y29udHJvbFN0YWNrKClbY29udHJvbEluZGV4XS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjazsKLSAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogZXhwcmVzc2lv
blN0YWNrKQorICAgICAgICBmb3IgKFR5cGVkRXhwcmVzc2lvbiBleHByZXNzaW9uIDogZXhwcmVz
c2lvblN0YWNrKQogICAgICAgICAgICAgb3NyRW50cnlEYXRhLmFwcGVuZChleHByZXNzaW9uKTsK
ICAgICB9CiAKQEAgLTgzNyw3ICs4NDMsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRUb3BM
ZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpIC0+IENvbnRyb2xUeXBlCiAKIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdTdGFjaykgLT4g
UGFydGlhbFJlc3VsdAogewotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVu
Y2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ss
IG5ld1N0YWNrKTsKICAgICBuZXdCbG9jayA9IENvbnRyb2xUeXBlOjpibG9jayhzaWduYXR1cmUs
IG1fc3RhY2tTaXplLCBuZXdMYWJlbCgpKTsKICAgICByZXR1cm4geyB9OwogfQpAQCAtODQ3LDcg
Kzg1Myw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZElmKEV4cHJlc3Npb25UeXBlIGNvbmRp
dGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTCiAgICAgUmVmPExhYmVsPiBhbHRlcm5h
dGUgPSBuZXdMYWJlbCgpOwogICAgIFJlZjxMYWJlbD4gY29udGludWF0aW9uID0gbmV3TGFiZWwo
KTsKIAotICAgIG5ld1N0YWNrID0gc3BsaXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNr
KTsKKyAgICBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsK
IAogICAgIFdhc21KZmFsc2U6OmVtaXQodGhpcywgY29uZGl0aW9uLCBhbHRlcm5hdGUtPmJpbmQo
dGhpcykpOwogCkBAIC05NjcsOCArOTczLDExIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVu
ZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlCiAg
ICAgICAgIC8vIHNpbmNlIHRoZXkgbWlnaHQgbm90IGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiB2
YWx1ZXMgaW4gdGhlIGV4cHJlc3Npb24gc3RhY2suCiAgICAgICAgIC8vIEluc3RlYWQsIHdlIGRv
IGEgc3RyaWN0ZXIgY29uc2lzdGVuY3kgY2hlY2sgYmVsb3cuCiAgICAgICAgIGF1dG8gdG1wID0g
cHVzaChOb0NvbnNpc3RlbmN5Q2hlY2spOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGV4cHJlc3Np
b25TdGFjaywgdW5yZWFjaGFibGUgfHwgdG1wID09IGV4cHJlc3Npb25TdGFja1tpXSk7Ci0gICAg
ICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZCh0bXApOworICAgICAgICBB
U1NFUlQodW5yZWFjaGFibGUgfHwgdG1wID09IGV4cHJlc3Npb25TdGFja1tpXS52YWx1ZSgpKTsK
KyAgICAgICAgaWYgKHVucmVhY2hhYmxlKQorICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHBy
ZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEubV9zaWduYXR1cmUtPnJldHVyblR5
cGUoaSksIHRtcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhw
cmVzc2lvblN0YWNrLmFwcGVuZChleHByZXNzaW9uU3RhY2tbaV0pOwogICAgIH0KIAogICAgIGlm
IChtX2xhc3RPcGNvZGVJRCA9PSB3YXNtX2ptcCAmJiBkYXRhLm1fY29udGludWF0aW9uLT51bnJl
c29sdmVkSnVtcHMoKS5zaXplKCkgPT0gMSAmJiBkYXRhLm1fY29udGludWF0aW9uLT51bnJlc29s
dmVkSnVtcHMoKVswXSA9PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbGFzdEluc3RydWN0aW9uLm9mZnNl
dCgpKSkgewpAQCAtOTk2LDcgKzEwMDUsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjplbmRUb3BM
ZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IFN0YWNrJiBleHByZXNzaQogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25MaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogICAgIExMSW50Q2FsbEluZm9y
bWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKQEAgLTEw
MTAsNyArMTAxOSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBM
TEludEdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1
bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUg
Y2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKaW5kZXggZWQ1MDc4YmVjOWFiMzQzNzQ4OTcy
ZjQ3ODFlZjk5MDQxNzM3OWNmZi4uODljZGM3MTBmMThhMjk1MjA0YjQ3YjAxNzIyNDAwZTk1NTRm
NDcxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2Vu
ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJh
dG9yLmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
IAogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3Qg
dWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRy
KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2ln
bmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcAppbmRleCBiY2VlYjI4NmJhM2NiMzE5N2ViZmI4MGI0
ZTVlZjUxNmZhYjRkNTlhLi5jYWU1N2VkMTMwZWY2ZWI2Mzc1ZjAyMzNlOTUxNzUyZWZiYzBiYWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCeXRl
Y29kZUR1bXBlci5oIgogI2luY2x1ZGUgIkNhbGxlZUJpdHMuaCIKKyNpbmNsdWRlICJKU1RvV2Fz
bS5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIldhc21DYWxsZWUuaCIKQEAgLTQ0LDYgKzQ1LDIyIEBAIG5hbWVzcGFjZSBXYXNt
TExJbnRQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCitMTEludFBsYW46OkxMSW50UGxhbihDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhf
dD4mJiBzb3VyY2UsIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAg
OiBCYXNlKGNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgd29yaywgV1RGTW92ZSh0YXNrKSkKK3sK
KyAgICBpZiAocGFyc2VBbmRWYWxpZGF0ZU1vZHVsZShtX3NvdXJjZS5kYXRhKCksIG1fc291cmNl
LnNpemUoKSkpCisgICAgICAgIHByZXBhcmUoKTsKK30KKworTExJbnRQbGFuOjpMTEludFBsYW4o
Q29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBjb25zdCBSZWY8
TExJbnRDYWxsZWU+KiBjYWxsZWVzLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCisgICAgOiBCYXNl
KGNvbnRleHQsIFdURk1vdmUoaW5mbyksIEFzeW5jV29yazo6RnVsbENvbXBpbGUsIFdURk1vdmUo
dGFzaykpCisgICAgLCBtX2NhbGxlZXMoY2FsbGVlcykKK3sKKyAgICBBU1NFUlQobV9jYWxsZWVz
KTsKKyAgICBwcmVwYXJlKCk7CisgICAgbV9jdXJyZW50SW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOworfQorCiBib29sIExMSW50UGxhbjo6cHJlcGFyZUltcGwo
KQogewogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uczsKQEAgLTYyLDEwICs3OSw5IEBAIHZvaWQgTExJbnRQbGFuOjpjb21waWxlRnVuY3Rp
b24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCkgKyBm
dW5jdGlvbkluZGV4OwogICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7Ci0gICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkp
OwogCiAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvZGVCbG9jaz4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlQnl0ZWNvZGUoZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIGZ1bmN0aW9uSW5k
ZXgsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db2RlQmxvY2s+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZUJ5dGVjb2RlKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNp
emUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBmdW5jdGlvbkluZGV4
KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CkBAIC03OCw0MSArOTQsMTUgQEAgdm9p
ZCBMTEludFBsYW46OmNvbXBpbGVGdW5jdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAg
IH0KIAogICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92
ZSgqcGFyc2VBbmRDb21waWxlUmVzdWx0KTsKLQotICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25J
bmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1fbW9kdWxlSW5mb3JtYXRpb24tPnJl
ZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlvbkluZGV4KSkgewotICAgICAgICBF
bWJlZGVyVG9XYXNtRnVuY3Rpb24gZW50cnk7Ci0gICAgICAgIGVudHJ5LmppdCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOwotICAgICAgICBlbnRyeS5mdW5jdGlvbiA9IG1fY3JlYXRlRW1i
ZWRkZXJXcmFwcGVyKCplbnRyeS5qaXQsIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwg
ZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
LSAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMu
YWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW50cnkpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9CiB9CiAKIHZvaWQgTExJbnRQbGFu
OjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiB7
Ci0gICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCk7IGZ1bmN0aW9uSW5kZXgrKykgewot
ICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAg
ICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOwotCi0gICAgICAgIGlmIChhdXRvIGl0ID0gbV9lbWJlZGRlclRv
V2FzbUludGVybmFsRnVuY3Rpb25zLmZpbmQoZnVuY3Rpb25JbmRleCk7IGl0ICE9IG1fZW1iZWRk
ZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCppdC0+dmFsdWUuaml0LCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpIHsKLSAgICAgICAgICAgICAgICBCYXNlOjpmYWlsKGxvY2tlciwgbWFrZVN0cmluZygi
T3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IGluIGZ1bmN0aW9uIGVudHJ5cG9pbnQgYXQgaW5kZXgg
IiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0LT52YWx1ZS5mdW5jdGlvbi0+ZW50
cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKLSAgICAg
ICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcs
ICJFbWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4
LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCi0gICAgICAgICAgICAgICAg
bnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICB1bnNpZ25lZCBmdW5jdGlvbkNvdW50
ID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOwotICAgIGlmIChmdW5jdGlvbkNvdW50
KSB7CisgICAgaWYgKCFtX2NhbGxlZXMgJiYgZnVuY3Rpb25Db3VudCkgewogICAgICAgICAvLyBM
TEludCBlbnRyeXBvaW50IHRodW5rcyBnZW5lcmF0aW9uCiAgICAgICAgIENDYWxsSGVscGVycyBq
aXQ7Ci0gICAgICAgIG1fY2FsbGVlcy5yZXNpemUoZnVuY3Rpb25Db3VudCk7CisgICAgICAgIG1f
Y2FsbGVlc1ZlY3Rvci5yZXNpemUoZnVuY3Rpb25Db3VudCk7CiAgICAgICAgIFZlY3RvcjxDQ2Fs
bEhlbHBlcnM6OkxhYmVsPiBlbnRyeXBvaW50cyhmdW5jdGlvbkNvdW50KTsKICAgICAgICAgVmVj
dG9yPENDYWxsSGVscGVyczo6SnVtcD4ganVtcHMoZnVuY3Rpb25Db3VudCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmdW5jdGlvbkNvdW50OyArK2kpIHsKQEAgLTEyMSw3ICsx
MTEsNyBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbihjb25zdCBBYnN0
cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1
bXBHZW5lcmF0ZWRXYXNtQnl0ZWNvZGVzKCkpKQogICAgICAgICAgICAgICAgIEJ5dGVjb2RlRHVt
cGVyOjpkdW1wQmxvY2sobV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaV0uZ2V0KCksIG1fbW9kdWxl
SW5mb3JtYXRpb24sIFdURjo6ZGF0YUZpbGUoKSk7CiAKLSAgICAgICAgICAgIG1fY2FsbGVlc1tp
XSA9IFdhc206OkxMSW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tpXSksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNl
Y3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKKyAgICAgICAgICAgIG1fY2FsbGVlc1Zl
Y3RvcltpXSA9IExMSW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tpXSksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNl
Y3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKICAgICAgICAgICAgIGVudHJ5cG9pbnRz
W2ldID0gaml0LmxhYmVsKCk7CiAjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyBjYWxsZWVTbG90KENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKTsKQEAgLTEzMCw3ICsxMjAsNyBAQCB2b2lkIExM
SW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyKQogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuCiAjZW5kaWYKLSAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoQ2FsbGVl
Qml0czo6Ym94V2FzbShtX2NhbGxlZXNbaV0ucHRyKCkpKSwgY2FsbGVlU2xvdCk7CisgICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJpdHM6
OmJveFdhc20obV9jYWxsZWVzVmVjdG9yW2ldLnB0cigpKSksIGNhbGxlZVNsb3QpOwogICAgICAg
ICAgICAganVtcHNbaV0gPSBqaXQuanVtcCgpOwogICAgICAgICB9CiAKQEAgLTE0MSwxOCArMTMx
LDUxIEBAIHZvaWQgTExJbnRQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7Ci0gICAgICAgICAgICBtX2NhbGxlZXNbaV0t
PnNldEVudHJ5cG9pbnQobGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludHNbaV0pKTsKKyAgICAgICAgICAgIG1fY2FsbGVlc1ZlY3RvcltpXS0+c2V0RW50cnlw
b2ludChsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50c1tp
XSkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rPEpJVFRodW5rUHRyVGFnPihqdW1wc1tp
XSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KExMSW50Ojp3YXNtRnVuY3Rpb25F
bnRyeVRodW5rKCkuY29kZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2VudHJ5VGh1bmtz
ID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2FzbSBM
TEludCBlbnRyeSB0aHVua3MiKTsKKyAgICAgICAgbV9jYWxsZWVzID0gbV9jYWxsZWVzVmVjdG9y
LmRhdGEoKTsKKyAgICB9CisKKyAgICBpZiAobV9hc3luY1dvcmsgPT0gQXN5bmNXb3JrOjpWYWxp
ZGF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNp
emUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CisgICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25J
bmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1fbW9kdWxlSW5mb3JtYXRpb24tPnJl
ZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlvbkluZGV4KSkgeworICAgICAgICAg
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAg
ICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGZ1bmN0aW9uID0gY3JlYXRl
SlNUb1dhc21XcmFwcGVyKGppdCwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5j
dGlvbkluZGV4KTsKKworICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVs
bHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShs
aW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CisgICAgICAgICAgICAgICAgQmFzZTo6
ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5j
dGlvbiBlbnRyeXBvaW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmdW5jdGlvbi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBp
bGF0aW9uPigKKyAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29t
cGlsYXRpb25QdHJUYWcsICJFbWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMi
LCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSksCisg
ICAgICAgICAgICAgICAgbnVsbHB0cik7CisKKyAgICAgICAgICAgIFJlZjxFbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWU+IGNhbGxlZSA9IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdU
Rk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhpcyByZXBhdGNoUG9pbnRlciAtIGp1c3QgcGFzcyBpbiB0aGUgY2FsbGVlIGRpcmVjdGx5
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2NDYyCisgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbikKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNh
bGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKKwor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5hZGQoZnVuY3Rpb25J
bmRleCwgV1RGTW92ZShjYWxsZWUpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGF1dG8m
IHVubGlua2VkIDogbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscykgewogICAgICAgICBmb3IgKGF1
dG8mIGNhbGwgOiB1bmxpbmtlZCkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gZXhlY3V0YWJsZUFkZHJlc3M7CiAgICAgICAgICAgICBpZiAobV9t
b2R1bGVJbmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBp
bXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGlu
ZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJF
TEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
NDYyCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxp
bmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25k
aXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuCisgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2Mgog
ICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtVG9XYXNtRXhpdFN0dWJz
LmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5jb2RlKCk7CiAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fY2FsbGVlc1tjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQo
KV0tPmVudHJ5cG9pbnQoKTsKQEAgLTE2MSwyMSArMTg0LDI1IEBAIHZvaWQgTExJbnRQbGFuOjpk
aWRDb21wbGV0ZUNvbXBpbGF0aW9uKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAg
fQogfQogCi12b2lkIExMSW50UGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2FsbGVlSW5p
dGlhbGl6ZXImIGNhbGxiYWNrKQordm9pZCBMTEludFBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogewotICAgIEFTU0VSVCghZmFpbGVkKCkpOwotICAgIGZvciAodW5zaWduZWQg
aW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNt
SW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewotICAg
ICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7Ci0gICAg
ICAgIGlmIChhdXRvIGl0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmZpbmQo
aW50ZXJuYWxGdW5jdGlvbkluZGV4KTsgaXQgIT0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVu
Y3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBX
YXNtOjpFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGl0LT52YWx1ZS5m
dW5jdGlvbi0+ZW50cnlwb2ludCkpOwotICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5mdW5jdGlv
bi0+Y2FsbGVlTW92ZUxvY2F0aW9uKQotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihpdC0+dmFsdWUuZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2Fs
bGVlQml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKG1fY2FsbGVlc1tpbnRlcm5hbEZ1bmN0
aW9uSW5kZXhdKSk7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBTdGF0ZTo6UHJl
cGFyZWQ6CisgICAgICAgIGNvbXBpbGVGdW5jdGlvbnMoZWZmb3J0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTdGF0ZTo6Q29tcGlsZWQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAorYm9vbCBMTEludFBsYW46OmRpZFJlY2VpdmVG
dW5jdGlvbkRhdGEodW5zaWduZWQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYpCit7CisgICAgLy8gVmFs
aWRhdGlvbiBpcyBkb25lIGlubGluZSBieSB0aGUgcGFyc2VyCisgICAgcmV0dXJuIHRydWU7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQ
bGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRQbGFuLmgKaW5kZXgg
NmM5MWQyN2JmMjM5Y2MzNmY3OGM1NzRmZGQxZGZkMzNkMGY5YTg3Zi4uNDJkZTgxMzNiNzJmYzVm
ZTUxOTljMTlmNmUzMjNlOWUzN2IxYzhlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludFBsYW4uaApAQCAtMzcsMTQgKzM3LDE2IEBAIGNsYXNzIENhbGxMaW5rSW5mbzsK
IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgTExJbnRDYWxsZWU7CitjbGFzcyBFbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWU7CisKK3VzaW5nIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZU1hcCA9IEhh
c2hNYXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCB0eXBlbmFt
ZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8dWludDMyX3Q+PjsKIAogY2xhc3MgTExJbnRQbGFuIGZpbmFsIDogcHVibGljIEVu
dHJ5UGxhbiB7Ci1wdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEVudHJ5UGxhbjsKIAotICAgIHVz
aW5nIEJhc2U6OkJhc2U7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVDYWxsZWVzKGNvbnN0IENhbGxl
ZUluaXRpYWxpemVyJikgb3ZlcnJpZGU7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
TExJbnRQbGFuKENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiwgQXN5bmNXb3JrLCBDb21wbGV0
aW9uVGFzayYmKTsKKyAgICBMTEludFBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlv
bj4sIGNvbnN0IFJlZjxMTEludENhbGxlZT4qLCBDb21wbGV0aW9uVGFzayYmKTsKIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiYmIHRha2VFbnRyeVRodW5r
cygpCiAgICAgewpAQCAtNTIsMjAgKzU0LDM3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV9lbnRyeVRodW5rcyk7CiAgICAgfQogCisgICAgVmVjdG9yPFJlZjxMTEludENhbGxl
ZT4+JiYgdGFrZUNhbGxlZXMoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxl
ZCgpICYmICFoYXNXb3JrKCkpOworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2NhbGxlZXNWZWN0
b3IpOworICAgIH0KKworICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZU1hcCYmIHRha2VFbWJl
ZGRlckNhbGxlZXMoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpICYm
ICFoYXNXb3JrKCkpOworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VtYmVkZGVyQ2FsbGVlcyk7
CisgICAgfQorCisgICAgYm9vbCBoYXNXb3JrKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3N0YXRlIDwgU3RhdGU6OkNvbXBpbGVkOworICAgIH0KKworICAgIHZvaWQg
d29yayhDb21waWxhdGlvbkVmZm9ydCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGRpZFJlY2VpdmVG
dW5jdGlvbkRhdGEodW5zaWduZWQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYpIG92ZXJyaWRlOworCiBw
cm90ZWN0ZWQ6CiAgICAgYm9vbCBwcmVwYXJlSW1wbCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY29t
cGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGlkQ29tcGxldGVDb21waWxhdGlvbihjb25zdCBBYnN0cmFjdExvY2tlciYpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIHN0cnVjdCBFbWJlZGVyVG9XYXNtRnVuY3Rpb24gewotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiBqaXQ7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiBmdW5jdGlvbjsKLSAgICB9OwotCiAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9jaz4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwot
ICAgIFZlY3RvcjxSZWY8TExJbnRDYWxsZWU+PiBtX2NhbGxlZXM7Ci0gICAgSGFzaE1hcDx1aW50
MzJfdCwgRW1iZWRlclRvV2FzbUZ1bmN0aW9uLCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJf
dD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBt
X2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgY29uc3QgUmVmPExMSW50Q2Fs
bGVlPiogbV9jYWxsZWVzIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxSZWY8TExJbnRDYWxsZWU+
PiBtX2NhbGxlZXNWZWN0b3I7CisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlTWFwIG1fZW1i
ZWRkZXJDYWxsZWVzOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRy
VGFnPiBtX2VudHJ5VGh1bmtzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlLmNwcAppbmRleCA0NGEyNzQzMThiMWZmYzY2YjdhNjFjMjk0Nzc5ODYwYzQ2YjA1ODI2
Li4zYzg0MzJlY2RhNjZlNmY3MjI3YmJmYmMwN2I2YzI2OWNlZGY2YjRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcApAQCAtMjgsMTQgKzI4LDIyIEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJXYXNtQkJRUGxhbi5oIgogI2luY2x1
ZGUgIldhc21MTEludFBsYW4uaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIK
ICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAotTW9kdWxlOjpNb2R1bGUoUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmIG1vZHVsZUlu
Zm9ybWF0aW9uKQotICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKG1vZHVsZUluZm9y
bWF0aW9uKSkKK01vZHVsZTo6TW9kdWxlKExMSW50UGxhbiYgcGxhbikKKyAgICA6IG1fbW9kdWxl
SW5mb3JtYXRpb24ocGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKSkKKyAgICAsIG1fbGxpbnRD
YWxsZWVzKHBsYW4udGFrZUNhbGxlZXMoKSkKKyAgICAsIG1fbGxpbnRFbnRyeVRodW5rcyhwbGFu
LnRha2VFbnRyeVRodW5rcygpKQoreworfQorCitNb2R1bGU6Ok1vZHVsZShCQlFQbGFuJiBwbGFu
KQorICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihwbGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigp
KQogewogfQogCkBAIC00NiwzNiArNTQsNTAgQEAgV2FzbTo6U2lnbmF0dXJlSW5kZXggTW9kdWxl
OjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3QKICAg
ICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiB9CiAKLXN0YXRpYyBNb2R1bGU6OlZhbGlk
YXRpb25SZXN1bHQgbWFrZVZhbGlkYXRpb25SZXN1bHQoRW50cnlQbGFuJiBwbGFuKQordGVtcGxh
dGU8dHlwZW5hbWUgUGxhbj4KK3N0YXRpYyBNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQgbWFrZVZh
bGlkYXRpb25SZXN1bHQoUGxhbiYgcGxhbikKIHsKICAgICBBU1NFUlQoIXBsYW4uaGFzV29yaygp
KTsKICAgICBpZiAocGxhbi5mYWlsZWQoKSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8U3Ry
aW5nPihwbGFuLmVycm9yTWVzc2FnZSgpKTsKLSAgICByZXR1cm4gTW9kdWxlOjpWYWxpZGF0aW9u
UmVzdWx0KE1vZHVsZTo6Y3JlYXRlKHBsYW4udGFrZU1vZHVsZUluZm9ybWF0aW9uKCkpKTsKKyAg
ICByZXR1cm4gTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0KE1vZHVsZTo6Y3JlYXRlKHBsYW4pKTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgUGxhblQ+CiBzdGF0aWMgUGxhbjo6Q29tcGxldGlvblRh
c2sgbWFrZVZhbGlkYXRpb25DYWxsYmFjayhNb2R1bGU6OkFzeW5jVmFsaWRhdGlvbkNhbGxiYWNr
JiYgY2FsbGJhY2spCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJh
Y2tUeXBlPihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFBsYW4mIHBsYW4pIHsKICAg
ICAgICAgQVNTRVJUKCFwbGFuLmhhc1dvcmsoKSk7Ci0gICAgICAgIGNhbGxiYWNrLT5ydW4obWFr
ZVZhbGlkYXRpb25SZXN1bHQoc3RhdGljX2Nhc3Q8TExJbnRQbGFuJj4ocGxhbikpKTsKKyAgICAg
ICAgY2FsbGJhY2stPnJ1bihtYWtlVmFsaWRhdGlvblJlc3VsdChzdGF0aWNfY2FzdDxQbGFuVCY+
KHBsYW4pKSk7CiAgICAgfSk7CiB9CiAKIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBNb2R1bGU6
OnZhbGlkYXRlU3luYyhDb250ZXh0KiBjb250ZXh0LCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2Up
CiB7Ci0gICAgUmVmPExMSW50UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgTExJbnRQbGFuKGNv
bnRleHQsIFdURk1vdmUoc291cmNlKSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250
RmluYWxpemUoKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIGlmIChPcHRpb25zOjp1c2VXYXNt
TExJbnQoKSkgeworICAgICAgICBSZWY8TExJbnRQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBM
TEludFBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBFbnRyeVBsYW46OlZhbGlkYXRpb24s
IFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgICAgIFdhc206OmVuc3VyZVdvcmtsaXN0KCku
ZW5xdWV1ZShwbGFuLmdldCgpKTsKKyAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VWYWxpZGF0aW9uUmVzdWx0KHBsYW4uZ2V0KCkpOworICAgIH0K
KworICAgIFJlZjxCQlFQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQs
IFdURk1vdmUoc291cmNlKSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxp
emUoKSkpOwogICAgIHBsYW4tPnBhcnNlQW5kVmFsaWRhdGVNb2R1bGUoKTsKICAgICByZXR1cm4g
bWFrZVZhbGlkYXRpb25SZXN1bHQocGxhbi5nZXQoKSk7CiB9CiAKIHZvaWQgTW9kdWxlOjp2YWxp
ZGF0ZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9k
dWxlOjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIFJlZjxQbGFu
PiBwbGFuID0gYWRvcHRSZWYoKm5ldyBMTEludFBsYW4oY29udGV4dCwgV1RGTW92ZShzb3VyY2Up
LCBFbnRyeVBsYW46OlZhbGlkYXRpb24sIG1ha2VWYWxpZGF0aW9uQ2FsbGJhY2soV1RGTW92ZShj
YWxsYmFjaykpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgV2FzbTo6ZW5zdXJlV29ya2xpc3Qo
KS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworICAgIGlmIChPcHRpb25zOjp1c2VXYXNtTExJbnQo
KSkgeworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgTExJbnRQbGFuKGNv
bnRleHQsIFdURk1vdmUoc291cmNlKSwgRW50cnlQbGFuOjpWYWxpZGF0aW9uLCBtYWtlVmFsaWRh
dGlvbkNhbGxiYWNrPExMSW50UGxhbj4oV1RGTW92ZShjYWxsYmFjaykpKSk7CisgICAgICAgIFdh
c206OmVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShXVEZNb3ZlKHBsYW4pKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0
LCBXVEZNb3ZlKHNvdXJjZSksIEVudHJ5UGxhbjo6VmFsaWRhdGlvbiwgbWFrZVZhbGlkYXRpb25D
YWxsYmFjazxCQlFQbGFuPihXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICAgICAgV2FzbTo6ZW5z
dXJlV29ya2xpc3QoKS5lbnF1ZXVlKFdURk1vdmUocGxhbikpOworICAgIH0KIH0KIAotUmVmPENv
ZGVCbG9jaz4gTW9kdWxlOjpnZXRPckNyZWF0ZUNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBN
ZW1vcnlNb2RlIG1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3Jh
cHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK1JlZjxDb2RlQmxv
Y2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5
TW9kZSBtb2RlKQogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CkBAIC04NiwyMiArMTA4LDI1IEBAIFJlZjxDb2Rl
QmxvY2s+IE1vZHVsZTo6Z2V0T3JDcmVhdGVDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVt
b3J5TW9kZSBtb2RlLCBDCiAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gYmFjayBvZmYg
cmV0cnlpbmcgYXQgc29tZSBwb2ludDoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwNjA3CiAgICAgaWYgKCFjb2RlQmxvY2sgfHwgKGNvZGVCbG9jay0+
Y29tcGlsYXRpb25GaW5pc2hlZCgpICYmICFjb2RlQmxvY2stPnJ1bm5hYmxlKCkpKSB7Ci0gICAg
ICAgIGNvZGVCbG9jayA9IENvZGVCbG9jazo6Y3JlYXRlKGNvbnRleHQsIG1vZGUsIGNvbnN0X2Nh
c3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGVJbmZvcm1hdGlvbigpKSwgV1RGTW92ZShjcmVh
dGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICBjb25zdCBS
ZWY8TExJbnRDYWxsZWU+KiBsbGludENhbGxlZXMgPSBudWxscHRyOworICAgICAgICBpZiAoT3B0
aW9uczo6dXNlV2FzbUxMSW50KCkpCisgICAgICAgICAgICBsbGludENhbGxlZXMgPSBtX2xsaW50
Q2FsbGVlcy5kYXRhKCk7CisgICAgICAgIGNvZGVCbG9jayA9IENvZGVCbG9jazo6Y3JlYXRlKGNv
bnRleHQsIG1vZGUsIGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGVJbmZvcm1h
dGlvbigpKSwgbGxpbnRDYWxsZWVzKTsKICAgICAgICAgbV9jb2RlQmxvY2tzW3N0YXRpY19jYXN0
PHVpbnQ4X3Q+KG1vZGUpXSA9IGNvZGVCbG9jazsKICAgICB9CiAgICAgcmV0dXJuIGNvZGVCbG9j
ay5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi1SZWY8Q29kZUJsb2NrPiBNb2R1bGU6OmNvbXBpbGVT
eW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQorUmVmPENvZGVCbG9jaz4gTW9kdWxlOjpjb21waWxlU3luYyhDb250ZXh0KiBj
b250ZXh0LCBNZW1vcnlNb2RlIG1vZGUpCiB7Ci0gICAgUmVmPENvZGVCbG9jaz4gY29kZUJsb2Nr
ID0gZ2V0T3JDcmVhdGVDb2RlQmxvY2soY29udGV4dCwgbW9kZSwgV1RGTW92ZShjcmVhdGVFbWJl
ZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIFJlZjxDb2RlQmxvY2s+IGNv
ZGVCbG9jayA9IGdldE9yQ3JlYXRlQ29kZUJsb2NrKGNvbnRleHQsIG1vZGUpOwogICAgIGNvZGVC
bG9jay0+d2FpdFVudGlsRmluaXNoZWQoKTsKICAgICByZXR1cm4gY29kZUJsb2NrOwogfQogCi12
b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9k
ZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJiB0YXNrLCBDcmVhdGVFbWJl
ZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0
aHJvd1dhc21FeGNlcHRpb24pCit2b2lkIE1vZHVsZTo6Y29tcGlsZUFzeW5jKENvbnRleHQqIGNv
bnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJh
Y2smJiB0YXNrKQogewotICAgIFJlZjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGdldE9yQ3JlYXRl
Q29kZUJsb2NrKGNvbnRleHQsIG1vZGUsIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwg
dGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBSZWY8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBnZXRP
ckNyZWF0ZUNvZGVCbG9jayhjb250ZXh0LCBtb2RlKTsKICAgICBjb2RlQmxvY2stPmNvbXBpbGVB
c3luYyhjb250ZXh0LCBXVEZNb3ZlKHRhc2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZS5oCmluZGV4IDY1MmRkZDM3ZGI4ZTU3ODhkMDU4NzVkMmMyZGZjN2ZhZGM5
ZTczNjUuLjJkYWRiNmE5YmFmNzAzZjE5ZjkwMzY4YTc1NWQyNTEwMTVjZGE1ZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKQEAgLTM3LDkgKzM3LDEwIEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK2NsYXNzIEJCUVBsYW47CitjbGFzcyBM
TEludFBsYW47CiBzdHJ1Y3QgQ29udGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKLWNs
YXNzIFBsYW47CiAKIHVzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludDY0X3Q7CiAKQEAgLTUyLDI2
ICs1MywzNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhbGlkYXRpb25SZXN1bHQgdmFsaWRhdGVT
eW5jKENvbnRleHQqLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpOwogICAgIHN0YXRpYyB2b2lk
IHZhbGlkYXRlQXN5bmMoQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSwgTW9kdWxl
OjpBc3luY1ZhbGlkYXRpb25DYWxsYmFjayYmKTsKIAotICAgIHN0YXRpYyBSZWY8TW9kdWxlPiBj
cmVhdGUoUmVmPE1vZHVsZUluZm9ybWF0aW9uPiYmIG1vZHVsZUluZm9ybWF0aW9uKQorICAgIHN0
YXRpYyBSZWY8TW9kdWxlPiBjcmVhdGUoQkJRUGxhbiYgcGxhbikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE1vZHVsZShXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNb2R1bGUocGxhbikpOworICAgIH0KKworICAg
IHN0YXRpYyBSZWY8TW9kdWxlPiBjcmVhdGUoTExJbnRQbGFuJiBwbGFuKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTW9kdWxlKHBsYW4pKTsKICAgICB9CiAKICAgICBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpOyB9CiAKLSAgICBSZWY8Q29kZUJsb2NrPiBjb21waWxlU3luYyhDb250
ZXh0KiwgTWVtb3J5TW9kZSwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2Vw
dGlvbik7Ci0gICAgdm9pZCBjb21waWxlQXN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUsIENvZGVC
bG9jazo6QXN5bmNDb21waWxhdGlvbkNhbGxiYWNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
LCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIFJlZjxDb2RlQmxvY2s+IGNvbXBpbGVTeW5jKENv
bnRleHQqLCBNZW1vcnlNb2RlKTsKKyAgICB2b2lkIGNvbXBpbGVBc3luYyhDb250ZXh0KiwgTWVt
b3J5TW9kZSwgQ29kZUJsb2NrOjpBc3luY0NvbXBpbGF0aW9uQ2FsbGJhY2smJik7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB+TW9kdWxlKCk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja0Zv
cihNZW1vcnlNb2RlIG1vZGUpIHsgcmV0dXJuIG1fY29kZUJsb2Nrc1tzdGF0aWNfY2FzdDx1aW50
OF90Pihtb2RlKV0uZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgUmVmPENvZGVCbG9jaz4gZ2V0T3JD
cmVhdGVDb2RlQmxvY2soQ29udGV4dCosIE1lbW9yeU1vZGUsIENyZWF0ZUVtYmVkZGVyV3JhcHBl
ciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIFJlZjxDb2RlQmxvY2s+IGdldE9yQ3JlYXRl
Q29kZUJsb2NrKENvbnRleHQqLCBNZW1vcnlNb2RlKTsKIAotICAgIE1vZHVsZShSZWY8TW9kdWxl
SW5mb3JtYXRpb24+JiYpOworICAgIE1vZHVsZShCQlFQbGFuJik7CisgICAgTW9kdWxlKExMSW50
UGxhbiYpOwogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsK
ICAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2NvZGVCbG9ja3NbV2FzbTo6TnVtYmVyT2ZNZW1vcnlN
b2Rlc107CisgICAgVmVjdG9yPFJlZjxMTEludENhbGxlZT4+IG1fbGxpbnRDYWxsZWVzOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxCM0NvbXBpbGF0aW9uUHRyVGFnPiBtX2xsaW50RW50cnlU
aHVua3M7CiAgICAgTG9jayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNmY0ZGRjYWM3ZGUyNzgyYjgxNmY2YWQ5NDIyODg0Y2M0
ODA5MjQ5NC4uNWQ0OWMzZTkyYTAwM2VkMmU1ZTQ5NDJmOWMxMTlkNDAyMjNkY2M3MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtMTIyLDEwICsxMjIs
MTEgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICAgICAg
ICAgIGJicUNhbGxlZS0+c2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CiAgICAgICAg
ICAgICAgICAgYmJxQ2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9y
T01HID0gVGllclVwQ291bnQ6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChMTEludENhbGxlZSogbGxpbnRDYWxsZWUgPSBtX2NvZGVC
bG9jay0+bV9sbGludENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUtPnRpZXJVcENvdW50ZXIo
KS5tX2xvY2spOwotICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLT5zZXRSZXBsYWNlbWVudChj
YWxsZWUuY29weVJlZigpKTsKLSAgICAgICAgICAgICAgICBsbGludENhbGxlZS0+dGllclVwQ291
bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0
aW9uU3RhdHVzOjpDb21waWxlZDsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGlu
dENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBt
X2NvZGVCbG9jay0+bV9sbGludENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2FsbGVlLnRpZXJVcENvdW50
ZXIoKS5tX2xvY2spOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50
KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENv
dW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxh
dGlvblN0YXR1czo6Q29tcGlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKQEAgLTE2
MSwxMCArMTYyLDExIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2Fz
bUNhbGxzaXRlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgcmVwYXRjaENhbGxzKG1fY29k
ZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbaV0pOwotICAgICAgICAgICAgaWYgKExMSW50
Q2FsbGVlKiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlc1tpXS5nZXQo
KSkgewotICAgICAgICAgICAgICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0g
bGxpbnRDYWxsZWUtPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2st
Pm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2Fs
bGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzW2ldLmdldCgpOworICAgICAgICAgICAg
ICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gbGxpbnRDYWxsZWUucmVwbGFj
ZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKHJlcGxhY2VtZW50Q2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgICAgIGlmIChPTUdGb3JP
U1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS0+b3NyRW50cnlDYWxs
ZWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5
Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9j
b2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tpXS5nZXQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uY3BwCmluZGV4IDFlZDZjZmZmYTBkNDRkMDEzMWFiYzdiZTM3MGNhMDJjZDU0
NmNmZTcuLjVhNTNiOTU5MDgzNmY5NGJjYTRmZDEwMzdmNDQ2YTJjMWUzNWNjMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTQ4LDE5ICs0OCwxMSBAQCBuYW1l
c3BhY2UgV2FzbVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogfQogCi1QbGFuOjpQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZv
cm1hdGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBw
ZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21F
eGNlcHRpb24pCitQbGFuOjpQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4gaW5mbywgQ29tcGxldGlvblRhc2smJiB0YXNrKQogICAgIDogbV9tb2R1bGVJbmZvcm1h
dGlvbihXVEZNb3ZlKGluZm8pKQotICAgICwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIoV1RGTW92
ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpKQotICAgICwgbV90aHJvd1dhc21FeGNlcHRpb24odGhy
b3dXYXNtRXhjZXB0aW9uKQogewogICAgIG1fY29tcGxldGlvblRhc2tzLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihjb250ZXh0LCBXVEZNb3ZlKHRhc2spKSk7CiB9Ci0KLVBsYW46OlBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCi0gICAgOiBQbGFuKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayks
IG51bGxwdHIsIG51bGxwdHIpCi17Ci19Ci0KIFBsYW46OlBsYW4oQ29udGV4dCogY29udGV4dCwg
Q29tcGxldGlvblRhc2smJiB0YXNrKQogICAgIDogbV9tb2R1bGVJbmZvcm1hdGlvbihNb2R1bGVJ
bmZvcm1hdGlvbjo6Y3JlYXRlKCkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
aAppbmRleCAxMTEyMzRmNmI5MzZlZTVmZjI1NmNmMTdkNWNmYmFkNmM4ZWE2Y2QxLi45YmU2Y2Uy
NTI3MDUzYmQ3ZDliOTk4NzZkMjUwZjQwYzMxODg2NTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogICAgIHVzaW5nIENvbXBs
ZXRpb25UYXNrID0gUmVmUHRyPFNoYXJlZFRhc2s8Q2FsbGJhY2tUeXBlPj47CiAKICAgICBzdGF0
aWMgQ29tcGxldGlvblRhc2sgZG9udEZpbmFsaXplKCkgeyByZXR1cm4gY3JlYXRlU2hhcmVkVGFz
azxDYWxsYmFja1R5cGU+KFtdKFBsYW4mKSB7IH0pOyB9Ci0gICAgUGxhbihDb250ZXh0KiwgUmVm
PE1vZHVsZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgUGxhbihDb250ZXh0KiwgUmVmPE1vZHVs
ZUluZm9ybWF0aW9uPiwgQ29tcGxldGlvblRhc2smJik7CiAKICAgICAvLyBOb3RlOiBUaGlzIGNv
bnN0cnVjdG9yIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGFyZSBub3QgYWN0dWFsbHkgYnVp
bGRpbmcgYSBtb2R1bGUgZS5nLiB2YWxpZGF0aW9uL2Z1bmN0aW9uIHRlc3RzCkBAIC04OCw5ICs4
Nyw2IEBAIHByb3RlY3RlZDoKIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBs
ZXRpb25UYXNrPiwgMT4gbV9jb21wbGV0aW9uVGFza3M7CiAKLSAgICBDcmVhdGVFbWJlZGRlcldy
YXBwZXIgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXI7Ci0gICAgVGhyb3dXYXNtRXhjZXB0aW9uIG1f
dGhyb3dXYXNtRXhjZXB0aW9uIHsgbnVsbHB0ciB9OwotCiAgICAgU3RyaW5nIG1fZXJyb3JNZXNz
YWdlOwogICAgIE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcg
fTsKICAgICBMb2NrIG1fbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNs
b3dQYXRocy5jcHAKaW5kZXggYTUyNDhmZDY0YmM5ZDJmNjYwNmY1ZjIxY2JjODBhMGIzNDEzMzQy
OC4uNWE4ZWJiODFkMmRiZWUwM2FjNjkzMmFjZWY2ZmJiNDcyNzJlYzg0YiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKQEAgLTQxMSw3ICs0MTEsNyBA
QCBXQVNNX1NMT1dfUEFUSF9ERUNMKHNldF9nbG9iYWxfcmVmX3BvcnRhYmxlX2JpbmRpbmcpCiBl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRp
b24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgV2FzbTo6SW5z
dGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHBjKTsKLSAgICBXQVNNX1JFVFVSTl9UV08oV2FzbTo6VGh1bmtzOjpz
aW5nbGV0b24oKS50aHJvd1dhc21FeGNlcHRpb24oKShjYWxsRnJhbWUsIGV4Y2VwdGlvblR5cGUs
IGluc3RhbmNlKSwgMCk7CisgICAgV0FTTV9SRVRVUk5fVFdPKG9wZXJhdGlvbldhc21Ub0pTRXhj
ZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVHlwZSwgaW5zdGFuY2UpLCAwKTsKIH0KIAogZXh0
ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgc2xvd19wYXRoX3dhc21fcG9wY291bnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIHBjLCB1aW50MzJfdCB4KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGh1bmtzLmNwcAppbmRleCBmMmIzZWUxNWZkOWFmMjA1MmU0ZjFiM2NhYTRiN2Y0Y2UyODAy
N2E0Li5mOTM0ZjFhMTg2MGFjN2RhMjFjYTZkNWI5YWRjMzQxODZiZTJmODAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcApAQCAtNTYsMTAgKzU2LDggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNt
VGh1bmtHZW5lcmF0b3IoY29uc3QKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgaml0LmJyZWFrcG9pbnQoKTsgLy8g
V2Ugc2hvdWxkIG5vdCByZWFjaCB0aGlzLgogCi0gICAgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbiA9IFRodW5rczo6c2luZ2xldG9uKCkudGhyb3dXYXNtRXhjZXB0aW9uKCk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQodGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHRocm93V2FzbUV4Y2VwdGlvbikpOwor
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX1dBU01fQ09E
RShsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20i
KTsKIH0KIApAQCAtMTEzLDE5ICsxMTEsNiBAQCBUaHVua3MmIFRodW5rczo6c2luZ2xldG9uKCkK
ICAgICByZXR1cm4gKnRodW5rczsKIH0KIAotdm9pZCBUaHVua3M6OnNldFRocm93V2FzbUV4Y2Vw
dGlvbihUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQotewotICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAvLyBUaGUgdGh1bmtzIGFyZSB1bmlxdWUg
Zm9yIHRoZSBlbnRpcmUgcHJvY2VzcywgdGhlcmVmb3JlIGNoYW5naW5nIHRoZSB0aHJvd2luZyBm
dW5jdGlvbiBjaGFuZ2VzIGl0IGZvciBhbGwgdXNlcyBvZiBXZWJBc3NlbWJseS4KLSAgICBSRUxF
QVNFX0FTU0VSVCghbV90aHJvd1dhc21FeGNlcHRpb24gfHwgbV90aHJvd1dhc21FeGNlcHRpb24g
PT0gdGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBtX3Rocm93V2FzbUV4Y2VwdGlvbiA9IHRocm93
V2FzbUV4Y2VwdGlvbjsKLX0KLQotVGhyb3dXYXNtRXhjZXB0aW9uIFRodW5rczo6dGhyb3dXYXNt
RXhjZXB0aW9uKCkKLXsKLSAgICByZXR1cm4gbV90aHJvd1dhc21FeGNlcHRpb247Ci19Ci0KIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gVGh1bmtzOjpzdHViKFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKaW5kZXggODFjYzY2OTUwZmZk
OThhNDhiN2RkYjcwNGFhYWU2YWU0OGQ1OTI1OS4uYTI4YWJhOTZjZjAzZDQxZDViNDMwZjM4Mzg0
NmI2NWU5NTk3ZDYzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaApA
QCAtNDUsOSArNDUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwog
ICAgIHN0YXRpYyBUaHVua3MmIHNpbmdsZXRvbigpOwogCi0gICAgdm9pZCBzZXRUaHJvd1dhc21F
eGNlcHRpb24oVGhyb3dXYXNtRXhjZXB0aW9uKTsKLSAgICBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKCk7Ci0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHN0dWIoVGh1bmtHZW5lcmF0b3IpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gc3R1Yihjb25zdCBBYnN0cmFjdExvY2tlciYsIFRodW5rR2VuZXJhdG9y
KTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nU3R1
YihUaHVua0dlbmVyYXRvcik7CkBAIC01Niw3ICs1Myw2IEBAIHByaXZhdGU6CiAgICAgVGh1bmtz
KCkgPSBkZWZhdWx0OwogCiAgICAgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPj4gbV9zdHViczsKLSAgICBUaHJvd1dhc21FeGNlcHRp
b24gbV90aHJvd1dhc21FeGNlcHRpb24geyBudWxscHRyIH07CiAgICAgTG9jayBtX2xvY2s7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCAx
YjIxOGU2MTJhYzgxOTQ3OWFkNDZiNDEwYjZiNGY0NWNkMWRhMDE0Li5mOWMwYTNhZWJhNTlmMDNh
YTQ3MGQxYjU5MWJiYTM5ZjdlOWNkNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21WYWxpZGF0ZS5jcHAKQEAgLTQ2LDYgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgewog
ICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgaXNJZihjb25zdCBDb250cm9sRGF0YSYg
Y29udHJvbCkgeyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGlzVG9wTGV2ZWwoY29uc3QgQ29udHJvbERhdGEmIGNvbnRy
b2wpIHsgcmV0dXJuIGNvbnRyb2wuYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbDsg
fQorCisgICAgICAgIEJsb2NrVHlwZSBibG9ja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
VHlwZTsgfQorICAgICAgICBCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVy
biBtX3NpZ25hdHVyZTsgfQorCisgICAgICAgIHVuc2lnbmVkIGJyYW5jaFRhcmdldEFyaXR5KCkg
Y29uc3QgeyByZXR1cm4gYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wID8gc2lnbmF0dXJl
KCktPmFyZ3VtZW50Q291bnQoKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyB9CisgICAg
ICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOworICAgICAgICAgICAg
cmV0dXJuIGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCA/IHNpZ25hdHVyZSgpLT5hcmd1
bWVudChpKSA6IHNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICB9CisKICAgICAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoYmxvY2tUeXBlKCkpIHsKQEAgLTY2LDM0ICs3OSwyNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBvdXQucHJpbnQoc2lnKTsKICAgICAgICAgfQogCi0gICAgICAgIEJsb2NrVHlw
ZSBibG9ja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrVHlwZTsgfQotICAgICAgICBCbG9j
a1NpZ25hdHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQotCi0g
ICAgICAgIHVuc2lnbmVkIGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QgeyByZXR1cm4gYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wID8gc2lnbmF0dXJlKCktPmFyZ3VtZW50Q291bnQoKSA6
IHNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyB9Ci0gICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0
VHlwZSh1bnNpZ25lZCBpKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8
IGJyYW5jaFRhcmdldEFyaXR5KCkpOwotICAgICAgICAgICAgcmV0dXJuIGJsb2NrVHlwZSgpID09
IEJsb2NrVHlwZTo6TG9vcCA/IHNpZ25hdHVyZSgpLT5hcmd1bWVudChpKSA6IHNpZ25hdHVyZSgp
LT5yZXR1cm5UeXBlKGkpOwotICAgICAgICB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBCbG9j
a1R5cGUgbV9ibG9ja1R5cGU7CiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIG1fc2lnbmF0dXJlOwog
ICAgIH07CiAKLSAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7Ci0gICAgdHlwZWRlZiBVbmV4
cGVjdGVkPEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsKLSAgICB0eXBlZGVmIEV4cGVjdGVk
PHZvaWQsIEVycm9yVHlwZT4gUmVzdWx0OwotICAgIHVzaW5nIEV4cHJlc3Npb25UeXBlID0gVHlw
ZTsKLSAgICB1c2luZyBFeHByZXNzaW9uTGlzdCA9IFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT47
Ci0gICAgdXNpbmcgU3RhY2sgPSBFeHByZXNzaW9uTGlzdDsKLSAgICB0eXBlZGVmIENvbnRyb2xE
YXRhIENvbnRyb2xUeXBlOwotICAgIHR5cGVkZWYgRXhwcmVzc2lvbkxpc3QgUmVzdWx0TGlzdDsK
LSAgICB0eXBlZGVmIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPjo6Q29udHJvbEVudHJ5IENvbnRy
b2xFbnRyeTsKKyAgICBlbnVtIEV4cHJlc3Npb25UeXBlIHsgRW1wdHlFeHByZXNzaW9uIH07CisK
KyAgICB1c2luZyBFcnJvclR5cGUgPSBTdHJpbmc7CisgICAgdXNpbmcgVW5leHBlY3RlZFJlc3Vs
dCA9IFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPjsKKyAgICB1c2luZyBSZXN1bHQgPSBFeHBlY3RlZDx2
b2lkLCBFcnJvclR5cGU+OworICAgIHVzaW5nIENvbnRyb2xUeXBlID0gQ29udHJvbERhdGE7CiAK
LSAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbigpIHsg
cmV0dXJuIFZvaWQ7IH0KLSAgICBTdGFjayBjcmVhdGVTdGFjaygpIHsgcmV0dXJuIFN0YWNrKCk7
IH0KLSAgICBib29sIGlzQ29udHJvbFR5cGVJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkg
eyByZXR1cm4gY29udHJvbC5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmOyB9CisgICAgdXNp
bmcgQ29udHJvbEVudHJ5ID0gRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250cm9sRW50cnk7
CisgICAgdXNpbmcgQ29udHJvbFN0YWNrID0gRnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+OjpDb250
cm9sU3RhY2s7CisgICAgdXNpbmcgUmVzdWx0TGlzdCA9IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRl
Pjo6UmVzdWx0TGlzdDsKKyAgICB1c2luZyBTdGFjayA9IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRl
Pjo6U3RhY2s7CisKKyAgICBzdGF0aWMgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uKCkg
eyByZXR1cm4gRW1wdHlFeHByZXNzaW9uOyB9OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4u
LkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGZhaWwoY29uc3QgQXJncyYuLi4gYXJncykgY29uc3QKQEAgLTExMywxOCArMTE2LDE4IEBA
IHB1YmxpYzoKIAogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNv
bnN0IFNpZ25hdHVyZSYpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwo
VHlwZSwgdWludDMyX3QpOwotICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUgdHlw
ZSwgdWludDY0X3QpIHsgcmV0dXJuIHR5cGU7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBhZGRDb25z
dGFudChUeXBlLCB1aW50NjRfdCkgeyByZXR1cm4gRW1wdHlFeHByZXNzaW9uOyB9CiAKICAgICAv
LyBSZWZlcmVuY2VzCi0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRSZWZJc051bGwo
RXhwcmVzc2lvblR5cGUmIHZhbHVlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFJlZklzTnVsbChFeHByZXNzaW9uVHlwZSB2YWx1ZSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAg
IC8vIFRhYmxlcwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5z
aWduZWQsIEV4cHJlc3Npb25UeXBlJiBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0g
ICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZVNldCh1bnNpZ25lZCwgRXhwcmVz
c2lvblR5cGUmIGluZGV4LCBFeHByZXNzaW9uVHlwZSYgdmFsdWUpOworICAgIFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlIGluZGV4
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZFRhYmxlU2V0KHVuc2lnbmVkLCBFeHByZXNzaW9uVHlwZSBpbmRleCwgRXhwcmVzc2lvblR5
cGUgdmFsdWUpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVTaXplKHVu
c2lnbmVkLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZFRhYmxlR3Jvdyh1bnNpZ25lZCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJl
c3Npb25UeXBlJiBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJiBv
ZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlwZSYgY291bnQpOworICAg
IFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVGFibGVHcm93KHVuc2lnbmVkLCBFeHByZXNz
aW9uVHlwZSBmaWxsLCBFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3Vs
dCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUYWJsZUZpbGwodW5zaWduZWQs
IEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhwcmVzc2lvblR5cGUgZmlsbCwgRXhwcmVzc2lvblR5
cGUgY291bnQpOwogICAgIC8vIExvY2FscwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
Z2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlIHZhbHVlKTsKQEAgLTE2NywxNDIgKzE3MCw4MSBAQCBwdWJsaWM6CiAgICAgUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBT
aWduYXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0
Jik7CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWdu
ZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwogCi0gICAgYm9vbCBoYXNNZW1vcnkoKSBjb25zdCB7
IHJldHVybiAhIW1fbW9kdWxlLm1lbW9yeTsgfQotCi0gICAgVmFsaWRhdGUoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIG1vZHVsZSkKLSAgICAgICAgOiBtX21vZHVsZShtb2R1bGUpCisgICAgVmFs
aWRhdGUoKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRy
b2xFbnRyeT4mLCBjb25zdCBTdGFjayopOworICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3Rh
Y2smLCBjb25zdCBTdGFjayopOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPFZh
bGlkYXRlPiopIHsgfQogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpIHsgfQogICAg
IHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IH0KIAogcHJpdmF0ZToKICAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIHVuaWZ5KGNvbnN0IFN0YWNrJiwgY29uc3QgQ29udHJvbERhdGEm
KTsKLQotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gY2hlY2tCcmFuY2hUYXJnZXQoQ29u
dHJvbERhdGEmIHRhcmdldCwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25TdGFjayk7Ci0KLSAgICBW
ZWN0b3I8VHlwZT4gbV9sb2NhbHM7Ci0gICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1fbW9k
dWxlOwogfTsKIAotYXV0byBWYWxpZGF0ZTo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEFyZ3VtZW50cyhjb25zdCBT
aWduYXR1cmUmKSAtPiBSZXN1bHQKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhhZGRMb2NhbChzaWduYXR1cmUuYXJndW1lbnQoaSksIDEpKTsKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBF
eHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAor
YXV0byBWYWxpZGF0ZTo6YWRkVGFibGVHZXQodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHBy
ZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodGFi
bGVJbmRleCA+PSBtX21vZHVsZS50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRleCAiLCB0YWJsZUlu
ZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1fbW9kdWxlLnRhYmxlQ291bnQoKSk7Ci0g
ICAgcmVzdWx0ID0gbV9tb2R1bGUudGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCk7Ci0gICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIgIT0gaW5kZXgsICJ0YWJsZS5nZXQgaW5k
ZXggdG8gdHlwZSAiLCBtYWtlU3RyaW5nKGluZGV4KSwgIiBleHBlY3RlZCAiLCBtYWtlU3RyaW5n
KFR5cGU6OkkzMikpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRk
VGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgdmFsdWUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVTZXQo
dW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0g
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291
bnQoKSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMg
IiwgbV9tb2R1bGUudGFibGVDb3VudCgpKTsKLSAgICBhdXRvIHR5cGUgPSBtX21vZHVsZS50YWJs
ZXNbdGFibGVJbmRleF0ud2FzbVR5cGUoKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKFR5
cGU6OkkzMiAhPSBpbmRleCwgInRhYmxlLnNldCBpbmRleCB0byB0eXBlICIsIGluZGV4LCAiIGV4
cGVjdGVkICIsIFR5cGU6OkkzMik7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0
eXBlKHZhbHVlLCB0eXBlKSwgInRhYmxlLnNldCB2YWx1ZSB0byB0eXBlICIsIHZhbHVlLCAiIGV4
cGVjdGVkICIsIHR5cGUpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fbW9kdWxlLnRhYmxlc1t0YWJs
ZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50VHlwZTo6QW55cmVmIHx8IG1fbW9kdWxlLnRh
Ymxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3JlZik7Ci0K
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZVNpemUodW5zaWdu
ZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZh
bGlkYXRlOjphZGRUYWJsZVNpemUodW5zaWduZWQsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0
CiB7Ci0gICAgcmVzdWx0ID0gVHlwZTo6STMyOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
dGFibGVJbmRleCA+PSBtX21vZHVsZS50YWJsZUNvdW50KCksICJ0YWJsZSBpbmRleCAiLCB0YWJs
ZUluZGV4LCAiIGlzIGludmFsaWQsIGxpbWl0IGlzICIsIG1fbW9kdWxlLnRhYmxlQ291bnQoKSk7
Ci0KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRUYWJsZUdyb3codW5z
aWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4cHJlc3Npb25UeXBlJiBk
ZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjph
ZGRUYWJsZUdyb3codW5zaWduZWQsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgRXhw
cmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBUeXBlOjpJMzI7Ci0gICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRih0YWJsZUluZGV4ID49IG1fbW9kdWxlLnRhYmxlQ291bnQo
KSwgInRhYmxlIGluZGV4ICIsIHRhYmxlSW5kZXgsICIgaXMgaW52YWxpZCwgbGltaXQgaXMgIiwg
bV9tb2R1bGUudGFibGVDb3VudCgpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1
YnR5cGUoZmlsbCwgbV9tb2R1bGUudGFibGVzW3RhYmxlSW5kZXhdLndhc21UeXBlKCkpLCAidGFi
bGUuZ3JvdyBleHBlY3RzIGZpbGwgdmFsdWUgb2YgdHlwZSAiLCBtX21vZHVsZS50YWJsZXNbdGFi
bGVJbmRleF0ud2FzbVR5cGUoKSwgIiBnb3QgIiwgZmlsbCk7Ci0gICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihUeXBlOjpJMzIgIT0gZGVsdGEsICJ0YWJsZS5ncm93IGV4cGVjdHMgYW4gaTMyIGRl
bHRhIHZhbHVlLCBnb3QgIiwgbWFrZVN0cmluZyhkZWx0YSkpOwotCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9uVHlw
ZSYgY291bnQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkVGFibGVGaWxsKHVuc2lnbmVk
LCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSAtPiBSZXN1
bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9tb2R1bGUu
dGFibGVDb3VudCgpLCAidGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBpcyBpbnZhbGlkLCBs
aW1pdCBpcyAiLCBtX21vZHVsZS50YWJsZUNvdW50KCkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZShmaWxsLCBtX21vZHVsZS50YWJsZXNbdGFibGVJbmRleF0ud2FzbVR5
cGUoKSksICJ0YWJsZS5maWxsIGV4cGVjdHMgZmlsbCB2YWx1ZSBvZiB0eXBlICIsIG1fbW9kdWxl
LnRhYmxlc1t0YWJsZUluZGV4XS53YXNtVHlwZSgpLCAiIGdvdCAiLCBmaWxsKTsKLSAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKFR5cGU6OkkzMiAhPSBvZmZzZXQsICJ0YWJsZS5maWxsIGV4cGVj
dHMgYW4gaTMyIG9mZnNldCB2YWx1ZSwgZ290ICIsIG1ha2VTdHJpbmcob2Zmc2V0KSk7Ci0gICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihUeXBlOjpJMzIgIT0gY291bnQsICJ0YWJsZS5maWxsIGV4
cGVjdHMgYW4gaTMyIGNvdW50IHZhbHVlLCBnb3QgIiwgbWFrZVN0cmluZyhjb3VudCkpOwotCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkUmVmSXNOdWxsKEV4cHJlc3Np
b25UeXBlJiB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZh
bGlkYXRlOjphZGRSZWZJc051bGwoRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlJikgLT4g
UmVzdWx0CiB7Ci0gICAgcmVzdWx0ID0gVHlwZTo6STMyOwotICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZSh2YWx1ZSwgVHlwZTo6QW55cmVmKSwgInJlZi5pc19udWxsIHRvIHR5
cGUgIiwgbWFrZVN0cmluZyh2YWx1ZSksICIgZXhwZWN0ZWQgIiwgbWFrZVN0cmluZyhUeXBlOjpB
bnlyZWYpKTsKLQogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZFJlZkZ1
bmModWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0
byBWYWxpZGF0ZTo6YWRkUmVmRnVuYyh1aW50MzJfdCwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1
bHQKIHsKLSAgICByZXN1bHQgPSBUeXBlOjpGdW5jcmVmOwotICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoaW5kZXggPj0gbV9tb2R1bGUuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAicmVmLmZ1
bmMgaW5kZXggIiwgaW5kZXgsICIgaXMgdG9vIGxhcmdlLCBtYXggaXMgIiwgbV9tb2R1bGUuZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBtX21vZHVsZS5hZGRSZWZlcmVuY2VkRnVuY3Rp
b24oaW5kZXgpOwotCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkTG9j
YWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjph
ZGRMb2NhbChUeXBlLCB1aW50MzJfdCkgLT4gUmVzdWx0CiB7Ci0gICAgc2l6ZV90IG5ld1NpemUg
PSBtX2xvY2Fscy5zaXplKCkgKyBjb3VudDsKLSAgICBBU1NFUlQoIShDaGVja2VkVWludDMyKGNv
dW50KSArIG1fbG9jYWxzLnNpemUoKSkuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBBU1NFUlQobmV3
U2l6ZSA8PSBtYXhGdW5jdGlvbkxvY2Fscyk7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRigh
bV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG5ld1NpemUpLCAiY2FuJ3QgYWxsb2NhdGUgbWVt
b3J5IGZvciAiLCBuZXdTaXplLCAiIGxvY2FscyIpOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fbG9jYWxzLnVuY2hlY2tlZEFwcGVuZCh0eXBl
KTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjpnZXRMb2NhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRl
OjpnZXRMb2NhbCh1aW50MzJfdCwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbG9jYWxzLnNpemUoKSwgImF0dGVtcHQg
dG8gdXNlIHVua25vd24gbG9jYWwgIiwgaW5kZXgsICIgbGFzdCBvbmUgaXMgIiwgbV9sb2NhbHMu
c2l6ZSgpKTsKLSAgICByZXN1bHQgPSBtX2xvY2Fsc1tpbmRleF07CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBWYWxpZGF0ZTo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25U
eXBlIHZhbHVlKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90LCBF
eHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAgRXhwcmVzc2lvblR5cGUgbG9jYWxUeXBl
OwotICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoZ2V0TG9jYWwoaW5kZXgsIGxvY2FsVHlw
ZSkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZSwgbG9jYWxU
eXBlKSwgInNldF9sb2NhbCB0byB0eXBlICIsIHZhbHVlLCAiIGV4cGVjdGVkICIsIGxvY2FsVHlw
ZSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6Z2V0R2xvYmFsKHVpbnQz
Ml90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OmdldEdsb2JhbCh1aW50MzJfdCwgRXhwcmVzc2lvblR5cGUmKSAtPiBSZXN1bHQKIHsKLSAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1fbW9kdWxlLmdsb2JhbHMuc2l6ZSgp
LCAiZ2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwg
bV9tb2R1bGUuZ2xvYmFscy5zaXplKCkpOwotICAgIHJlc3VsdCA9IG1fbW9kdWxlLmdsb2JhbHNb
aW5kZXhdLnR5cGU7Ci0gICAgQVNTRVJUKGlzVmFsdWVUeXBlKHJlc3VsdCkpOwogICAgIHJldHVy
biB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6c2V0R2xvYmFsKHVp
bnQzMl90LCBFeHByZXNzaW9uVHlwZSkgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihpbmRleCA+PSBtX21vZHVsZS5nbG9iYWxzLnNpemUoKSwgInNldF9nbG9iYWwgIiwg
aW5kZXgsICIgb2YgdW5rbm93biBnbG9iYWwsIGxpbWl0IGlzICIsIG1fbW9kdWxlLmdsb2JhbHMu
c2l6ZSgpKTsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fbW9kdWxlLmdsb2JhbHNbaW5k
ZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsSW5mb3JtYXRpb246OkltbXV0YWJsZSwgInNldF9nbG9i
YWwgIiwgaW5kZXgsICIgaXMgaW1tdXRhYmxlIik7Ci0KLSAgICBFeHByZXNzaW9uVHlwZSBnbG9i
YWxUeXBlID0gbV9tb2R1bGUuZ2xvYmFsc1tpbmRleF0udHlwZTsKLSAgICBBU1NFUlQoaXNWYWx1
ZVR5cGUoZ2xvYmFsVHlwZSkpOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZ2xvYmFsVHlw
ZSAhPSB2YWx1ZSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgd2l0aCB0eXBlICIsIGdsb2JhbFR5
cGUsICIgd2l0aCBhIHZhcmlhYmxlIG9mIHR5cGUgIiwgdmFsdWUpOwogICAgIHJldHVybiB7IH07
CiB9CiAKQEAgLTMxMSwxNzggKzI1MywxMTQgQEAgVmFsaWRhdGU6OkNvbnRyb2xUeXBlIFZhbGlk
YXRlOjphZGRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUpCiAgICAgcmV0dXJuIENv
bnRyb2xEYXRhKEJsb2NrVHlwZTo6VG9wTGV2ZWwsIHNpZ25hdHVyZSk7CiB9CiAKLXN0YXRpYyBW
YWxpZGF0ZTo6U3RhY2sgc3BsaXRTdGFjayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFZhbGlk
YXRlOjpTdGFjayYgc3RhY2spCi17Ci0gICAgVmFsaWRhdGU6OlN0YWNrIHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7
Ci0gICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7
Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyArK2kpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoc3RhY2tbaSAr
IG9mZnNldF0pOwotICAgIHN0YWNrLnNocmluayhvZmZzZXQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KIGF1dG8gVmFsaWRhdGU6OmFkZEJsb2NrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgbmV3QmxvY2ssIFN0YWNrJiBuZXdT
dGFjaykgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihlbmNsb3NpbmdT
dGFjay5zaXplKCkgPCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgdmFsdWVz
IG9uIHN0YWNrIGZvciBibG9jay4gQmxvY2sgZXhwZWN0cyAiLCBzaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgZW5jbG9zaW5nU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJl
c2VudC4gQmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgKnNpZ25hdHVyZSk7Ci0gICAgbmV3U3RhY2sg
PSBzcGxpdFN0YWNrKHNpZ25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2so
c2lnbmF0dXJlLCBlbmNsb3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIG5ld0Jsb2NrID0gQ29u
dHJvbERhdGEoQmxvY2tUeXBlOjpCbG9jaywgc2lnbmF0dXJlKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgV0FT
TV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKG5ld1N0YWNrW2ldLCBzaWduYXR1cmUtPmFy
Z3VtZW50KGkpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRv
IGJlIGEgc3VidHlwZSBvZiAiLCBzaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiIGJ1dCBhcmd1bWVu
dCBoYXMgdHlwZSAiLCBuZXdTdGFja1tpXSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAogYXV0byBW
YWxpZGF0ZTo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIGxvb3AsIFN0YWNrJiBuZXdTdGFjaywgdWludDMyX3QpIC0+
IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoZW5jbG9zaW5nU3RhY2suc2l6
ZSgpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IHZhbHVlcyBvbiBzdGFj
ayBmb3IgbG9vcCBibG9jay4gTG9vcCBleHBlY3RzICIsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpLCAiLCBidXQgb25seSAiLCBlbmNsb3NpbmdTdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50
LiBMb29wIGhhcyBzaWduYXR1cmU6ICIsICpzaWduYXR1cmUpOwotICAgIG5ld1N0YWNrID0gc3Bs
aXRTdGFjayhzaWduYXR1cmUsIGVuY2xvc2luZ1N0YWNrKTsKKyAgICBzcGxpdFN0YWNrKHNpZ25h
dHVyZSwgZW5jbG9zaW5nU3RhY2ssIG5ld1N0YWNrKTsKICAgICBsb29wID0gQ29udHJvbERhdGEo
QmxvY2tUeXBlOjpMb29wLCBzaWduYXR1cmUpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKCFpc1N1YnR5cGUobmV3U3RhY2tbaV0sIHNpZ25hdHVyZS0+YXJndW1lbnQoaSkp
LCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgYSBzdWJ0
eXBlIG9mICIsIHNpZ25hdHVyZS0+YXJndW1lbnQoaSksICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBl
ICIsIG5ld1N0YWNrW2ldKTsKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjph
ZGRTZWxlY3QoRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBFeHByZXNzaW9uVHlwZSBub25aZXJv
LCBFeHByZXNzaW9uVHlwZSB6ZXJvLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQK
K2F1dG8gVmFsaWRhdGU6OmFkZFNlbGVjdChFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUs
IEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYpIC0+IFJlc3VsdAogewotICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9IEkzMiwgInNlbGVjdCBjb25kaXRpb24gbXVz
dCBiZSBpMzIsIGdvdCAiLCBjb25kaXRpb24pOwotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
bm9uWmVybyAhPSB6ZXJvLCAic2VsZWN0IHJlc3VsdCB0eXBlcyBtdXN0IG1hdGNoLCBnb3QgIiwg
bm9uWmVybywgIiBhbmQgIiwgemVybyk7Ci0gICAgcmVzdWx0ID0gemVybzsKICAgICByZXR1cm4g
eyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRJZihFeHByZXNzaW9uVHlwZSBjb25kaXRpb24s
IEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6
YWRkSWYoRXhwcmVzc2lvblR5cGUsIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVu
Y2xvc2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spIC0+IFJl
c3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29uZGl0aW9uICE9IEkzMiwgImlm
IGNvbmRpdGlvbiBtdXN0IGJlIGkzMiwgZ290ICIsIG1ha2VTdHJpbmcoY29uZGl0aW9uKSk7Ci0g
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihlbmNsb3NpbmdTdGFjay5zaXplKCkgPCBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciBpZiBi
bG9jay4gSWYgZXhwZWN0cyAiLCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9u
bHkgIiwgZW5jbG9zaW5nU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gSWYgYmxvY2sgaGFz
IHNpZ25hdHVyZTogIiwgKnNpZ25hdHVyZSk7Ci0gICAgbmV3U3RhY2sgPSBzcGxpdFN0YWNrKHNp
Z25hdHVyZSwgZW5jbG9zaW5nU3RhY2spOworICAgIHNwbGl0U3RhY2soc2lnbmF0dXJlLCBlbmNs
b3NpbmdTdGFjaywgbmV3U3RhY2spOwogICAgIHJlc3VsdCA9IENvbnRyb2xEYXRhKEJsb2NrVHlw
ZTo6SWYsIHNpZ25hdHVyZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
IWlzU3VidHlwZShuZXdTdGFja1tpXSwgc2lnbmF0dXJlLT5hcmd1bWVudChpKSksICJMb29wIGV4
cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSBhIHN1YnR5cGUgb2YgIiwg
c2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbmV3U3Rh
Y2tbaV0pOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZEVsc2UoQ29u
dHJvbFR5cGUmIGN1cnJlbnQsIGNvbnN0IFN0YWNrJiB2YWx1ZXMpIC0+IFJlc3VsdAorYXV0byBW
YWxpZGF0ZTo6YWRkRWxzZShDb250cm9sVHlwZSYgY3VycmVudCwgY29uc3QgU3RhY2smKSAtPiBS
ZXN1bHQKIHsKLSAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHVuaWZ5KHZhbHVlcywgY3Vy
cmVudCkpOwogICAgIHJldHVybiBhZGRFbHNlVG9VbnJlYWNoYWJsZShjdXJyZW50KTsKIH0KIAog
YXV0byBWYWxpZGF0ZTo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmIGN1cnJlbnQp
IC0+IFJlc3VsdAogewotICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY3VycmVudC5ibG9ja1R5
cGUoKSAhPSBCbG9ja1R5cGU6OklmLCAiZWxzZSBibG9jayBpc24ndCBhc3NvY2lhdGVkIHRvIGFu
IGlmIik7CiAgICAgY3VycmVudCA9IENvbnRyb2xEYXRhKEJsb2NrVHlwZTo6QmxvY2ssIGN1cnJl
bnQuc2lnbmF0dXJlKCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFk
ZFJldHVybihDb250cm9sVHlwZSYgdG9wTGV2ZWwsIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1
cm5WYWx1ZXMpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkUmV0dXJuKENvbnRyb2xUeXBl
JiwgY29uc3QgU3RhY2smKSAtPiBSZXN1bHQKIHsKLSAgICBBU1NFUlQodG9wTGV2ZWwuYmxvY2tU
eXBlKCkgPT0gQmxvY2tUeXBlOjpUb3BMZXZlbCk7Ci0gICAgcmV0dXJuIGNoZWNrQnJhbmNoVGFy
Z2V0KHRvcExldmVsLCByZXR1cm5WYWx1ZXMpOwotfQotCi1hdXRvIFZhbGlkYXRlOjpjaGVja0Jy
YW5jaFRhcmdldChDb250cm9sVHlwZSYgdGFyZ2V0LCBjb25zdCBTdGFjayYgZXhwcmVzc2lvblN0
YWNrKSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoIXRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihleHByZXNz
aW9uU3RhY2suc2l6ZSgpIDwgdGFyZ2V0LmJyYW5jaFRhcmdldEFyaXR5KCksIHRhcmdldC5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6OlRvcExldmVsID8gImJyYW5jaCBvdXQgb2YgZnVuY3Rpb24i
IDogImJyYW5jaCB0byBibG9jayIsICIgb24gZXhwcmVzc2lvbiBzdGFjayBvZiBzaXplICIsIGV4
cHJlc3Npb25TdGFjay5zaXplKCksICIsIGJ1dCBibG9jaywgIiwgdGFyZ2V0ICwgIiBleHBlY3Rz
ICIsIHRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpLCAiIHZhbHVlcyIpOwotCi0KLSAgICB1bnNp
Z25lZCBleHByZXNzaW9uU3RhY2tPZmZzZXQgPSBleHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gdGFy
Z2V0LmJyYW5jaFRhcmdldEFyaXR5KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRh
cmdldC5icmFuY2hUYXJnZXRBcml0eSgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZB
SUxfSUYoIWlzU3VidHlwZSh0YXJnZXQuYnJhbmNoVGFyZ2V0VHlwZShpKSwgZXhwcmVzc2lvblN0
YWNrW2V4cHJlc3Npb25TdGFja09mZnNldCArIGldKSwgImJyYW5jaCdzIHN0YWNrIHR5cGUgaXMg
bm90IGEgc3VidHlwZSBvZiBibG9jaydzIHR5cGUgYnJhbmNoIHRhcmdldCB0eXBlLiBTdGFjayB2
YWx1ZSBoYXMgdHlwZSIsIGV4cHJlc3Npb25TdGFja1tleHByZXNzaW9uU3RhY2tPZmZzZXQgKyBp
XSwgIiBidXQgYnJhbmNoIHRhcmdldCBleHBlY3RzIGEgdmFsdWUgd2l0aCBzdWJ0eXBlIG9mICIs
IHRhcmdldC5icmFuY2hUYXJnZXRUeXBlKGkpLCAiIGF0IGluZGV4ICIsIGkpOwotCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotYXV0byBWYWxpZGF0ZTo6YWRkQnJhbmNoKENvbnRyb2xUeXBlJiB0YXJn
ZXQsIEV4cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgY29uc3QgU3RhY2smIHN0YWNrKSAtPiBSZXN1
bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEJyYW5jaChDb250cm9sVHlwZSYsIEV4cHJlc3Npb25UeXBl
LCBjb25zdCBTdGFjayYpIC0+IFJlc3VsdAogewotICAgIC8vIFZvaWQgbWVhbnMgdGhpcyBpcyBh
biB1bmNvbmRpdGlvbmFsIGJyYW5jaC4KLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGNvbmRp
dGlvbiAhPSBWb2lkICYmIGNvbmRpdGlvbiAhPSBJMzIsICJjb25kaXRpb25hbCBicmFuY2ggd2l0
aCBub24taTMyIGNvbmRpdGlvbiAiLCBjb25kaXRpb24pOwotICAgIHJldHVybiBjaGVja0JyYW5j
aFRhcmdldCh0YXJnZXQsIHN0YWNrKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlk
YXRlOjphZGRTd2l0Y2goRXhwcmVzc2lvblR5cGUgY29uZGl0aW9uLCBjb25zdCBWZWN0b3I8Q29u
dHJvbERhdGEqPiYgdGFyZ2V0cywgQ29udHJvbERhdGEmIGRlZmF1bHRUYXJnZXQsIGNvbnN0IFN0
YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkU3dpdGNo
KEV4cHJlc3Npb25UeXBlLCBjb25zdCBWZWN0b3I8Q29udHJvbERhdGEqPiYsIENvbnRyb2xEYXRh
JiwgY29uc3QgU3RhY2smKSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KGNvbmRpdGlvbiAhPSBJMzIsICJicl90YWJsZSB3aXRoIG5vbi1pMzIgY29uZGl0aW9uICIsIGNv
bmRpdGlvbik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFyZ2V0cy5zaXplKCk7
ICsraSkgewotICAgICAgICBhdXRvKiB0YXJnZXQgPSB0YXJnZXRzW2ldOwotICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGRlZmF1bHRUYXJnZXQuYnJhbmNoVGFyZ2V0QXJpdHkoKSAhPSB0
YXJnZXQtPmJyYW5jaFRhcmdldEFyaXR5KCksICJicl90YWJsZSB0YXJnZXQgdHlwZSBzaXplIG1p
c21hdGNoLiBEZWZhdWx0IGhhcyBzaXplOiAiLCBkZWZhdWx0VGFyZ2V0LmJyYW5jaFRhcmdldEFy
aXR5KCksICJidXQgdGFyZ2V0OiAiLCBpLCAiIGhhcyBzaXplOiAiLCB0YXJnZXQtPmJyYW5jaFRh
cmdldEFyaXR5KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAwOyB0eXBlIDwgZGVm
YXVsdFRhcmdldC5icmFuY2hUYXJnZXRBcml0eSgpOyArK3R5cGUpCi0gICAgICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoZGVmYXVsdFRhcmdldC5icmFuY2hUYXJnZXRU
eXBlKHR5cGUpLCB0YXJnZXQtPmJyYW5jaFRhcmdldFR5cGUodHlwZSkpLCAiYnJfdGFibGUgdGFy
Z2V0IHR5cGUgbWlzbWF0Y2ggYXQgb2Zmc2V0ICIsIHR5cGUsICIgZXhwZWN0ZWQ6ICIsIGRlZmF1
bHRUYXJnZXQuYnJhbmNoVGFyZ2V0VHlwZSh0eXBlKSwgIiBidXQgc2F3OiAiLCB0YXJnZXQtPmJy
YW5jaFRhcmdldFR5cGUodHlwZSksICIgd2hlbiB0YXJnZXRpbmcgYmxvY2siLCAqdGFyZ2V0KTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gY2hlY2tCcmFuY2hUYXJnZXQoZGVmYXVsdFRhcmdldCwgZXhw
cmVzc2lvblN0YWNrKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRH
cm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUsIEV4
cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihk
ZWx0YSAhPSBJMzIsICJncm93X21lbW9yeSB3aXRoIG5vbi1pMzIgZGVsdGEgYXJndW1lbnQgaGFz
IHR5cGU6ICIsIGRlbHRhKTsKLSAgICByZXN1bHQgPSBJMzI7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0
KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5
cGUmKSAtPiBSZXN1bHQKIHsKLSAgICByZXN1bHQgPSBJMzI7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBWYWxpZGF0ZTo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIHN0
YWNrKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50
cnksIFN0YWNrJikgLT4gUmVzdWx0CiB7Ci0gICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyh1
bmlmeShzdGFjaywgZW50cnkuY29udHJvbERhdGEpKTsKICAgICByZXR1cm4gYWRkRW5kVG9VbnJl
YWNoYWJsZShlbnRyeSk7CiB9CiAKIGF1dG8gVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUo
Q29udHJvbEVudHJ5JiBlbnRyeSkgLT4gUmVzdWx0CiB7CiAgICAgYXV0byBibG9jayA9IGVudHJ5
LmNvbnRyb2xEYXRhOwotICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oYmxvY2suYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpJZik7Ci0KICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2suc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkKLSAg
ICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGJsb2NrLnNpZ25hdHVy
ZSgpLT5yZXR1cm5UeXBlKGkpKTsKKyAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3Rh
Y2suY29uc3RydWN0QW5kQXBwZW5kKGJsb2NrLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCBF
bXB0eUV4cHJlc3Npb24pOwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFk
ZENhbGwodW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBSZXN1bHQKK2F1
dG8gVmFsaWRhdGU6OmFkZENhbGwodW5zaWduZWQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9
PSBhcmdzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXpl
KCk7ICsraSkKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZ3Nb
aV0sIHNpZ25hdHVyZS5hcmd1bWVudChpKSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNh
bGwsIGdvdCAiLCBhcmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJndW1lbnQoaSkp
OwotCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgp
OyArK2kpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKTsK
KyAgICAgICAgcmVzdWx0cy5hcHBlbmQoRW1wdHlFeHByZXNzaW9uKTsKICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29u
c3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFJlc3Vs
dAogewotICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlSW5kZXggPCBtX21vZHVsZS50YWJsZUNvdW50
KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fbW9kdWxlLnRhYmxlc1t0YWJsZUluZGV4XS50eXBl
KCkgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3JlZik7Ci0gICAgY29uc3QgYXV0byBhcmd1bWVu
dENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChh
cmd1bWVudENvdW50ID09IGFyZ3Muc2l6ZSgpIC0gMSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFpc1N1YnR5cGUoYXJnc1tpXSwgc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSwgImFyZ3VtZW50
IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZ3NbaV0sICIsIGV4cGVj
dGVkICIsIHNpZ25hdHVyZS5hcmd1bWVudChpKSk7Ci0KLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKGFyZ3MubGFzdCgpICE9IEkzMiwgIm5vbi1pMzIgY2FsbF9pbmRpcmVjdCBpbmRleCAiLCBh
cmdzLmxhc3QoKSk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJl
dHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoc2lnbmF0dXJlLnJldHVy
blR5cGUoaSkpOworICAgICAgICByZXN1bHRzLmFwcGVuZChFbXB0eUV4cHJlc3Npb24pOwogICAg
IHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OnVuaWZ5KGNvbnN0IFN0YWNrJiB2YWx1
ZXMsIGNvbnN0IENvbnRyb2xUeXBlJiBibG9jaykgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjps
b2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSYsIHVpbnQzMl90
KSAtPiBSZXN1bHQKIHsKLSAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGJsb2NrLnNpZ25hdHVy
ZSgpLT5yZXR1cm5Db3VudCgpICE9IHZhbHVlcy5zaXplKCksICIgYmxvY2sgd2l0aCB0eXBlOiAi
LCAqYmxvY2suc2lnbmF0dXJlKCksICIgcmV0dXJuczogIiwgYmxvY2suc2lnbmF0dXJlKCktPnJl
dHVybkNvdW50KCksICIgYnV0IHN0YWNrIGhhczogIiwgdmFsdWVzLnNpemUoKSwgIiB2YWx1ZXMi
KTsKKyAgICByZXR1cm4geyB9OworfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoIWlzU3VidHlwZSh2YWx1ZXNbaV0sIGJsb2NrLnNpZ25hdHVyZSgpLT5yZXR1
cm5UeXBlKGkpKSwgImNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLiAi
LCB2YWx1ZXNbaV0sICIgaXMgbm90IGEgc3VidHlwZSBvZiAiLCBibG9jay5zaWduYXR1cmUoKS0+
cmV0dXJuVHlwZShpKSk7CithdXRvIFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlwZSwgRXhwcmVz
c2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCB1aW50MzJfdCkgLT4gUmVzdWx0Cit7CisgICAgcmV0
dXJuIHsgfTsKK30KKwordGVtcGxhdGU8T3BUeXBlPgorYXV0byBWYWxpZGF0ZTo6YWRkT3AoRXhw
cmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0Cit7CisgICAgcmV0dXJuIHsg
fTsKK30KIAotICAgIC8vIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodmFsdWVzLnNpemUoKSAhPSAx
LCAiYmxvY2sgd2l0aCB0eXBlOiAiLCBtYWtlU3RyaW5nKCpibG9jay5zaWduYXR1cmUoKSksICIg
ZW5kcyB3aXRoIGEgc3RhY2sgY29udGFpbmluZyBtb3JlIHRoYW4gb25lIHZhbHVlIik7Cit0ZW1w
bGF0ZTxPcFR5cGU+CithdXRvIFZhbGlkYXRlOjphZGRPcChFeHByZXNzaW9uVHlwZSwgRXhwcmVz
c2lvblR5cGUsIEV4cHJlc3Npb25UeXBlJikgLT4gUmVzdWx0Cit7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIApAQCAtNDkwLDEwICszNjgsMTAgQEAgc3RhdGljIHZvaWQgZHVtcEV4cHJlc3Npb25TdGFj
ayhjb25zdCBDb21tYVByaW50ZXImIGNvbW1hLCBjb25zdCBWYWxpZGF0ZTo6U3RhY2sKIHsKICAg
ICBkYXRhTG9nKGNvbW1hLCAiIEV4cHJlc3Npb25TdGFjazoiKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9uU3RhY2spCi0gICAgICAgIGRhdGFMb2coY29tbWEs
IG1ha2VTdHJpbmcoZXhwcmVzc2lvbikpOworICAgICAgICBkYXRhTG9nKGNvbW1hLCBtYWtlU3Ry
aW5nKGV4cHJlc3Npb24udHlwZSgpKSk7CiB9CiAKLXZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3Qg
VmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgU3RhY2sqIGV4cHJlc3Np
b25TdGFjaykKK3ZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiBjb250cm9s
U3RhY2ssIGNvbnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IGNvbnRyb2xTdGFjay5zaXplKCk7IGktLTspIHsKICAgICAgICAgZGF0YUxvZygiICAiLCBj
b250cm9sU3RhY2tbaV0uY29udHJvbERhdGEpOwpAQCAtNTA3LDcgKzM4NSw3IEBAIHZvaWQgVmFs
aWRhdGU6OmR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29u
c3QgU3RhY2sqIGV4cHJlCiAKIEV4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlv
bihjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZSkKIHsKLSAgICBWYWxpZGF0ZSBjb250
ZXh0KG1vZHVsZSk7CisgICAgVmFsaWRhdGUgY29udGV4dDsKICAgICBGdW5jdGlvblBhcnNlcjxW
YWxpZGF0ZT4gdmFsaWRhdG9yKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlv
bi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtb2R1bGUpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFModmFsaWRhdG9yLnBhcnNlKCkpOwogICAgIHJldHVybiB7IH07CkBAIC01MTUsNiAr
MzkzLDQgQEAgRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IEZ1
bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ24KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIAotI2luY2x1ZGUgIldhc21WYWxpZGF0ZUlubGluZXMuaCIKLQogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Xb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtV29ya2xp
c3QuY3BwCmluZGV4IGRmOGIzZTg5Y2JhNmY2ZDEyNzk0NTBlZjRiZDRiZDA0Mzc5ODkzZjAuLmZh
NzE2ZTIyNWJlOTEyYzAzNzZiNDhkMTIyMGZlYWRhYjY4ZmM1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Xb3JrbGlzdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVdvcmtsaXN0LmNwcApAQCAtMTUyLDggKzE1MiwxMiBAQCB2b2lk
IFdvcmtsaXN0OjplbnF1ZXVlKFJlZjxQbGFuPiBwbGFuKQogICAgIH0KIAogICAgIGRhdGFMb2dM
bklmKFdhc21Xb3JrbGlzdEludGVybmFsOjp2ZXJib3NlLCAiRW5xdWV1aW5nIHBsYW4iKTsKLSAg
ICBtX3F1ZXVlLmVucXVldWUoeyBQcmlvcml0eTo6UHJlcGFyYXRpb24sIG5leHRUaWNrZXQoKSwg
IFdURk1vdmUocGxhbikgfSk7Ci0gICAgbV9wbGFuRW5xdWV1ZWQtPm5vdGlmeU9uZShsb2NrZXIp
OworICAgIGJvb2wgbXVsdGlUaHJlYWRlZCA9IHBsYW4tPm11bHRpVGhyZWFkZWQoKTsKKyAgICBt
X3F1ZXVlLmVucXVldWUoeyBtdWx0aVRocmVhZGVkID8gUHJpb3JpdHk6OkNvbXBpbGF0aW9uIDog
UHJpb3JpdHk6OlByZXBhcmF0aW9uLCBuZXh0VGlja2V0KCksICBXVEZNb3ZlKHBsYW4pIH0pOwor
ICAgIGlmIChtdWx0aVRocmVhZGVkKQorICAgICAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5QWxs
KGxvY2tlcik7CisgICAgZWxzZQorICAgICAgICBtX3BsYW5FbnF1ZXVlZC0+bm90aWZ5T25lKGxv
Y2tlcik7CiB9CiAKIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlUGxhblN5bmNocm9ub3VzbHkoUGxh
biYgcGxhbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRl
V2FzbU9wc0hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2Fz
bU9wc0hlYWRlci5weQppbmRleCBiMTNhNWUyNGM0ZjQ2MmE0MTVlNTA4OThjMzgyYTgwZGI4MDg2
NDQ3Li5jYjAyODFiOWFjNTNiZDlhZGRlODZjMmM4YjM0YmUzYTdkOGVmNzM4IDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CkBA
IC00MCwxMCArNDAsMTYgQEAgb3Bjb2RlcyA9IHdhc20ub3Bjb2Rlcwogd2FzbU9wc0hGaWxlID0g
b3BlbihhcmdzWzJdLCAidyIpCiAKIAotZGVmIGNwcE1hY3JvKHdhc21PcGNvZGUsIHZhbHVlLCBi
MywgaW5jKToKLSAgICByZXR1cm4gIiBcXFxuICAgIG1hY3JvKCIgKyB3YXNtLnRvQ3BwKHdhc21P
cGNvZGUpICsgIiwgIiArIGhleChpbnQodmFsdWUpKSArICIsICIgKyBiMyArICIsICIgKyBzdHIo
aW5jKSArICIpIgorZGVmIGNwcFR5cGUodHlwZSk6CisgICAgaWYgdHlwZSA9PSAiYm9vbCI6Cisg
ICAgICAgIHJldHVybiAiSTMyIgorICAgIHJldHVybiB0eXBlLmNhcGl0YWxpemUoKQogCiAKK2Rl
ZiBjcHBNYWNybyh3YXNtT3Bjb2RlLCB2YWx1ZSwgYjMsIGluYywgKmV4dHJhQXJncyk6CisgICAg
ZXh0cmFBcmdzU3RyID0gIiwgIiArICIsICIuam9pbihleHRyYUFyZ3MpIGlmIGxlbihleHRyYUFy
Z3MpIGVsc2UgIiIKKyAgICByZXR1cm4gIiBcXFxuICAgIG1hY3JvKCIgKyB3YXNtLnRvQ3BwKHdh
c21PcGNvZGUpICsgIiwgIiArIGhleChpbnQodmFsdWUpKSArICIsICIgKyBiMyArICIsICIgKyBz
dHIoaW5jKSArIGV4dHJhQXJnc1N0ciArICIpIgorCiBkZWYgdHlwZU1hY3JvaXplcigpOgogICAg
IGluYyA9IDAKICAgICBmb3IgdHkgaW4gd2FzbS50eXBlczoKQEAgLTU1LDMzICs2MSw1NSBAQCB0
eXBlX2RlZmluaXRpb25zLmV4dGVuZChbdCBmb3IgdCBpbiB0eXBlTWFjcm9pemVyKCldKQogdHlw
ZV9kZWZpbml0aW9ucyA9ICIiLmpvaW4odHlwZV9kZWZpbml0aW9ucykKIAogCi1kZWYgb3Bjb2Rl
TWFjcm9pemVyKGZpbHRlciwgb3Bjb2RlRmllbGQ9InZhbHVlIik6CitkZWYgb3Bjb2RlTWFjcm9p
emVyKGZpbHRlciwgb3Bjb2RlRmllbGQ9InZhbHVlIiwgbW9kaWZpZXI9Tm9uZSk6CiAgICAgaW5j
ID0gMAogICAgIGZvciBvcCBpbiB3YXNtLm9wY29kZUl0ZXJhdG9yKGZpbHRlcik6CiAgICAgICAg
IGIzb3AgPSAiT29wcyIKICAgICAgICAgaWYgaXNTaW1wbGUob3BbIm9wY29kZSJdKToKICAgICAg
ICAgICAgIGIzb3AgPSBvcFsib3Bjb2RlIl1bImIzb3AiXQotICAgICAgICB5aWVsZCBjcHBNYWNy
byhvcFsibmFtZSJdLCBvcFsib3Bjb2RlIl1bb3Bjb2RlRmllbGRdLCBiM29wLCBpbmMpCisgICAg
ICAgIGV4dHJhQXJncyA9IFtdCisgICAgICAgIGlmIG1vZGlmaWVyOgorICAgICAgICAgICAgZXh0
cmFBcmdzID0gbW9kaWZpZXIob3BbIm9wY29kZSJdKQorICAgICAgICB5aWVsZCBjcHBNYWNybyhv
cFsibmFtZSJdLCBvcFsib3Bjb2RlIl1bb3Bjb2RlRmllbGRdLCBiM29wLCBpbmMsICpleHRyYUFy
Z3MpCiAgICAgICAgIGluYyArPSAxCiAKKworZGVmIG9wY29kZVdpdGhUeXBlc01hY3JvaXplcihm
aWx0ZXIpOgorICAgIGRlZiBtb2RpZmllcihvcCk6CisgICAgICAgIHJldHVybiBbY3BwVHlwZSh0
eXBlKSBmb3IgdHlwZSBpbiBvcFsicGFyYW1ldGVyIl0gKyBvcFsicmV0dXJuIl1dCisgICAgcmV0
dXJuIG9wY29kZU1hY3JvaXplcihmaWx0ZXIsIG1vZGlmaWVyPW1vZGlmaWVyKQorCisKK2RlZiBt
ZW1vcnlMb2FkTWFjcm9pemVyKCk6CisgICAgZGVmIG1vZGlmaWVyKG9wKToKKyAgICAgICAgcmV0
dXJuIFtjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSldCisgICAgcmV0dXJuIG9wY29kZU1hY3JvaXpl
cihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAibWVtb3J5IiBhbmQgbGVuKG9wWyJyZXR1
cm4iXSkgPT0gMSksIG1vZGlmaWVyPW1vZGlmaWVyKQorCisKK2RlZiBtZW1vcnlTdG9yZU1hY3Jv
aXplcigpOgorICAgIGRlZiBtb2RpZmllcihvcCk6CisgICAgICAgIHJldHVybiBbY3BwVHlwZShv
cFsicGFyYW1ldGVyIl1bMV0pXQorICAgIHJldHVybiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9w
OiAob3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJuIl0pID09IDAp
LCBtb2RpZmllcj1tb2RpZmllcikKKworCiBkZWZpbmVzID0gWyIjZGVmaW5lIEZPUl9FQUNIX1dB
U01fU1BFQ0lBTF9PUChtYWNybykiXQogZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNv
ZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBub3QgKGlzVW5hcnkob3ApIG9yIGlzQmluYXJ5KG9wKSBv
ciBvcFsiY2F0ZWdvcnkiXSA9PSAiY29udHJvbCIgb3Igb3BbImNhdGVnb3J5Il0gPT0gIm1lbW9y
eSIgb3Igb3BbImNhdGVnb3J5Il0gPT0gImV4dHRhYmxlIikpXSkKIGRlZmluZXMuYXBwZW5kKCJc
blxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX0NPTlRST0xfRkxPV19PUChtYWNybykiKQogZGVmaW5l
cy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBvcFsiY2F0
ZWdvcnkiXSA9PSAiY29udHJvbCIpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1Jf
RUFDSF9XQVNNX1NJTVBMRV9VTkFSWV9PUChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29wIGZv
ciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc1VuYXJ5KG9wKSBhbmQgaXNTaW1w
bGUob3ApKV0pCitkZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9wIGluIG9wY29kZVdpdGhUeXBlc01h
Y3JvaXplcihsYW1iZGEgb3A6IGlzVW5hcnkob3ApIGFuZCBpc1NpbXBsZShvcCkpXSkKIGRlZmlu
ZXMuYXBwZW5kKCJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZX09QKG1hY3JvKSBcXFxu
ICAgIEZPUl9FQUNIX1dBU01fU0lNUExFX1VOQVJZX09QKG1hY3JvKSIpCi1kZWZpbmVzLmV4dGVu
ZChbb3AgZm9yIG9wIGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IGlzVW5hcnkob3ApIGFu
ZCBub3QgKGlzU2ltcGxlKG9wKSkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bj
b2RlV2l0aFR5cGVzTWFjcm9pemVyKGxhbWJkYSBvcDogaXNVbmFyeShvcCkgYW5kIG5vdCAoaXNT
aW1wbGUob3ApKSldKQogZGVmaW5lcy5hcHBlbmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01f
U0lNUExFX0JJTkFSWV9PUChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBv
cGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIGlzU2ltcGxlKG9wKSld
KQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVXaXRoVHlwZXNNYWNyb2l6ZXIo
bGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIGlzU2ltcGxlKG9wKSldKQogZGVmaW5lcy5hcHBl
bmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fQklOQVJZX09QKG1hY3JvKSBcXFxuICAgIEZP
Ul9FQUNIX1dBU01fU0lNUExFX0JJTkFSWV9PUChtYWNybykiKQotZGVmaW5lcy5leHRlbmQoW29w
IGZvciBvcCBpbiBvcGNvZGVNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIG5v
dCAoaXNTaW1wbGUob3ApKSldKQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBvcGNvZGVX
aXRoVHlwZXNNYWNyb2l6ZXIobGFtYmRhIG9wOiBpc0JpbmFyeShvcCkgYW5kIG5vdCAoaXNTaW1w
bGUob3ApKSldKQogZGVmaW5lcy5hcHBlbmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fTUVN
T1JZX0xPQURfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3AgaW4gb3Bjb2Rl
TWFjcm9pemVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09ICJtZW1vcnkiIGFuZCBsZW4o
b3BbInJldHVybiJdKSA9PSAxKSldKQorZGVmaW5lcy5leHRlbmQoW29wIGZvciBvcCBpbiBtZW1v
cnlMb2FkTWFjcm9pemVyKCldKQogZGVmaW5lcy5hcHBlbmQoIlxuXG4jZGVmaW5lIEZPUl9FQUNI
X1dBU01fTUVNT1JZX1NUT1JFX09QKG1hY3JvKSIpCi1kZWZpbmVzLmV4dGVuZChbb3AgZm9yIG9w
IGluIG9wY29kZU1hY3JvaXplcihsYW1iZGEgb3A6IChvcFsiY2F0ZWdvcnkiXSA9PSAibWVtb3J5
IiBhbmQgbGVuKG9wWyJyZXR1cm4iXSkgPT0gMCkpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Ig
b3AgaW4gbWVtb3J5U3RvcmVNYWNyb2l6ZXIoKV0pCiBkZWZpbmVzLmFwcGVuZCgiXG5cbiNkZWZp
bmUgRk9SX0VBQ0hfV0FTTV9FWFRfVEFCTEVfT1AobWFjcm8pIikKLWRlZmluZXMuZXh0ZW5kKFtv
cCBmb3Igb3AgaW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09
ICJleHR0YWJsZSIpLCAiZXh0ZW5kZWRPcCIpXSkKK2RlZmluZXMuZXh0ZW5kKFtvcCBmb3Igb3Ag
aW4gb3Bjb2RlTWFjcm9pemVyKGxhbWJkYSBvcDogKG9wWyJjYXRlZ29yeSJdID09ICJleHR0YWJs
ZSIpLCBvcGNvZGVGaWVsZD0iZXh0ZW5kZWRPcCIpXSkKIGRlZmluZXMuYXBwZW5kKCJcblxuIikK
IAogZGVmaW5lcyA9ICIiLmpvaW4oZGVmaW5lcykKQEAgLTEzMywxMyArMTYxLDEzIEBAIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgZXhwZWN0ZWRWZXJzaW9uTnVtYmVyID0gIiIiICsgd2FzbS5l
eHBlY3RlZFZlcnNpb25OdW1iCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bVR5cGVzID0g
IiIiICsgc3RyKGxlbih0eXBlcykpICsgIiIiOwogCiAiIiIgKyB0eXBlX2RlZmluaXRpb25zICsg
IiIiCi0jZGVmaW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkLCBiM3R5cGUsIGluYykgbmFt
ZSA9IGlkLAorI2RlZmluZSBDUkVBVEVfRU5VTV9WQUxVRShuYW1lLCBpZCwgLi4uKSBuYW1lID0g
aWQsCiBlbnVtIFR5cGUgOiBpbnQ4X3QgewogICAgIEZPUl9FQUNIX1dBU01fVFlQRShDUkVBVEVf
RU5VTV9WQUxVRSkKIH07CiAjdW5kZWYgQ1JFQVRFX0VOVU1fVkFMVUUKIAotI2RlZmluZSBDUkVB
VEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMpIGNhc2UgaWQ6IHJldHVybiB0cnVlOworI2Rl
ZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgLi4uKSBjYXNlIGlkOiByZXR1cm4gdHJ1ZTsKIHRl
bXBsYXRlIDx0eXBlbmFtZSBJbnQ+CiBpbmxpbmUgYm9vbCBpc1ZhbGlkVHlwZShJbnQgaSkKIHsK
QEAgLTE1Miw3ICsxODAsNyBAQCBpbmxpbmUgYm9vbCBpc1ZhbGlkVHlwZShJbnQgaSkKIH0KICN1
bmRlZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUs
IGluYykgY2FzZSBuYW1lOiByZXR1cm4gYjN0eXBlOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1l
LCBpZCwgYjN0eXBlLCAuLi4pIGNhc2UgbmFtZTogcmV0dXJuIGIzdHlwZTsKIGlubGluZSBCMzo6
VHlwZSB0b0IzVHlwZShUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNjMs
NyArMTkxLDcgQEAgaW5saW5lIEIzOjpUeXBlIHRvQjNUeXBlKFR5cGUgdHlwZSkKIH0KICN1bmRl
ZiBDUkVBVEVfQ0FTRQogCi0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUsIGlu
YykgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4u
LikgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7CiBpbmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmlu
ZyhUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNzQsNyArMjAyLDcgQEAg
aW5saW5lIGNvbnN0IGNoYXIqIG1ha2VTdHJpbmcoVHlwZSB0eXBlKQogfQogI3VuZGVmIENSRUFU
RV9DQVNFCiAKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzdHlwZSwgaW5jKSBjYXNl
IGlkOiByZXR1cm4gaW5jOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBp
bmMsIC4uLikgY2FzZSBpZDogcmV0dXJuIGluYzsKIGlubGluZSBpbnQgbGluZWFyaXplVHlwZShU
eXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xODUsNyArMjEzLDcgQEAgaW5s
aW5lIGludCBsaW5lYXJpemVUeXBlKFR5cGUgdHlwZSkKIH0KICN1bmRlZiBDUkVBVEVfQ0FTRQog
Ci0jZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUsIGluYykgY2FzZSBpbmM6IHJl
dHVybiBuYW1lOworI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwgYjN0eXBlLCBpbmMsIC4u
LikgY2FzZSBpbmM6IHJldHVybiBuYW1lOwogaW5saW5lIFR5cGUgbGluZWFyaXplZFRvVHlwZShp
bnQgaSkKIHsKICAgICBzd2l0Y2ggKGkpIHsKQEAgLTIwNyw3ICsyMzUsNyBAQCBpbmxpbmUgVHlw
ZSBsaW5lYXJpemVkVG9UeXBlKGludCBpKQogICAgIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JF
X09QKG1hY3JvKSBcXAogICAgIG1hY3JvKEV4dFRhYmxlLCAweEZDLCBPb3BzLCAwKQogCi0jZGVm
aW5lIENSRUFURV9FTlVNX1ZBTFVFKG5hbWUsIGlkLCBiM29wLCBpbmMpIG5hbWUgPSBpZCwKKyNk
ZWZpbmUgQ1JFQVRFX0VOVU1fVkFMVUUobmFtZSwgaWQsIC4uLikgbmFtZSA9IGlkLAogCiBlbnVt
IE9wVHlwZSA6IHVpbnQ4X3QgewogICAgIEZPUl9FQUNIX1dBU01fT1AoQ1JFQVRFX0VOVU1fVkFM
VUUpCkBAIC0yNDYsNyArMjc0LDcgQEAgZW51bSBjbGFzcyBFeHRUYWJsZU9wVHlwZSA6IHVpbnQ4
X3QgewogaW5saW5lIGJvb2wgaXNDb250cm9sT3AoT3BUeXBlIG9wKQogewogICAgIHN3aXRjaCAo
b3ApIHsKLSNkZWZpbmUgQ1JFQVRFX0NBU0UobmFtZSwgaWQsIGIzb3AsIGluYykgY2FzZSBPcFR5
cGU6Om5hbWU6CisjZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBPcFR5cGU6Om5h
bWU6CiAgICAgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AoQ1JFQVRFX0NBU0UpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogI3VuZGVmIENSRUFURV9DQVNFCkBAIC0yNTksNyArMjg3LDcgQEAg
aW5saW5lIGJvb2wgaXNDb250cm9sT3AoT3BUeXBlIG9wKQogaW5saW5lIGJvb2wgaXNTaW1wbGUo
VW5hcnlPcFR5cGUgb3ApCiB7CiAgICAgc3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVfQ0FT
RShuYW1lLCBpZCwgYjNvcCwgaW5jKSBjYXNlIFVuYXJ5T3BUeXBlOjpuYW1lOgorI2RlZmluZSBD
UkVBVEVfQ0FTRShuYW1lLCAuLi4pIGNhc2UgVW5hcnlPcFR5cGU6Om5hbWU6CiAgICAgRk9SX0VB
Q0hfV0FTTV9TSU1QTEVfVU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB0cnVl
OwogI3VuZGVmIENSRUFURV9DQVNFCkBAIC0yNzIsNyArMzAwLDcgQEAgaW5saW5lIGJvb2wgaXNT
aW1wbGUoVW5hcnlPcFR5cGUgb3ApCiBpbmxpbmUgYm9vbCBpc1NpbXBsZShCaW5hcnlPcFR5cGUg
b3ApCiB7CiAgICAgc3dpdGNoIChvcCkgewotI2RlZmluZSBDUkVBVEVfQ0FTRShuYW1lLCBpZCwg
YjNvcCwgaW5jKSBjYXNlIEJpbmFyeU9wVHlwZTo6bmFtZToKKyNkZWZpbmUgQ1JFQVRFX0NBU0Uo
bmFtZSwgLi4uKSBjYXNlIEJpbmFyeU9wVHlwZTo6bmFtZToKICAgICBGT1JfRUFDSF9XQVNNX1NJ
TVBMRV9CSU5BUllfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHJldHVybiB0cnVlOwogI3VuZGVm
IENSRUFURV9DQVNFCkBAIC0yOTQsNyArMzIyLDcgQEAgaW5saW5lIHVpbnQzMl90IG1lbW9yeUxv
ZzJBbGlnbm1lbnQoT3BUeXBlIG9wKQogICAgIHJldHVybiAwOwogfQogCi0jZGVmaW5lIENSRUFU
RV9DQVNFKG5hbWUsIGlkLCBiM3R5cGUsIGluYykgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7Cisj
ZGVmaW5lIENSRUFURV9DQVNFKG5hbWUsIC4uLikgY2FzZSBuYW1lOiByZXR1cm4gI25hbWU7CiBp
bmxpbmUgY29uc3QgY2hhciogbWFrZVN0cmluZyhPcFR5cGUgb3ApCiB7CiAgICAgc3dpdGNoIChv
cCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNt
VmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2Vu
ZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCA3ODZkMDk2YjY2ZTY4MmRkNjU3N2QyZGUyNjUwODJiNzIxMTU2YmNhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQorKysgL2Rldi9u
dWxsCkBAIC0xLDE3MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0jIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSMgVGhpcyB0b29sIGhhcyBhIGNvdXBsZSBvZiBo
ZWxwZnVsIG1hY3JvcyB0byBwcm9jZXNzIFdhc20gZmlsZXMgZnJvbSB0aGUgd2FzbS5qc29uLgot
Ci1mcm9tIGdlbmVyYXRlV2FzbSBpbXBvcnQgKgotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgc3lz
Ci0KLXBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIDx3
YXNtLmpzb24+IDxXYXNtT3BzLmg+IikKLShvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9h
cmdzKHN5cy5hcmd2WzA6XSkKLWlmIGxlbihhcmdzKSAhPSAzOgotICAgIHBhcnNlci5lcnJvcihw
YXJzZXIudXNhZ2UpCi0KLXdhc20gPSBXYXNtKGFyZ3NbMF0sIGFyZ3NbMV0pCi1vcGNvZGVzID0g
d2FzbS5vcGNvZGVzCi13YXNtVmFsaWRhdGVJbmxpbmVzSEZpbGUgPSBvcGVuKGFyZ3NbMl0sICJ3
IikKLQotCi1kZWYgY3BwVHlwZShuYW1lKToKLSAgICByZXN1bHQgPSB7Ci0gICAgICAgICJib29s
IjogIkkzMiIsCi0gICAgICAgICJhZGRyIjogIkkzMiIsCi0gICAgICAgICJpMzIiOiAiSTMyIiwK
LSAgICAgICAgImk2NCI6ICJJNjQiLAotICAgICAgICAiZjMyIjogIkYzMiIsCi0gICAgICAgICJm
NjQiOiAiRjY0IiwKLSAgICB9LmdldChuYW1lLCBOb25lKQotICAgIGlmIHJlc3VsdCA9PSBOb25l
OgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIHR5cGUgbmFtZTogIiArIG5hbWUp
Ci0gICAgcmV0dXJuIHJlc3VsdAotCi0KLWRlZiB0b0NwcChuYW1lKToKLSAgICByZXR1cm4gd2Fz
bS50b0NwcChuYW1lKQotCi0KLWRlZiB1bmFyeU1hY3JvKG5hbWUpOgotICAgIG9wID0gb3Bjb2Rl
c1tuYW1lXQotICAgIHJldHVybiAiIiIKLXRlbXBsYXRlPD4gYXV0byBWYWxpZGF0ZTo6YWRkT3A8
T3BUeXBlOjoiIiIgKyB0b0NwcChuYW1lKSArICIiIj4oRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZSAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQotICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDog
IiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21hdGNoIik7Ci0KLSAgICByZXN1bHQgPSAi
IiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAgcmV0dXJuIHsgfTsKLX0K
LSIiIgotCi0KLWRlZiBiaW5hcnlNYWNybyhuYW1lKToKLSAgICBvcCA9IG9wY29kZXNbbmFtZV0K
LSAgICByZXR1cm4gIiIiCi10ZW1wbGF0ZTw+IGF1dG8gVmFsaWRhdGU6OmFkZE9wPE9wVHlwZTo6
IiIiICsgdG9DcHAobmFtZSkgKyAiIiI+KEV4cHJlc3Npb25UeXBlIGxlZnQsIEV4cHJlc3Npb25U
eXBlIHJpZ2h0LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAo
VU5MSUtFTFkobGVmdCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIp
KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0
aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBsZWZ0IHZhbHVlIHR5cGUgbWlzbWF0Y2giKTsK
LQotICAgIGlmIChVTkxJS0VMWShyaWdodCAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIi
XVsxXSkgKyAiIiIpKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5
cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiByaWdodCB2YWx1ZSB0eXBl
IG1pc21hdGNoIik7Ci0KLSAgICByZXN1bHQgPSAiIiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVsw
XSkgKyAiIiI7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLSIiIgotCi1kZWYgbG9hZE1hY3JvKG5hbWUp
OgotICAgIG9wID0gb3Bjb2Rlc1tuYW1lXQotICAgIHJldHVybiAiIiIKLSAgICBjYXNlIExvYWRP
cFR5cGU6OiIiIiArIHRvQ3BwKG5hbWUpICsgIiIiOiB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShw
b2ludGVyICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzBdKSArICIiIikpCi0gICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0aW9u
IGZhaWxlZDogIiIiICsgbmFtZSArICIiIiBwb2ludGVyIHR5cGUgbWlzbWF0Y2giKTsKLQotICAg
ICAgICByZXN1bHQgPSAiIiIgKyBjcHBUeXBlKG9wWyJyZXR1cm4iXVswXSkgKyAiIiI7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfSIiIgotCi0KLWRlZiBzdG9yZU1hY3JvKG5hbWUpOgotICAg
IG9wID0gb3Bjb2Rlc1tuYW1lXQotICAgIHJldHVybiAiIiIKLSAgICBjYXNlIFN0b3JlT3BUeXBl
OjoiIiIgKyB0b0NwcChuYW1lKSArICIiIjogewotICAgICAgICBpZiAoVU5MSUtFTFkocG9pbnRl
ciAhPSAiIiIgKyBjcHBUeXBlKG9wWyJwYXJhbWV0ZXIiXVswXSkgKyAiIiIpKQotICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0OjplcnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWls
ZWQ6ICIiIiArIG5hbWUgKyAiIiIgcG9pbnRlciB0eXBlIG1pc21hdGNoIik7Ci0KLSAgICAgICAg
aWYgKFVOTElLRUxZKHZhbHVlICE9ICIiIiArIGNwcFR5cGUob3BbInBhcmFtZXRlciJdWzFdKSAr
ICIiIikpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+
KCJ2YWxpZGF0aW9uIGZhaWxlZDogIiIiICsgbmFtZSArICIiIiB2YWx1ZSB0eXBlIG1pc21hdGNo
Iik7Ci0KLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9IiIiCi0KLQotdW5hcnlTcGVjaWFsaXph
dGlvbnMgPSAiIi5qb2luKFtvcCBmb3Igb3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihpc1VuYXJ5
LCB1bmFyeU1hY3JvKV0pCi1iaW5hcnlTcGVjaWFsaXphdGlvbnMgPSAiIi5qb2luKFtvcCBmb3Ig
b3AgaW4gd2FzbS5vcGNvZGVJdGVyYXRvcihpc0JpbmFyeSwgYmluYXJ5TWFjcm8pXSkKLWxvYWRD
YXNlcyA9ICIiLmpvaW4oW29wIGZvciBvcCBpbiB3YXNtLm9wY29kZUl0ZXJhdG9yKGxhbWJkYSBv
cDogb3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxlbihvcFsicmV0dXJuIl0pID09IDEs
IGxvYWRNYWNybyldKQotc3RvcmVDYXNlcyA9ICIiLmpvaW4oW29wIGZvciBvcCBpbiB3YXNtLm9w
Y29kZUl0ZXJhdG9yKGxhbWJkYSBvcDogb3BbImNhdGVnb3J5Il0gPT0gIm1lbW9yeSIgYW5kIGxl
bihvcFsicmV0dXJuIl0pID09IDAsIHN0b3JlTWFjcm8pXSkKLQotY29udGVudHMgPSB3YXNtLmhl
YWRlciArICIiIgotLy8gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGlubGluZWQgYnkgV2Fz
bVZhbGlkYXRlLmNwcCBvbmx5ISBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGVsc2V3aGVyZS4K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSNpZiBBU1NFUlRfRElTQUJMRUQKLUlHTk9SRV9SRVRVUk5f
VFlQRV9XQVJOSU5HU19CRUdJTgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7Ci0KLSIiIiArIHVuYXJ5U3BlY2lhbGl6YXRpb25zICsgYmluYXJ5U3BlY2lhbGl6YXRp
b25zICsgIiIiCi0KLWF1dG8gVmFsaWRhdGU6OmxvYWQoTG9hZE9wVHlwZSBvcCwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwgdWludDMyX3QpIC0+IFJlc3Vs
dAotewotICAgIGlmIChVTkxJS0VMWSghaGFzTWVtb3J5KCkpKQotICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxSZXN1bHQ6OmVycm9yX3R5cGU+KCJ2YWxpZGF0aW9uIGZhaWxlZDogbG9hZCBpbnN0
cnVjdGlvbiB3aXRob3V0IG1lbW9yeSIpOwotCi0gICAgc3dpdGNoIChvcCkgewotIiIiICsgbG9h
ZENhc2VzICsgIiIiCi0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1hdXRv
IFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90KSAtPiBSZXN1bHQKLXsKLSAgICBpZiAoVU5M
SUtFTFkoIWhhc01lbW9yeSgpKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8UmVzdWx0Ojpl
cnJvcl90eXBlPigidmFsaWRhdGlvbiBmYWlsZWQ6IHN0b3JlIGluc3RydWN0aW9uIHdpdGhvdXQg
bWVtb3J5Iik7Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0iIiIgKyBzdG9yZUNhc2VzICsgIiIiCi0g
ICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQotCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1JR05PUkVfUkVUVVJOX1RZUEVfV0FSTklO
R1NfRU5ECi0jZW5kaWYKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotIiIiCi0K
LXdhc21WYWxpZGF0ZUlubGluZXNIRmlsZS53cml0ZShjb250ZW50cykKLXdhc21WYWxpZGF0ZUlu
bGluZXNIRmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHkuY3BwCmluZGV4IGZjNDE1OGYxNjg3ZDM4MzExMTk1OWIyMTZjNDdkNGQ3MmNk
NjRhMjUuLjM2NDllNTcwZjJmNjI2YTBhM2VhZWMxNmUyOTk3MWFlZjlkYzEwYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCkBAIC0yMjks
NyArMjI5LDcgQEAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2UqIHByb21pc2UKICAgICAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAg
ICAgICByZXNvbHZlKHZtLCBnbG9iYWxPYmplY3QsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUs
IGltcG9ydE9iamVjdCwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVLaW5kLCBj
cmVhdGlvbk1vZGUpOwogICAgICAgICB9KTsKLSAgICB9KSwgJldhc206OmNyZWF0ZUpTVG9XYXNt
V3JhcHBlciwgJldhc206Om9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKTsKKyAgICB9KSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgY29uc3QgSWRlbnRpZmllciYg
bW9kdWxlS2V5LCBKU1ZhbHVlIGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgUmVzb2x2
ZSByZXNvbHZlS2luZCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKQEAgLTMyOSwx
MiArMzI5LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5VmFsaWRhdGVGdW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGF1dG8gW2Jhc2UsIGJ5dGVTaXplXSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBCQlFQbGFuIHBsYW4oJnZtLndhc21D
b250ZXh0LCBCQlFQbGFuOjpWYWxpZGF0aW9uLCBQbGFuOjpkb250RmluYWxpemUoKSk7CiAgICAg
Ly8gRklYTUU6IFdlIG1pZ2h0IHdhbnQgdG8gdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiBoZXJlIGlm
IHdlIGRldGVjdCB0aGF0IHNvbWV0aGluZyB3aWxsIE9PTS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDE1Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4ocGxhbi5wYXJzZUFuZFZhbGlkYXRlTW9kdWxlKGJhc2UsIGJ5dGVTaXpl
KSkpOworICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9t
VmFsdWUodm0sIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgYXV0byB2YWxp
ZGF0aW9uUmVzdWx0ID0gV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZVN5bmMoJnZtLndhc21Db250ZXh0
LCBXVEZNb3ZlKHNvdXJjZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHZhbGlkYXRpb25SZXN1bHQuaGFzX3ZhbHVlKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1pbmdJbnRlcm5hbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwCmluZGV4IDNiYTYyNDNjNGNjMTYzZjY4MGEzNWE2Nzc2NTUxZGVjMDNm
MDdiMDcuLjg0MTljM2FjZjc5Y2Q1ODBiMjczMjU3ZGM5ZDc1YmE2M2ZlYjYyZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoSlNH
bG9iYWxPYmplYwogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6OmNyZWF0ZVByaXZhdGVNb2R1bGVLZXkoKSwgbW9kdWxlLCBpbXBvcnRPYmplY3Qs
IGluc3RhbmNlU3RydWN0dXJlLCBSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSwg
V2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKLSAgICBpbnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFu
Y2UtPm1lbW9yeU1vZGUoKSwgJldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Om9w
ZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKSwgaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1v
ZGU6OkZyb21KUyk7CisgICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCwgbW9kdWxlLT5tb2R1bGUoKS5jb21waWxlU3luYygmdm0ud2FzbUNvbnRleHQsIGluc3Rh
bmNlLT5tZW1vcnlNb2RlKCkpLCBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZTo6RnJv
bUpTKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoaW5zdGFuY2UpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>