<?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>170316</bug_id>
          
          <creation_ts>2017-03-30 17:24:03 -0700</creation_ts>
          <short_desc>WebAssembly: Ref count Signature and SignatureInformation should not care about VM</short_desc>
          <delta_ts>2017-03-31 15:41:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1293040</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 17:24:03 -0700</bug_when>
    <thetext>We can refcount individual ones. Or we can have VM refcount the entire table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293077</commentid>
    <comment_count>1</comment_count>
      <attachid>305937</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 19:43:17 -0700</bug_when>
    <thetext>Created attachment 305937
WIP

crashes in debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293092</commentid>
    <comment_count>2</comment_count>
      <attachid>305943</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 22:57:26 -0700</bug_when>
    <thetext>Created attachment 305943
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293102</commentid>
    <comment_count>3</comment_count>
      <attachid>305943</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-30 23:29:59 -0700</bug_when>
    <thetext>Comment on attachment 305943
patch

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

I&apos;m not sure all the `const Signature *` need to be RefPtr: their lifetime is already bound by their caller. The way I tried to set this up, raw pointers are just things you can access without thinking about who owns it: you don&apos;t, someone else up your call chain does. I a way this is the &quot;dumb pointer&quot; idiom.

I&apos;ll need to take another look when I&apos;m not as tired :)

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:-422
&gt; -    String signatureDescription = SignatureInformation::get(vm, signatureIndex)-&gt;toString();

I think Keith had made this conditional on debug because it was slow?

&gt; Source/JavaScriptCore/wasm/WasmFormat.h:237
&gt; +    Vector&lt;RefPtr&lt;Signature&gt;&gt; usedSignatures;

Isn&apos;t it kinda weird to duplicate this information? We already have a list of indices we use above, but it&apos;s not nicely RAII refcount so we dup it here. :(

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:111
&gt; +    WASM_PARSER_FAIL_IF(!m_result.module-&gt;usedSignatures.tryReserveCapacity(count), &quot;can&apos;t allocate enough memory for Type section&apos;s &quot;, count, &quot; entries&quot;);

The error message is misleading since this allocation isn&apos;t the same as above, but errors out the same.

&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:74
&gt; +    if (argumentCount &gt; 1024 * 1024)

This is the wrong place to enforce a limit. We should do this in the parser, and in one shot as part of bug #165833.

&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:77
&gt; +    void* memory = Signature::operator new (allocatedSize(argumentCount));

Other parts of the code use the try* allocators so that wasm can OOM without being sad. It was tryFastCalloc above, we should keep that property here.

&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:153
&gt; +        info.m_nextIndex = Signature::invalidIndex + 1;

Here and elsewhere, it would be nice to have a symbolic constant for &quot;first valid index&quot;. This otherwise assumes that the invalid index is 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293193</commentid>
    <comment_count>4</comment_count>
      <attachid>305943</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-31 10:16:58 -0700</bug_when>
    <thetext>Comment on attachment 305943
patch

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

r- on some comments JF and I made.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:412
&gt; +auto B3IRGenerator::addArguments(const RefPtr&lt;Signature&gt;&amp; signature) -&gt; PartialResult

style: Revert this or use Signature&amp; here. It&apos;s an anti-pattern to use a ref to a container class when the function isn&apos;t going hold any reference anyway.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:884
&gt; +auto B3IRGenerator::addCall(uint32_t functionIndex, RefPtr&lt;Signature&gt;&amp;&amp; signature, Vector&lt;ExpressionType&gt;&amp; args, ExpressionType&amp; result) -&gt; PartialResult

ditto.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:965
&gt; +auto B3IRGenerator::addCallIndirect(RefPtr&lt;Signature&gt;&amp;&amp; signature, SignatureIndex signatureIndex, Vector&lt;ExpressionType&gt;&amp; args, ExpressionType&amp; result) -&gt; PartialResult

ditto.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1086
&gt; +static void createJSToWasmWrapper(CompilationContext&amp; compilationContext, WasmInternalFunction&amp; function, const RefPtr&lt;Signature&gt;&amp; signature, const ModuleInformation&amp; info)

ditto.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:-422
&gt;&gt; -    String signatureDescription = SignatureInformation::get(vm, signatureIndex)-&gt;toString();
&gt; 
&gt; I think Keith had made this conditional on debug because it was slow?

Moving this into the macro is fine since that case of the macro only runs if you have the option set.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:74
&gt;&gt; +    if (argumentCount &gt; 1024 * 1024)
&gt; 
&gt; This is the wrong place to enforce a limit. We should do this in the parser, and in one shot as part of bug #165833.

Agreed.

&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:151
&gt; +    if (!info.m_signatureMap.size()) {

nit: You could do info.m_signatureMap.isEmpty() I think it&apos;s a little easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293223</commentid>
    <comment_count>5</comment_count>
      <attachid>305943</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 11:52:56 -0700</bug_when>
    <thetext>Comment on attachment 305943
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:412
&gt;&gt; +auto B3IRGenerator::addArguments(const RefPtr&lt;Signature&gt;&amp; signature) -&gt; PartialResult
&gt; 
&gt; style: Revert this or use Signature&amp; here. It&apos;s an anti-pattern to use a ref to a container class when the function isn&apos;t going hold any reference anyway.

I don&apos;t agree. I made &quot;const RefPtr&lt;Signature&gt;&amp;&quot; precisely because the function doesn&apos;t need to ref it.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:884
&gt;&gt; +auto B3IRGenerator::addCall(uint32_t functionIndex, RefPtr&lt;Signature&gt;&amp;&amp; signature, Vector&lt;ExpressionType&gt;&amp; args, ExpressionType&amp; result) -&gt; PartialResult
&gt; 
&gt; ditto.

I think these should also be &quot;const RefPtr&lt;Signature&gt;&amp;&quot;

&gt;&gt; Source/JavaScriptCore/wasm/WasmFormat.h:237
&gt;&gt; +    Vector&lt;RefPtr&lt;Signature&gt;&gt; usedSignatures;
&gt; 
&gt; Isn&apos;t it kinda weird to duplicate this information? We already have a list of indices we use above, but it&apos;s not nicely RAII refcount so we dup it here. :(

I think this is the price to pay for using a raw uint32_t for signature index. We could make this fancier, but I think that belongs in its own patch.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:111
&gt;&gt; +    WASM_PARSER_FAIL_IF(!m_result.module-&gt;usedSignatures.tryReserveCapacity(count), &quot;can&apos;t allocate enough memory for Type section&apos;s &quot;, count, &quot; entries&quot;);
&gt; 
&gt; The error message is misleading since this allocation isn&apos;t the same as above, but errors out the same.

To a user of web assembly, what&apos;s the difference?

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:74
&gt;&gt;&gt; +    if (argumentCount &gt; 1024 * 1024)
&gt;&gt; 
&gt;&gt; This is the wrong place to enforce a limit. We should do this in the parser, and in one shot as part of bug #165833.
&gt; 
&gt; Agreed.

Ok.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:77
&gt;&gt; +    void* memory = Signature::operator new (allocatedSize(argumentCount));
&gt; 
&gt; Other parts of the code use the try* allocators so that wasm can OOM without being sad. It was tryFastCalloc above, we should keep that property here.

Ok.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:151
&gt;&gt; +    if (!info.m_signatureMap.size()) {
&gt; 
&gt; nit: You could do info.m_signatureMap.isEmpty() I think it&apos;s a little easier to read.

ok.

&gt;&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:153
&gt;&gt; +        info.m_nextIndex = Signature::invalidIndex + 1;
&gt; 
&gt; Here and elsewhere, it would be nice to have a symbolic constant for &quot;first valid index&quot;. This otherwise assumes that the invalid index is 0.

sgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293228</commentid>
    <comment_count>6</comment_count>
      <attachid>305943</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 11:57:59 -0700</bug_when>
    <thetext>Comment on attachment 305943
patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:77
&gt;&gt;&gt; +    void* memory = Signature::operator new (allocatedSize(argumentCount));
&gt;&gt; 
&gt;&gt; Other parts of the code use the try* allocators so that wasm can OOM without being sad. It was tryFastCalloc above, we should keep that property here.
&gt; 
&gt; Ok.

Actually, Ima keep this as is. Our handling of an argument count limit should make tryMalloc here useless. We should enforce our own limit during module parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293231</commentid>
    <comment_count>7</comment_count>
      <attachid>305943</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 12:02:19 -0700</bug_when>
    <thetext>Comment on attachment 305943
patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:412
&gt;&gt;&gt; +auto B3IRGenerator::addArguments(const RefPtr&lt;Signature&gt;&amp; signature) -&gt; PartialResult
&gt;&gt; 
&gt;&gt; style: Revert this or use Signature&amp; here. It&apos;s an anti-pattern to use a ref to a container class when the function isn&apos;t going hold any reference anyway.
&gt; 
&gt; I don&apos;t agree. I made &quot;const RefPtr&lt;Signature&gt;&amp;&quot; precisely because the function doesn&apos;t need to ref it.

I misread your comment. Anyways, I still don&apos;t agree. We use this pattern all over the place in JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293233</commentid>
    <comment_count>8</comment_count>
      <attachid>305943</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 12:03:50 -0700</bug_when>
    <thetext>Comment on attachment 305943
patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:412
&gt;&gt;&gt;&gt; +auto B3IRGenerator::addArguments(const RefPtr&lt;Signature&gt;&amp; signature) -&gt; PartialResult
&gt;&gt;&gt; 
&gt;&gt;&gt; style: Revert this or use Signature&amp; here. It&apos;s an anti-pattern to use a ref to a container class when the function isn&apos;t going hold any reference anyway.
&gt;&gt; 
&gt;&gt; I don&apos;t agree. I made &quot;const RefPtr&lt;Signature&gt;&amp;&quot; precisely because the function doesn&apos;t need to ref it.
&gt; 
&gt; I misread your comment. Anyways, I still don&apos;t agree. We use this pattern all over the place in JSC.

Also, I think the const RefPtr&lt;Signature&gt;&amp; does communicate something to us here. It says somebody calling us is ensuring the proper lifetime. I think it&apos;s an information regression to use Signature*. I can see an argument for using Signature&amp;, but I like knowing when something is ref counted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293260</commentid>
    <comment_count>9</comment_count>
      <attachid>306001</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 12:33:04 -0700</bug_when>
    <thetext>Created attachment 306001
patch

Addressed most comments. I also switched to using Ref instead of RefPtr. There is no reason a signature should ever be null. This would be very wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293294</commentid>
    <comment_count>10</comment_count>
      <attachid>306001</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-31 14:06:44 -0700</bug_when>
    <thetext>Comment on attachment 306001
patch

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

r=me

&gt; Source/JavaScriptCore/wasm/WasmSignature.cpp:72
&gt; +    void* memory = Signature::operator new (allocatedSize(argumentCount));
&gt; +    Signature* result = new (memory) Signature(argumentCount);

Why not use the NotNull flag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293304</commentid>
    <comment_count>11</comment_count>
      <attachid>306012</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 14:48:04 -0700</bug_when>
    <thetext>Created attachment 306012
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293305</commentid>
    <comment_count>12</comment_count>
      <attachid>306012</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 14:48:32 -0700</bug_when>
    <thetext>Comment on attachment 306012
patch

This is the patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293329</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-31 15:19:03 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/214691/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293335</commentid>
    <comment_count>14</comment_count>
      <attachid>306012</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-03-31 15:41:56 -0700</bug_when>
    <thetext>Comment on attachment 306012
patch

Looks good!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305937</attachid>
            <date>2017-03-30 19:43:17 -0700</date>
            <delta_ts>2017-03-30 22:57:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>41240</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjE0NjQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDExICsxNTQsNiBAQCBjbGFzcyBEYXRhYmFzZTsKIG5hbWVzcGFjZSBET01KSVQgewogY2xhc3Mg
U2lnbmF0dXJlOwogfQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLW5hbWVzcGFjZSBXYXNtIHsK
LWNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uOwotfQotI2VuZGlmCiAKIHN0cnVjdCBIYXNoVGFi
bGU7CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CkBAIC0zNjgsMTAgKzM2Myw2IEBAIHB1YmxpYzoKICAg
ICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+
IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LSAgICBzdGQ6Om9uY2VfZmxhZyBtX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbk9uY2VGbGFnOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbj4gbV93YXNtU2ln
bmF0dXJlSW5mb3JtYXRpb247Ci0jZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZURl
ZmVycmVkVGltZXI+IHByb21pc2VEZWZlcnJlZFRpbWVyOwogICAgIAogICAgIEpTQ2VsbCogY3Vy
cmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxNDY0MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKIAogICAgIEIzSVJHZW5lcmF0
b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5h
bEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7
CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29u
c3QgU2lnbmF0dXJlKik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QXJndW1lbnRzKGNvbnN0IFJlZlB0cjxTaWduYXR1cmU+Jik7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Np
b25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsKIApAQCAtMjAzLDggKzIwMyw4IEBA
IHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYpOwogCiAgICAgLy8gQ2FsbHMKLSAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25z
dCBTaWduYXR1cmUqLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
SW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwgU2lnbmF0dXJlSW5kZXgsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIFJlZlB0
cjxTaWduYXR1cmU+JiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
bGxJbmRpcmVjdChSZWZQdHI8U2lnbmF0dXJlPiYmLCBTaWduYXR1cmVJbmRleCwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQg
ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHBy
ZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0YWNrKTsKQEAgLTQwOSw3ICs0MDksNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1
cmUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNv
bnN0IFJlZlB0cjxTaWduYXR1cmU+JiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7CiAgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoIW1f
bG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSksICJj
YW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAi
IGFyZ3VtZW50cyIpOwpAQCAtODgxLDcgKzg4MSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
RW5kVG9VbnJlYWNoYWJsZSgKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBSZWZQdHI8U2lnbmF0dXJlPiYmIHNpZ25hdHVyZSwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJl
c3VsdAogewogICAgIEFTU0VSVChzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNp
emUoKSk7CiAKQEAgLTk2Miw3ICs5NjIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwo
dWludDMyX3QgZnVuCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChSZWZQdHI8U2lnbmF0dXJlPiYmIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25U
eXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoc2lnbmF0dXJlSW5k
ZXggIT0gU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxl
ZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOwpAQCAtMTA4Myw3ICsxMDgzLDcgQEAgdm9pZCBCM0lS
R2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDbwogICAgIGRhdGFMb2dMbigpOwogfQogCi1z
dGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21w
aWxhdGlvbkNvbnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5jdGlvbiwgY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorc3RhdGlj
IHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRp
b25Db250ZXh0LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFJlZlB0cjxT
aWduYXR1cmU+JiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQogewog
ICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRK
SVQ7CiAKQEAgLTEyNjMsNyArMTI2Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkg
LT4gT3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KE9wY29kZU9yaWdpbiht
X3BhcnNlci0+Y3VycmVudE9wY29kZSgpLCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5n
T2Zmc2V0KCkpKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRl
eHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6
ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVs
ZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLCBNZW1vcnlNb2RlIG1v
ZGUsIHVuc2lnbmVkIG9wdExldmVsKQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBDb21waWxhdGlv
bkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFy
dCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBSZWZQdHI8U2lnbmF0dXJlPiBzaWduYXR1cmUsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+
JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgTWVtb3J5
TW9kZSBtb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6
bWFrZV91bmlxdWU8V2FzbUludGVybmFsRnVuY3Rpb24+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjE0NjQx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsK
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwganNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGw7
CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVy
ZUluZGV4PiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIG9wdExldmVsID0gQjM6OmRlZmF1bHRPcHRM
ZXZlbCgpKTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3Qg
dWludDhfdCosIHNpemVfdCwgUmVmUHRyPFNpZ25hdHVyZT4sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25h
dHVyZUluZGV4PiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIG9wdExldmVsID0gQjM6OmRlZmF1bHRP
cHRMZXZlbCgpKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjE0NjQxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw3ICs1NSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRv
SnMoVk0KICAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEKICAgICBjb25zdCBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24mIHdhc21DQyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogICAgIGNvbnN0IEpT
Q0NhbGxpbmdDb252ZW50aW9uJiBqc0NDID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBj
b25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQodm0s
IHNpZ25hdHVyZUluZGV4KTsKKyAgICBSZWZQdHI8U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICB1bnNpZ25lZCBhcmdD
b3VudCA9IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgIEpJVCBqaXQ7CiAKQEAgLTQx
OCwxMiArNDE4LDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
KHRhcmdldFRvQ2hlY2spKTsKICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIg
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwogICAgIGNhbGxMaW5r
SW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwg
aG90UGF0aE90aGVyKTsKLSNpZiAhZGVmaW5lZChOREVCVUcpCi0gICAgU3RyaW5nIHNpZ25hdHVy
ZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCh2bSwgc2lnbmF0dXJlSW5k
ZXgpLT50b1N0cmluZygpOwotI2Vsc2UKLSAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb247
Ci0jZW5kaWYKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZURl
c2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSk7CisKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1w
b3J0SW5kZXgsIHNpZ25hdHVyZS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwogfQogCiBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5k
ZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaAkocmV2aXNpb24gMjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsx
MjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
LSAgICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIEIzOjpQ
cm9jZWR1cmUmIHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgdm9pZCBsb2FkQXJndW1lbnRzKGNv
bnN0IFJlZlB0cjxTaWduYXR1cmU+JiBzaWduYXR1cmUsIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIz
OjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpIGNvbnN0CiAgICAgewogICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJs
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4p
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lv
biAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24g
ewogICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4
PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUlu
ZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKKyAgICBWZWN0b3I8UmVmUHRy
PFNpZ25hdHVyZT4+IHVzZWRTaWduYXR1cmVzOwogCiAgICAgTWVtb3J5SW5mb3JtYXRpb24gbWVt
b3J5OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaAkocmV2aXNpb24gMjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6Q29udHJvbFR5cGUgQ29udHJv
bFR5cGU7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uTGlzdCBFeHBy
ZXNzaW9uTGlzdDsKIAotICAgIEZ1bmN0aW9uUGFyc2VyKFZNKiwgQ29udGV4dCYsIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0
dXJlKiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5k
ZXg+Jik7CisgICAgRnVuY3Rpb25QYXJzZXIoVk0qLCBDb250ZXh0JiwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBSZWZQdHI8U2lnbmF0dXJlPiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+Jik7
CiAKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKQEAgLTg0LDcgKzg0
LDcgQEAgcHJpdmF0ZToKICAgICBDb250ZXh0JiBtX2NvbnRleHQ7CiAgICAgRXhwcmVzc2lvbkxp
c3QgbV9leHByZXNzaW9uU3RhY2s7CiAgICAgVmVjdG9yPENvbnRyb2xFbnRyeT4gbV9jb250cm9s
U3RhY2s7Ci0gICAgY29uc3QgU2lnbmF0dXJlKiBtX3NpZ25hdHVyZTsKKyAgICBSZWZQdHI8U2ln
bmF0dXJlPiBtX3NpZ25hdHVyZTsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZv
OwogICAgIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1fbW9kdWxlU2lnbmF0dXJlSW5k
aWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXM7CiAKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0
ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1GdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoVk0qIHZtLCBDb250ZXh0JiBjb250ZXh0LCBjb25zdCB1aW50
OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVy
ZSogc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9y
PFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVy
ZUluZGljZXMpCitGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoVk0qIHZt
LCBDb250ZXh0JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3Qg
ZnVuY3Rpb25MZW5ndGgsIFJlZlB0cjxTaWduYXR1cmU+IHNpZ25hdHVyZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNp
Z25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKQogICAgIDogUGFyc2VyKHZt
LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCkKICAgICAsIG1fY29udGV4dChjb250ZXh0
KQogICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQpAQCAtMzI0LDcgKzMyNCw3IEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihmdW5jdGlvbkluZGV4ID49IG1faW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCks
ICJjYWxsIGZ1bmN0aW9uIGluZGV4ICIsIGZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlv
biBpbmRleCBzcGFjZSAiLCBtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKIAogICAg
ICAgICBTaWduYXR1cmVJbmRleCBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIGNv
bnN0IFNpZ25hdHVyZSogY2FsbGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChtX3ZtLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+
IGNhbGxlZVNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoY2FsbGVlU2lnbmF0
dXJlSW5kZXgpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNhbGxlZVNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbCBmdW5jdGlv
biBpbmRleCAiLCBmdW5jdGlvbkluZGV4LCAiIGhhcyAiLCBjYWxsZWVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50
bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCiAgICAg
ICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkg
LSBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKQEAgLTMzNSw3ICszMzUsNyBAQCBh
dXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIEV4cHJlc3Np
b25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9U
UllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBjYWxsZWVTaWduYXR1cmUs
IGFyZ3MsIHJlc3VsdCkpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxs
KGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoY2FsbGVlU2lnbmF0dXJlKSwgYXJncywgcmVzdWx0KSk7
CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAg
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKQEAgLTM1Myw3ICszNTMs
NyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYobV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mgc2ln
bmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0dXJl
cyAiLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnNp
emUoKSk7CiAKICAgICAgICAgU2lnbmF0dXJlSW5kZXggY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBt
X21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzW3NpZ25hdHVy
ZUluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBjYWxsZWVTaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1fdm0sIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgUmVmUHRyPFNpZ25hdHVyZT4gY2FsbGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENv
dW50ID0gY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkgKyAxOyAvLyBBZGQgdGhlIGNh
bGxlZSdzIGluZGV4LgogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQg
PiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsX2luZGlyZWN0IGV4cGVjdHMgIiwgYXJn
dW1lbnRDb3VudCwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50
bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCkBAIC0z
NjUsNyArMzY1LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZQog
ICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAog
ICAgICAgICBFeHByZXNzaW9uVHlwZSByZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247
Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdChjYWxsZWVT
aWduYXR1cmUsIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBhcmdzLCByZXN1bHQpKTsKKyAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbEluZGlyZWN0KFdURk1vdmUoY2FsbGVlU2ln
bmF0dXJlKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAg
IGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjE0NjQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkg
LT4gUGFydGlhCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQp
LCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJUeXBl
IHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50KTsKICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJl
SW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVsZS0+dXNlZFNpZ25hdHVyZXMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5
cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMiKTsKIAogICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIGludDhfdCB0eXBlOwpAQCAtMTE4LDcg
KzExOSw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBQYXJ0aWEKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1G
dW5jICIsIHR5cGUpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihhcmd1bWVudENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNv
dW50Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksIGksICJ0aCBhcmd1bWVudCBjb3VudCBp
cyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2ln
bmF0dXJlLCB2b2lkICgqKShTaWduYXR1cmUqKT4gc2lnbmF0dXJlKFNpZ25hdHVyZTo6Y3JlYXRl
KGFyZ3VtZW50Q291bnQpLCAmU2lnbmF0dXJlOjpkZXN0cm95KTsKKyAgICAgICAgUmVmUHRyPFNp
Z25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlOjpjcmVhdGUoYXJndW1lbnRDb3VudCk7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNpZ25hdHVyZSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUiKTsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CkBA
IC0xMzgsOCArMTM5LDkgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRp
YQogICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFR5cGU6OlZvaWQ7CiAgICAgICAgIHNpZ25hdHVy
ZS0+cmV0dXJuVHlwZSgpID0gcmV0dXJuVHlwZTsKIAotICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChtX3ZtLCBzaWduYXR1
cmUucmVsZWFzZSgpKTsKLSAgICAgICAgbV9yZXN1bHQubW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsK
KyAgICAgICAgc3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWZQdHI8U2lnbmF0dXJlPj4gcmVz
dWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFkb3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7Cisg
ICAgICAgIG1fcmVzdWx0Lm1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJ
bmRpY2VzLnVuY2hlY2tlZEFwcGVuZChyZXN1bHQuZmlyc3QpOworICAgICAgICBtX3Jlc3VsdC5t
b2R1bGUtPnVzZWRTaWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5zZWNv
bmQpKTsKICAgICB9CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTQxNCw3ICs0MTYsNyBAQCBhdXRv
IE1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCgpIC0+IFBhcnRpCiAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFy
dCBpbmRleCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49
IG1fcmVzdWx0Lm1vZHVsZS0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXgg
Iiwgc3RhcnRGdW5jdGlvbkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwg
bV9yZXN1bHQubW9kdWxlLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4KTsKLSAgICBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0
dXJlSW5kZXgpOworICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJTdGFydCBmdW5jdGlvbiBjYW4ndCBoYXZlIGFy
Z3VtZW50cyIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLT5yZXR1cm5UeXBl
KCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CiAgICAg
bV9yZXN1bHQubW9kdWxlLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25J
bmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlz
aW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpCiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5n
dGggPD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7CiAKICAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFs
aWRhdGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25h
dHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5p
cXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsK
QEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRp
b25FCiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1
bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9z
b3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0
aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgUmVmUHRy
PFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4
aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgp
OwogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwg
ZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxl
U2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpKTsKQEAgLTI3MiwxOSAr
MjcyLDIwIEBAIHZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXIKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBt
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5h
bEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KCZtX3ZtLCBzaWduYXR1cmVJbmRleCktPnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQot
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1v
dmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50
LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAg
ICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5
IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3Rz
KSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBu
dWxscHRyKTsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNvbnRleHQuanNF
bnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBp
bGF0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGls
YXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJs
eSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9u
LmFzY2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3Rz
KSk7CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9u
SW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVl
PEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMi
LCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
V1RGTW92ZShjb250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TaWduYXR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TaWduYXR1cmUuY3BwCShyZXZpc2lvbiAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsOTUgKzYx
LDcyIEBAIHZvaWQgU2lnbmF0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIAogdW5zaWdu
ZWQgU2lnbmF0dXJlOjpoYXNoKCkgY29uc3QKIHsKLSAgICB1aW50MzJfdCBzaXplVG9IYXNoID0g
YWxsb2NhdGVkU2l6ZShhcmd1bWVudENvdW50KCkpIC8gc2l6ZW9mKGFsbG9jYXRpb25TaXplUm91
bmRzVXBUbyk7CiAgICAgLy8gQXNzdW1lcyBvdmVyLWFsbG9jYXRlZCBtZW1vcnkgd2FzIHplcm8t
aW5pdGlhbGl6ZWQsIGFuZCByb3VuZGVkLXVwIHRvIGFsbG9jYXRpb25TaXplUm91bmRzVXBUbyBz
byB0aGF0IGEgd2lkZXIgaGFzaCBjYW4gYmUgcGVyZm9ybWVkLgotICAgIEFTU0VSVChzaXplVG9I
YXNoICogc2l6ZW9mKGFsbG9jYXRpb25TaXplUm91bmRzVXBUbykgPT0gYWxsb2NhdGVkU2l6ZShh
cmd1bWVudENvdW50KCkpKTsKICAgICB1bnNpZ25lZCBhY2N1bXVsYXRvciA9IDB4YTFiY2VkZDh1
OwotICAgIGNvbnN0IGF1dG8qIHBvcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgYWxsb2NhdGlv
blNpemVSb3VuZHNVcFRvKj4odGhpcyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNp
emVUb0hhc2g7ICsraSkKLSAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFj
Y3VtdWxhdG9yLCBXVEY6OkludEhhc2g8YWxsb2NhdGlvblNpemVSb3VuZHNVcFRvPjo6aGFzaCgq
cG9zKSk7CisgICAgY29uc3QgYXV0byogcG9zID0gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPih0aGlz
KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYWxsb2NhdGVkU2l6ZShhcmd1bWVudENv
dW50KCkpOyArK2kpCisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1
bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKCpwb3MpKTsKICAgICByZXR1cm4g
YWNjdW11bGF0b3I7CiB9CiAKLVNpZ25hdHVyZSogU2lnbmF0dXJlOjpjcmVhdGUoU2lnbmF0dXJl
QXJnQ291bnQgYXJndW1lbnRDb3VudCkKK1JlZlB0cjxTaWduYXR1cmU+IFNpZ25hdHVyZTo6Y3Jl
YXRlKFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQpCiB7Ci0gICAgLy8gSGFzaGluZyBy
ZWxpZXMgb24gYWxsb2NhdGlvbiB6ZXJvLWluaXRpYWxpemluZyB0cmFpbGluZyBlbGVtZW50cy4K
LSAgICBhdXRvIGFsbG9jYXRlZCA9IHRyeUZhc3RDYWxsb2MoYWxsb2NhdGVkU2l6ZShhcmd1bWVu
dENvdW50KSwgMSk7Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7Ci0gICAgaWYgKCFhbGxvY2F0
ZWQuZ2V0VmFsdWUoc2lnbmF0dXJlKSkKKyAgICAvLyBEb24ndCBhbGxvdyBhbnl0aGluZyBjcmF6
eS4KKyAgICBpZiAoYXJndW1lbnRDb3VudCA+IDEwMjQgKiAxMDI0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBuZXcgKHNpZ25hdHVyZSkgU2lnbmF0dXJlKGFyZ3VtZW50Q291bnQpOwot
ICAgIHJldHVybiBzaWduYXR1cmU7Ci19CiAKLVNpZ25hdHVyZSogU2lnbmF0dXJlOjpjcmVhdGVJ
bnZhbGlkKCkKLXsKLSAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IGNyZWF0ZSgwKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChzaWduYXR1cmUpOwotICAgIG5ldyAoc2lnbmF0dXJlKSBTaWduYXR1cmUo
c3RkOjpudW1lcmljX2xpbWl0czxTaWduYXR1cmVBcmdDb3VudD46Om1heCgpKTsKLSAgICByZXR1
cm4gc2lnbmF0dXJlOwotfQotCi12b2lkIFNpZ25hdHVyZTo6ZGVzdHJveShTaWduYXR1cmUqIHNp
Z25hdHVyZSkKLXsKLSAgICBmYXN0RnJlZShzaWduYXR1cmUpOwotfQotCi1TaWduYXR1cmVJbmZv
cm1hdGlvbjo6flNpZ25hdHVyZUluZm9ybWF0aW9uKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc2lnbmF0dXJlcy5zaXplKCk7ICsraSkKLSAgICAgICAgU2lnbmF0dXJlOjpkZXN0
cm95KG1fc2lnbmF0dXJlc1tpXSk7CisgICAgdm9pZCogbWVtb3J5ID0gU2lnbmF0dXJlOjpvcGVy
YXRvciBuZXcgKGFsbG9jYXRlZFNpemUoYXJndW1lbnRDb3VudCkpOworICAgIFNpZ25hdHVyZSog
cmVzdWx0ID0gbmV3IChtZW1vcnkpIFNpZ25hdHVyZShhcmd1bWVudENvdW50KTsKKyAgICByZXR1
cm4gYWRvcHRSZWYocmVzdWx0KTsKIH0KIAogU2lnbmF0dXJlSW5mb3JtYXRpb246OlNpZ25hdHVy
ZUluZm9ybWF0aW9uKCkKIHsKICAgICAvLyBUaGUgemVyb3RoIGVudHJ5IGlzIGFuIGludmFsaWQg
c2lnbmF0dXJlLCB0byBtYXRjaCBpbnZhbGlkSW5kZXguCiAgICAgQVNTRVJUKCFTaWduYXR1cmU6
OmludmFsaWRJbmRleCk7Ci0gICAgU2lnbmF0dXJlKiBpbnZhbGlkU2lnbmF0dXJlID0gU2lnbmF0
dXJlOjpjcmVhdGVJbnZhbGlkKCk7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3NpZ25hdHVyZU1h
cC5hZGQoU2lnbmF0dXJlSGFzaCB7IGludmFsaWRTaWduYXR1cmUgfSwgU2lnbmF0dXJlOjppbnZh
bGlkSW5kZXgpOwotICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAg
ICBBU1NFUlQoU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSk7Ci0gICAgbV9zaWduYXR1cmVzLmFwcGVuZChpbnZhbGlkU2lnbmF0dXJlKTsKKyAgICBt
X3NpZ25hdHVyZXMuYXBwZW5kKG51bGxwdHIpOwogfQogCi1TaWduYXR1cmVJbmZvcm1hdGlvbiog
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChWTSogdm0pCitTaWduYXR1cmVJbmZvcm1hdGlvbiYg
U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpCiB7Ci0gICAgc3RkOjpjYWxsX29uY2Uo
dm0tPm1fd2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uT25jZUZsYWcsIFt2bV0gewotICAgICAgICB2
bS0+bV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8U2lnbmF0dXJl
SW5mb3JtYXRpb24+KG5ldyBTaWduYXR1cmVJbmZvcm1hdGlvbigpKTsKKyAgICBzdGF0aWMgU2ln
bmF0dXJlSW5mb3JtYXRpb24qIHRoZU9uZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc2ln
bmF0dXJlSW5mb3JtYXRpb25GbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNpZ25hdHVyZUluZm9y
bWF0aW9uRmxhZywgW10gKCkgeworICAgICAgICB0aGVPbmUgPSBuZXcgU2lnbmF0dXJlSW5mb3Jt
YXRpb247CiAgICAgfSk7Ci0gICAgcmV0dXJuIHZtLT5tX3dhc21TaWduYXR1cmVJbmZvcm1hdGlv
bi5nZXQoKTsKKworICAgIHJldHVybiAqdGhlT25lOwogfQogCi1TaWduYXR1cmVJbmRleCBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6YWRvcHQoVk0qIHZtLCBTaWduYXR1cmUqIHNpZ25hdHVyZSkKK3N0
ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgUmVmUHRyPFNpZ25hdHVyZT4+IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjphZG9wdChSZWZQdHI8U2lnbmF0dXJlPiYmIHNpZ25hdHVyZSkKIHsKLSAgICBTaWdu
YXR1cmVJbmZvcm1hdGlvbiogaW5mbyA9IGdldCh2bSk7Ci0gICAgTG9ja0hvbGRlciBsb2NrKGlu
Zm8tPm1fbG9jayk7CisgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24o
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2soaW5mby5tX2xvY2spOwogCi0gICAgU2lnbmF0dXJlSW5k
ZXggbmV4dFZhbHVlID0gaW5mby0+bV9zaWduYXR1cmVzLnNpemUoKTsKLSAgICBhdXRvIGFkZFJl
c3VsdCA9IGluZm8tPm1fc2lnbmF0dXJlTWFwLmFkZChTaWduYXR1cmVIYXNoIHsgc2lnbmF0dXJl
IH0sIG5leHRWYWx1ZSk7CisgICAgU2lnbmF0dXJlSW5kZXggbmV4dFZhbHVlID0gaW5mby5tX3Np
Z25hdHVyZXMuc2l6ZSgpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gaW5mby5tX3NpZ25hdHVyZU1h
cC5hZGQoU2lnbmF0dXJlSGFzaCB7IHNpZ25hdHVyZS5nZXQoKSB9LCBuZXh0VmFsdWUpOwogICAg
IGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBBU1NFUlQobmV4dFZhbHVlID09
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiQWRvcHQgbmV3IHNpZ25hdHVyZSAiLCAqc2lnbmF0dXJlLCAiIHdp
dGggaW5kZXggIiwgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwgIiBoYXNoOiAiLCBzaWduYXR1
cmUtPmhhc2goKSk7Ci0gICAgICAgIGluZm8tPm1fc2lnbmF0dXJlcy5hcHBlbmQoc2lnbmF0dXJl
KTsKLSAgICAgICAgcmV0dXJuIG5leHRWYWx1ZTsKKyAgICAgICAgaW5mby5tX3NpZ25hdHVyZXMu
YXBwZW5kKHNpZ25hdHVyZSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihuZXh0VmFs
dWUsIFdURk1vdmUoc2lnbmF0dXJlKSk7CiAgICAgfQogICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICBkYXRhTG9nTG4oIkV4aXN0aW5nIHNpZ25hdHVyZSAiLCAqc2lnbmF0dXJlLCAiIHdpdGggaW5k
ZXggIiwgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwgIiBoYXNoOiAiLCBzaWduYXR1cmUtPmhh
c2goKSk7Ci0gICAgU2lnbmF0dXJlOjpkZXN0cm95KHNpZ25hdHVyZSk7CiAgICAgQVNTRVJUKGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgIT0gU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOwotICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLCBpbmZvLm1fc2lnbmF0dXJlc1thZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlXSk7CiB9CiAKLWNvbnN0IFNpZ25hdHVyZSogU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChWTSogdm0sIFNpZ25hdHVyZUluZGV4IGluZGV4KQorUmVmUHRyPFNpZ25h
dHVyZT4gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChTaWduYXR1cmVJbmRleCBpbmRleCkKIHsK
ICAgICBBU1NFUlQoaW5kZXggIT0gU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOwotICAgIFNpZ25h
dHVyZUluZm9ybWF0aW9uKiBpbmZvID0gZ2V0KHZtKTsKLSAgICBMb2NrSG9sZGVyIGxvY2soaW5m
by0+bV9sb2NrKTsKKyAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigp
OworICAgIExvY2tIb2xkZXIgbG9jayhpbmZvLm1fbG9jayk7CiAKICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZ0xuKCJHb3Qgc2lnbmF0dXJlICIsICppbmZvLT5tX3NpZ25hdHVyZXMu
YXQoaW5kZXgpLCAiIGF0IGluZGV4ICIsIGluZGV4KTsKLSAgICByZXR1cm4gaW5mby0+bV9zaWdu
YXR1cmVzLmF0KGluZGV4KTsKKyAgICAgICAgZGF0YUxvZ0xuKCJHb3Qgc2lnbmF0dXJlICIsICpp
bmZvLm1fc2lnbmF0dXJlcy5hdChpbmRleCksICIgYXQgaW5kZXggIiwgaW5kZXgpOworICAgIHJl
dHVybiBpbmZvLm1fc2lnbmF0dXJlcy5hdChpbmRleCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVy
ZS5oCShyZXZpc2lvbiAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2lnbmF0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00NiwxMiArNDcs
MTIgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1aW50MzJfdCBT
aWduYXR1cmVBcmdDb3VudDsKLXR5cGVkZWYgdWludDMyX3QgU2lnbmF0dXJlSW5kZXg7Cit1c2lu
ZyBTaWduYXR1cmVBcmdDb3VudCA9IHVpbnQzMl90OwordXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1
aW50MzJfdDsKIAotY2xhc3MgU2lnbmF0dXJlIHsKK2NsYXNzIFNpZ25hdHVyZSA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTaWduYXR1cmU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIFNpZ25hdHVyZUFyZ0NvdW50IHNfcmV0
Q291bnQgPSAxOwotICAgIHR5cGVkZWYgdWludDY0X3QgYWxsb2NhdGlvblNpemVSb3VuZHNVcFRv
OwogCiAgICAgU2lnbmF0dXJlKCkgPSBkZWxldGU7CiAgICAgU2lnbmF0dXJlKGNvbnN0IFNpZ25h
dHVyZSYpID0gZGVsZXRlOwpAQCAtNjUsOSArNjYsOSBAQCBjbGFzcyBTaWduYXR1cmUgewogICAg
ICAgICByZXR1cm4gaSArIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpICsgc2l6ZW9mKFNpZ25hdHVyZSkpOwogICAgIH0KICAgICBUeXBlKiBzdG9y
YWdlKFNpZ25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0
dXJlKj4odGhpcyktPnN0b3JhZ2UoaSk7IH0KLSAgICBzdGF0aWMgdWludDMyX3QgYWxsb2NhdGVk
U2l6ZShTaWduYXR1cmVBcmdDb3VudCBhcmdDb3VudCkKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9j
YXRlZFNpemUoU2lnbmF0dXJlQXJnQ291bnQgYXJnQ291bnQpCiAgICAgewotICAgICAgICByZXR1
cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihhbGxvY2F0aW9uU2l6ZVJvdW5kc1Vw
VG8pPihzaXplb2YoU2lnbmF0dXJlKSArIChzX3JldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9m
KFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihTaWduYXR1cmUpICsgKHNfcmV0Q291bnQg
KyBhcmdDb3VudCkgKiBzaXplb2YoVHlwZSk7CiAgICAgfQogCiBwdWJsaWM6CkBAIC04NiwxOSAr
ODcsMjMgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaWduYXR1cmUmIHJocykgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZWRTaXplKGFyZ3VtZW50Q291bnQoKSkgPT0gYWxs
b2NhdGVkU2l6ZShyaHMuYXJndW1lbnRDb3VudCgpKSAmJiAhbWVtY21wKHRoaXMsICZyaHMsIGFs
bG9jYXRlZFNpemUoYXJndW1lbnRDb3VudCgpKSk7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50
KCkgIT0gcmhzLmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoYXJndW1lbnQoaSkgIT0gcmhzLmFyZ3VtZW50KGkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgc3RhdGljIFNpZ25hdHVyZSog
Y3JlYXRlKFNpZ25hdHVyZUFyZ0NvdW50KTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KFNpZ25h
dHVyZSopOworICAgIHN0YXRpYyBSZWZQdHI8U2lnbmF0dXJlPiBjcmVhdGUoU2lnbmF0dXJlQXJn
Q291bnQpOwogCiAgICAgLy8gU2lnbmF0dXJlcyBhcmUgdW5pcXVlZCBhbmQsIGZvciBjYWxsX2lu
ZGlyZWN0LCB2YWxpZGF0ZWQgYXQgcnVudGltZS4gVGFibGVzIGNhbiBjcmVhdGUgaW52YWxpZCBT
aWduYXR1cmVJbmRleCB2YWx1ZXMgd2hpY2ggY2F1c2UgY2FsbF9pbmRpcmVjdCB0byBmYWlsLiBX
ZSB1c2UgMCBhcyB0aGUgaW52YWxpZEluZGV4IHNvIHRoYXQgdGhlIGNvZGVnZW4gY2FuIGVhc2ls
eSB0ZXN0IGZvciBpdCBhbmQgdHJhcCwgYW5kIHdlIGFkZCBhIHRva2VuIGludmFsaWQgZW50cnkg
aW4gU2lnbmF0dXJlSW5mb3JtYXRpb24uCiAgICAgc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBTaWdu
YXR1cmVJbmRleCBpbnZhbGlkSW5kZXggPSAwOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBTaWduYXR1cmVJbmZvcm1hdGlvbjsKLSAgICBzdGF0aWMgU2lnbmF0dXJlKiBjcmVhdGVJbnZh
bGlkKCk7CiAgICAgU2lnbmF0dXJlQXJnQ291bnQgbV9hcmdDb3VudDsKICAgICAvLyBSZXR1cm4g
VHlwZSBhbmQgYXJndW1lbnRzIGFyZSBzdG9yZWQgaGVyZS4KIH07CkBAIC0xNTEsMTcgKzE1Niwy
MSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogLy8gU2lnbmF0dXJlIGluZm9y
bWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgb24gVk0gdG8gYWxsb3cgYWxsIHNpZ25hdHVyZXMgdG8g
YmUgdW5pcXVlLiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdhc20g
aW5zdGFuY2UuCiAvLyBOb3RlOiBzaWduYXR1cmVzIGFyZSBuZXZlciByZW1vdmVkIGZyb20gVk0g
YmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgYWNjb3VudGluZyBmb3IgYWxsIFdlYkFzc2VtYmx5
Lk1vZHVsZSBhbmQgd2hpY2ggc2lnbmF0dXJlcyB0aGV5IHVzZS4gVGhlIG1heGltdW0gbnVtYmVy
IG9mIHNpZ25hdHVyZXMgaXMgYm91bmRlZCwgYW5kIGlzbid0IHdvcnRoIHRoZSBjb3VudGluZyBv
dmVyaGVhZC4gV2UgY291bGQgY2xlYXIgZXZlcnl0aGluZyB3aGVuIHdlIHJlYWNoIHplcm8gb3V0
c3RhbmRpbmcgV2ViQXNzZW1ibHkuTW9kdWxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2MDM3CiBjbGFzcyBTaWduYXR1cmVJbmZvcm1hdGlvbiB7Ci0gICAgSGFz
aE1hcDxXYXNtOjpTaWduYXR1cmVIYXNoLCBXYXNtOjpTaWduYXR1cmVJbmRleD4gbV9zaWduYXR1
cmVNYXA7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZSo+IG1fc2lnbmF0dXJlczsKLSAgICBMb2NrIG1f
bG9jazsKLSAgICBzdGF0aWMgU2lnbmF0dXJlSW5mb3JtYXRpb24qIGdldChWTSopOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFNpZ25hdHVyZUluZm9ybWF0aW9uKTsKKwogICAgIFNpZ25hdHVy
ZUluZm9ybWF0aW9uKCk7Ci0gICAgU2lnbmF0dXJlSW5mb3JtYXRpb24oY29uc3QgU2lnbmF0dXJl
SW5mb3JtYXRpb24mKSA9IGRlbGV0ZTsKKyAgICB+U2lnbmF0dXJlSW5mb3JtYXRpb24oKTsKIAog
cHVibGljOgotICAgIH5TaWduYXR1cmVJbmZvcm1hdGlvbigpOwotICAgIHN0YXRpYyBTaWduYXR1
cmVJbmRleCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRvcHQoVk0qLCBTaWduYXR1cmUqKTsKLSAgICBz
dGF0aWMgY29uc3QgU2lnbmF0dXJlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0KFZNKiwgU2lnbmF0
dXJlSW5kZXgpOworICAgIHN0YXRpYyBTaWduYXR1cmVJbmZvcm1hdGlvbiYgc2luZ2xldG9uKCk7
CisKKyAgICBzdGF0aWMgc3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWZQdHI8U2lnbmF0dXJl
Pj4gV0FSTl9VTlVTRURfUkVUVVJOIGFkb3B0KFJlZlB0cjxTaWduYXR1cmU+JiYpOworICAgIHN0
YXRpYyBSZWZQdHI8U2lnbmF0dXJlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0KFNpZ25hdHVyZUlu
ZGV4KTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFdhc206OlNpZ25hdHVyZUhhc2gsIFdhc206
OlNpZ25hdHVyZUluZGV4PiBtX3NpZ25hdHVyZU1hcDsKKyAgICBWZWN0b3I8UmVmUHRyPFNpZ25h
dHVyZT4+IG1fc2lnbmF0dXJlczsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21W
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAg
IFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRB
cmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRBcmd1bWVudHMoY29uc3QgUmVmUHRyPFNpZ25hdHVyZT4mKTsKICAgICBSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9u
VHlwZSBhZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90KSB7IHJldHVybiB0eXBlOyB9CiAK
QEAgLTEzOCw4ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRVbnJlYWNoYWJsZSgpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQ2FsbHMKLSAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSosIFNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0
cjxTaWduYXR1cmU+JiYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bEluZGlyZWN0KFJlZlB0cjxTaWduYXR1cmU+JiYsIFNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAg
IGJvb2wgaGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtX21vZHVsZS5tZW1vcnk7IH0KIApA
QCAtMTYwLDcgKzE2MCw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IG1fbW9kdWxlOwogfTsKIAotYXV0byBWYWxpZGF0ZTo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25h
dHVyZSogc2lnbmF0dXJlKSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEFyZ3VtZW50cyhj
b25zdCBSZWZQdHI8U2lnbmF0dXJlPiYgc2lnbmF0dXJlKSAtPiBSZXN1bHQKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAg
ICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoYWRkTG9jYWwoc2lnbmF0dXJlLT5hcmd1bWVu
dChpKSwgMSkpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIGF1dG8gVmFsaWRhdGU6OmFkZEVuZFRvVW5y
ZWFjaGFibGUoQ29udHIKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRD
YWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0Cith
dXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBSZWZQdHI8U2lnbmF0dXJlPiYmIHNpZ25h
dHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCkgLT4gUmVzdWx0CiB7CiAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSAhPSBhcmdzLnNpemUoKSwgImFyaXR5IG1pc21hdGNoIGluIGNh
bGwsIGdvdCAiLCBhcmdzLnNpemUoKSwgIiBhcmd1bWVudHMsIGV4cGVjdGVkICIsIHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpKTsKIApAQCAtMzM1LDcgKzMzNSw3IEBAIGF1dG8gVmFsaWRhdGU6
OmFkZENhbGwodW5zaWduZWQsIGNvbnN0IFMKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIFZh
bGlkYXRlOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRhdGU6OmFk
ZENhbGxJbmRpcmVjdChSZWZQdHI8U2lnbmF0dXJlPiYmIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXgsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAogewogICAgIFVOVVNFRF9QQVJBTShzaWdu
YXR1cmVJbmRleCk7CiAgICAgQVNTRVJUKHNpZ25hdHVyZUluZGV4ICE9IFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4KTsKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0
IFZlY3RvcjxDb250cm9sCiAgICAgZGF0YUxvZ0xuKCk7CiB9CiAKLUV4cGVjdGVkPHZvaWQsIFN0
cmluZz4gdmFsaWRhdGVGdW5jdGlvbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6
ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGUsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKQorRXhwZWN0ZWQ8dm9pZCwgU3Ry
aW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXpl
X3QgbGVuZ3RoLCBSZWZQdHI8U2lnbmF0dXJlPiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBtb2R1bGUsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKQogewogICAgIFZhbGlkYXRlIGNv
bnRleHQobW9kdWxlKTsKICAgICBGdW5jdGlvblBhcnNlcjxWYWxpZGF0ZT4gdmFsaWRhdG9yKHZt
LCBjb250ZXh0LCBzb3VyY2UsIGxlbmd0aCwgc2lnbmF0dXJlLCBtb2R1bGUsIG1vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCShyZXZpc2lvbiAyMTQ2NDEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3RlZDx2
b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24oVk0qLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
LCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3Rv
cjxTaWduYXR1cmVJbmRleD4mKTsKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5j
dGlvbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIFJlZlB0cjxTaWduYXR1cmU+LCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mKTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIx
NDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBpZiAoIXdhc21GdW5jdGlvbikKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJleHBlY3RlZCBhIFdlYkFzc2VtYmx5IGZ1bmN0aW9uIiwgZGVmYXVs
dFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmpzQ2FsbGVlKCkpKSkp
OwogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9u
LT5zaWduYXR1cmVJbmRleCgpOwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJl
ID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsK
KyAgICBSZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1biB3aXRoIG1hdGNoZXMgdGhl
IG9uZSB3ZSBleHBlY3QuCiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+Y29k
ZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiAr
NzIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQqIG1fd2FzbUVudHJ5UG9pbnRDb2RlOyAvLyBDYWNo
ZSBjb2RlIHBvaW50ZXI6IGFsbG93cyB0aGUgd2FzbSAtPiB3YXNtIHN0dWIgdG8gZG8gYSBzaW5n
bGUgbG9hZCBhbmQganVtcCBpbnN0ZWFkIG9mIGhhdmluZyBkZXBlbmRlbnQgbG9hZHMuCiAgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fanNFbnRyeXBvaW50OwogICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21FbnRyeXBvaW50OworICAgIC8v
IEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNlIHdl
IGhhdmUgYSByZWZlcmVuY2UKKyAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0
byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCisgICAgLy8gZW5zdXJlcyB0aGF0
IHRoZSBhY3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgogICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCShyZXZpc2lvbiAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsx
MjgsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJs
b2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5k
ZXgpOwogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBz
aWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFdhc206OlNpZ25hdHVyZT4g
c2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCksIGV4cC5maWVsZCwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2Fz
bUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICBleHBv
cnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9CkBAIC0xODgsNyArMTg4LDcgQEAg
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgIGlmIChoYXNTdGFy
dCkgewogICAgICAgICBhdXRvIHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlID0gbW9kdWxlSW5mb3Jt
YXRpb24uc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UudmFsdWVfb3IoMCk7CiAgICAgICAgIFdhc206
OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZy
b21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICBj
b25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIFJlZlB0cjxXYXNtOjpTaWdu
YXR1cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOwogICAgICAgICAvLyBUaGUgc3RhcnQgZnVuY3Rpb24gbXVzdCBub3QgdGFrZSBh
bnkgYXJndW1lbnRzIG9yIHJldHVybiBhbnl0aGluZy4gVGhpcyBpcyBlbmZvcmNlZCBieSB0aGUg
cGFyc2VyLgogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAg
ICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQpOwpAQCAt
MjcyLDcgKzI3Miw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQK
IAogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxl
ZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNt
RW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFdh
c206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6U2ln
bmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBsb2Nh
bCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRleCAwLgogICAgICAgICAgICAgICAgIC8v
IFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5kZXgg
MC4KICAgICAgICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5m
b28gPT09IHRhYmxlLmdldCgwKT8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJldmlz
aW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXCiAgICAgU3RyaW5nIG5hbWUgPSAi
IjsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9u
KGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVu
Y3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKICAgICBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
U3RydWN0dXJlKCksIHNpZ25hdHVyZUluZGV4LCBjb2RlQmxvY2stPndhc21Ub0pzQ2FsbFN0dWJG
b3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25h
dHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRl
eCk7CisgICAgUmVmUHRyPFdhc206OlNpZ25hdHVyZT4gc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIG5hbWUs
IGZ1bmN0aW9uLCBjb2RlQmxvY2spOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDYgKzYwLDkgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNv
ZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0
aW9uOwogICAgIHZvaWQqIG1fd2FzbUVudHJ5cG9pbnRDb2RlOworICAgIC8vIEl0J3Mgc2FmZSB0
byBqdXN0IGhvbGQgdGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNlIHdlIGhhdmUgYSByZWZl
cmVuY2UKKyAgICAvLyB0byBvdXIgQ29kZUJsb2NrLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVs
ZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAorICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFs
IFNpZ25hdHVyZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBtX3NpZ25hdHVyZUluZGV4OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305943</attachid>
            <date>2017-03-30 22:57:26 -0700</date>
            <delta_ts>2017-03-31 12:33:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>46145</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE3LTAzLTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBSZWYgY291bnQgU2lnbmF0dXJlIGFuZCBTaWduYXR1cmVJbmZvcm1hdGlv
biBzaG91bGQgbm90IGNhcmUgYWJvdXQgVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDMxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgeWV0IGFnYWluIGFub3RoZXIgc3RlcCB0b3dhcmRz
IFBJQy1pZnlpbmcgV2FzbS4KKyAgICAgICAgU2lnbmF0dXJlIHNob3VsZCBiZSByZWYgY291bnRl
ZCBzbyB3ZSBjYW4gdGVsbCB3aGVuCisgICAgICAgIG5vIGNvZGUgaXMgaG9sZGluZyBvbnRvIGEg
U2lnbmF0dXJlLiBUaGlzIG1ha2VzIGl0IGVhc3kKKyAgICAgICAgdG8gZnJlZSB1bnVzZWQgU2ln
bmF0dXJlcy4gQWxzbywgdGhpcyBwYXRjaCByaWRzIFNpZ25hdHVyZUluZm8KKyAgICAgICAgb2Yg
YW55IFZNIGtub3dsZWRnZS4gTm93LCB0aGVyZSBpcyBqdXN0IGEgc2luZ2xlIFNpZ25hdHVyZUlu
Zm8gdGhhdAorICAgICAgICBsaXZlcyBpbiBhIHByb2Nlc3MuCisKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgIChKU0M6Oldhc206OnBh
cnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9K
cyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OmxvYWRBcmd1bWVudHMpOgorICAgICAgICAqIHdh
c20vV2FzbUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNl
cik6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKiB3YXNt
L1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGFyc2VBbmRWYWxpZGF0
ZU1vZHVsZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNt
U2lnbmF0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5mb3JtYXRpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2luZ2xldG9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmFkb3B0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0
dXJlOjpjcmVhdGVJbnZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0
dXJlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246On5TaWduYXR1cmVJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6YWxsb2Nh
dGVkU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp2YWxp
ZGF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5oOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmRlc3Ryb3kpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6CisKIDIwMTct
MDMtMzAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNz
ZW1ibHk6IFdoZW4gV2FzbSBjYWxscyB0byBDLCBpdCBzaG91bGQgdXNlIFdhc206OkNvbnRleHQq
IGluc3RlYWQgb2YgRXhlY1N0YXRlKiB0byBnZXQgVk0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsxNTQsNiBAQCBjbGFzcyBEYXRh
YmFzZTsKIG5hbWVzcGFjZSBET01KSVQgewogY2xhc3MgU2lnbmF0dXJlOwogfQotI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKLW5hbWVzcGFjZSBXYXNtIHsKLWNsYXNzIFNpZ25hdHVyZUluZm9ybWF0
aW9uOwotfQotI2VuZGlmCiAKIHN0cnVjdCBIYXNoVGFibGU7CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247
CkBAIC0zNjgsMTAgKzM2Myw2IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRp
b25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvcjsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBzdGQ6Om9uY2VfZmxhZyBtX3dh
c21TaWduYXR1cmVJbmZvcm1hdGlvbk9uY2VGbGFnOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbj4gbV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb247Ci0jZW5k
aWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZURlZmVycmVkVGltZXI+IHByb21pc2VEZWZl
cnJlZFRpbWVyOwogICAgIAogICAgIEpTQ2VsbCogY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFj
a09iamVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2
Myw3IEBAIHB1YmxpYzoKIAogICAgIEIzSVJHZW5lcmF0b3IoVk0mLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7CisgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFJlZlB0cjxT
aWduYXR1cmU+Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9j
YWwoVHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUs
IHVpbnQ2NF90KTsKIApAQCAtMjAzLDggKzIwMyw4IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYp
OwogCiAgICAgLy8gQ2FsbHMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJl
KiwgU2lnbmF0dXJlSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Np
b25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIFJlZlB0cjxTaWduYXR1cmU+JiYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChSZWZQdHI8U2lnbmF0
dXJlPiYmLCBTaWduYXR1cmVJbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJv
bEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCogZXhwcmVzc2lvblN0
YWNrKTsKQEAgLTQwOSw3ICs0MDksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZExvY2FsKFR5
cGUgdHlwZSwgCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRB
cmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFJlZlB0cjxTaWduYXR1cmU+JiBz
aWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUo
KSk7CiAgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0
eShzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9y
ICIsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwpAQCAtODgxLDcg
Kzg4MSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSgKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBSZWZQdHI8
U2lnbmF0dXJlPiYmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhw
cmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAKQEAgLTk2Miw3ICs5NjIs
NyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChSZWZQdHI8U2lnbmF0
dXJlPiYmIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICBBU1NFUlQoc2lnbmF0dXJlSW5kZXggIT0gU2lnbmF0dXJlOjppbnZhbGlk
SW5kZXgpOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgp
OwpAQCAtMTA4Myw3ICsxMDgzLDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZl
Y3RvcjxDbwogICAgIGRhdGFMb2dMbigpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2Fz
bVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbnRl
cm5hbEZ1bmN0aW9uJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFw
cGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBXYXNtSW50ZXJuYWxG
dW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFJlZlB0cjxTaWduYXR1cmU+JiBzaWduYXR1cmUsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQogewogICAgIENDYWxsSGVscGVycyYgaml0ID0g
KmNvbXBpbGF0aW9uQ29udGV4dC5qc0VudHJ5cG9pbnRKSVQ7CiAKQEAgLTEyNjMsNyArMTI2Myw3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3JpZ2luCiAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxPcmlnaW4+KE9wY29kZU9yaWdpbihtX3BhcnNlci0+Y3VycmVudE9wY29kZSgp
LCBtX3BhcnNlci0+Y3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0KCkpKTsKIH0KIAotRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGUoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIGNv
bnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1
ZWRTaWduYXR1cmVJbmRpY2VzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIG9wdExldmVsKQor
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoVk0mIHZtLCBDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29u
dGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBSZWZQdHI8U2lnbmF0dXJlPiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJbmRpY2Vz
VG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBvcHRM
ZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbUludGVybmFs
RnVuY3Rpb24+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
anNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGw7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShW
TSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIE1lbW9yeU1vZGUsIHVu
c2lnbmVkIG9wdExldmVsID0gQjM6OmRlZmF1bHRPcHRMZXZlbCgpKTsKK0V4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgUmVmUHRy
PFNpZ25hdHVyZT4sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIE1lbW9yeU1vZGUs
IHVuc2lnbmVkIG9wdExldmVsID0gQjM6OmRlZmF1bHRPcHRMZXZlbCgpKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICAvLyBJdCdkIGJlIHN1
cGVyIGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjk0MDEKICAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpOwogICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0ND
ID0ganNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQodm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICBS
ZWZQdHI8U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOwogICAgIEpJVCBqaXQ7CiAKQEAgLTQxOCwxMiArNDE4LDggQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIENvZGVMb2NhdGlvbkxhYmVsIGhv
dFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKICAgICBD
b2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoZmFzdENhbGwpOwogICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhj
YWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKLSNpZiAhZGVm
aW5lZChOREVCVUcpCi0gICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldCh2bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwotI2Vsc2UK
LSAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb247Ci0jZW5kaWYKLSAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRb
JWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgp
KSk7CisKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJs
eS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS0+dG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24g
MjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGxvYWRBcmd1bWVudHMo
Y29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpCYXNp
Y0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IGNvbnN0CisgICAgdm9pZCBsb2FkQXJndW1lbnRzKGNvbnN0IFJlZlB0cjxTaWduYXR1cmU+JiBz
aWduYXR1cmUsIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6
Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiAgICAgewogICAg
ICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
Pihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsy
MzQsNyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIFZlY3RvcjxJbXBvcnQ+IGlt
cG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlczsKKyAgICBWZWN0b3I8UmVmUHRyPFNpZ25hdHVyZT4+IHVzZWRTaWduYXR1
cmVzOwogCiAgICAgTWVtb3J5SW5mb3JtYXRpb24gbWVtb3J5OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkocmV2aXNpb24gMjE0
NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ29udGV4dDo6Q29udHJvbFR5cGUgQ29udHJvbFR5cGU7CiAgICAgdHlwZWRlZiB0eXBl
bmFtZSBDb250ZXh0OjpFeHByZXNzaW9uTGlzdCBFeHByZXNzaW9uTGlzdDsKIAotICAgIEZ1bmN0
aW9uUGFyc2VyKFZNKiwgQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNp
emVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+Jik7CisgICAgRnVuY3Rpb25QYXJz
ZXIoVk0qLCBDb250ZXh0JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1
bmN0aW9uTGVuZ3RoLCBSZWZQdHI8U2lnbmF0dXJlPiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+Jik7CiAKICAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlKCk7CiAKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBDb250
ZXh0JiBtX2NvbnRleHQ7CiAgICAgRXhwcmVzc2lvbkxpc3QgbV9leHByZXNzaW9uU3RhY2s7CiAg
ICAgVmVjdG9yPENvbnRyb2xFbnRyeT4gbV9jb250cm9sU3RhY2s7Ci0gICAgY29uc3QgU2lnbmF0
dXJlKiBtX3NpZ25hdHVyZTsKKyAgICBSZWZQdHI8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZTsKICAg
ICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogICAgIGNvbnN0IFZlY3RvcjxTaWdu
YXR1cmVJbmRleD4mIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUlu
ZGljZXM7CiAKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvbnRleHQ+Ci1GdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoVk0q
IHZtLCBDb250ZXh0JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxl
U2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpCitGdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoVk0qIHZtLCBDb250ZXh0JiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIFJlZlB0cjxT
aWduYXR1cmU+IHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIGNvbnN0
IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRT
aWduYXR1cmVJbmRpY2VzKQogICAgIDogUGFyc2VyKHZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlv
bkxlbmd0aCkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaWduYXR1cmUoc2ln
bmF0dXJlKQpAQCAtMzI0LDcgKzMyNCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OnBhcnNlRXhwcmUKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvbkluZGV4ID49
IG1faW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCksICJjYWxsIGZ1bmN0aW9uIGluZGV4ICIs
IGZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5jdGlvbiBpbmRleCBzcGFjZSAiLCBtX2luZm8u
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKIAogICAgICAgICBTaWduYXR1cmVJbmRleCBjYWxs
ZWVTaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSogY2FsbGVlU2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX3ZtLCBjYWxsZWVTaWduYXR1cmVJ
bmRleCk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IGNhbGxlZVNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpID4gbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlvbkluZGV4
LCAiIGhhcyAiLCBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMs
IGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50bHkgaG9sZHMgIiwgbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCiAgICAgICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50
SW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBjYWxsZWVTaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKTsKQEAgLTMzNSw3ICszMzUsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRl
eHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnNocmluayhmaXJzdEFy
Z3VtZW50SW5kZXgpOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6
OmVtcHR5RXhwcmVzc2lvbjsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2Fs
bChmdW5jdGlvbkluZGV4LCBjYWxsZWVTaWduYXR1cmUsIGFyZ3MsIHJlc3VsdCkpOworICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUo
Y2FsbGVlU2lnbmF0dXJlKSwgYXJncywgcmVzdWx0KSk7CiAKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5hcHBlbmQocmVzdWx0KTsKQEAgLTM1Myw3ICszNTMsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2Vy
PENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tb2R1
bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkgPD0gc2ln
bmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVy
ZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0dXJlcyAiLCBtX21vZHVsZVNpZ25hdHVyZUlu
ZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnNpemUoKSk7CiAKICAgICAgICAgU2lnbmF0
dXJlSW5kZXggY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNU
b1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzW3NpZ25hdHVyZUluZGV4XTsKLSAgICAgICAgY29uc3Qg
U2lnbmF0dXJlKiBjYWxsZWVTaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1f
dm0sIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gY2Fs
bGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjYWxsZWVTaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCkgKyAxOyAvLyBBZGQgdGhlIGNhbGxlZSdzIGluZGV4LgogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgPiBtX2V4cHJlc3Npb25TdGFjay5zaXpl
KCksICJjYWxsX2luZGlyZWN0IGV4cGVjdHMgIiwgYXJndW1lbnRDb3VudCwgIiBhcmd1bWVudHMs
IGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50bHkgaG9sZHMgIiwgbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwogCkBAIC0zNjUsNyArMzY1LDcgQEAgYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZQogICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSBy
ZXN1bHQgPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb247Ci0gICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZENhbGxJbmRpcmVjdChjYWxsZWVTaWduYXR1cmUsIGNhbGxlZVNpZ25hdHVy
ZUluZGV4LCBhcmdzLCByZXN1bHQpKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQo
YWRkQ2FsbEluZGlyZWN0KFdURk1vdmUoY2FsbGVlU2lnbmF0dXJlKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgsIGFyZ3MsIHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6
ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJl
c3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmNwcAkocmV2aXNpb24gMjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBA
QCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhCiAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlv
bidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksICJUeXBlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28g
YmlnICIsIGNvdW50KTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGVT
aWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNp
dHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9u
J3MgIiwgY291bnQsICIgZW50cmllcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVz
dWx0Lm1vZHVsZS0+dXNlZFNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAi
IGVudHJpZXMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CiAgICAgICAgIGludDhfdCB0eXBlOwpAQCAtMTE4LDcgKzExOSw3IEBAIGF1dG8gTW9kdWxlUGFy
c2VyOjpwYXJzZVR5cGUoKSAtPiBQYXJ0aWEKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0
eXBlICE9IEZ1bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5cGUpOwogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSwgImNhbid0
IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCksIGksICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291
bnQpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2lnbmF0dXJlLCB2b2lkICgqKShTaWduYXR1
cmUqKT4gc2lnbmF0dXJlKFNpZ25hdHVyZTo6Y3JlYXRlKGFyZ3VtZW50Q291bnQpLCAmU2lnbmF0
dXJlOjpkZXN0cm95KTsKKyAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2ln
bmF0dXJlOjpjcmVhdGUoYXJndW1lbnRDb3VudCk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXNpZ25hdHVyZSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2Vj
dGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUiKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CkBAIC0xMzgsOCArMTM5LDkgQEAgYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRpYQogICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFR5cGU6OlZvaWQ7CiAgICAgICAgIHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID0gcmV0dXJu
VHlwZTsKIAotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjphZG9wdChtX3ZtLCBzaWduYXR1cmUucmVsZWFzZSgpKTsKLSAgICAgICAg
bV9yZXN1bHQubW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMu
dW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25h
dHVyZUluZGV4LCBSZWZQdHI8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmFkb3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZVNp
Z25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChy
ZXN1bHQuZmlyc3QpOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPnVzZWRTaWduYXR1cmVzLnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5zZWNvbmQpKTsKICAgICB9CiAgICAgcmV0dXJu
IHsgfTsKIH0KQEAgLTQxNCw3ICs0MTYsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VTdGFy
dCgpIC0+IFBhcnRpCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc3Rh
cnRGdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRleCIpOwogICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+ZnVuY3Rp
b25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXggIiwgc3RhcnRGdW5jdGlvbkluZGV4LCAi
IGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9yZXN1bHQubW9kdWxlLT5mdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkpOwogICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9yZXN1bHQubW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3Rh
cnRGdW5jdGlvbkluZGV4KTsKLSAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgIFJlZlB0cjxT
aWduYXR1cmU+IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksICJTdGFydCBmdW5jdGlvbiBjYW4ndCBoYXZlIGFyZ3VtZW50cyIpOwogICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0
aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CiAgICAgbV9yZXN1bHQubW9kdWxlLT5zdGFydEZ1
bmN0aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcg
KzEyMSw3IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIHNp
emVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9u
SW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0
YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOwog
ICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAg
ICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAg
ICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbigmbV92bSwgZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRp
b24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwog
ICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lk
IFBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FCiAgICAgICAgIHNpemVfdCBmdW5j
dGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVu
ZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAg
ICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVy
bmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0s
IHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlv
bkluZGV4OwogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBBU1NFUlQodmFsaWRh
dGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVl
ZFNpZ25hdHVyZUluZGljZXMpKTsKQEAgLTI3MiwxOSArMjcyLDIwIEBAIHZvaWQgUGxhbjo6Y29t
cGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXIKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVu
Y3Rpb25JbmRleF07CiAgICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3Jp
cHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCkt
PnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPQotICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAo
IldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURl
c2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHMpKTsKKyAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlv
bnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgICAgICAgICAgRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0
aW9uSW5kZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLT50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3Zl
KGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNvbnRleHQuanNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2lu
dENhbGwsIEZ1bmN0aW9uUHRyKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKIAotICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlv
bkluZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KLSAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1v
dmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9p
bnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAg
ICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlw
dC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmpzRW50cnlw
b2ludEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCShyZXZp
c2lvbiAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsOTUgKzYxLDk3IEBAIHZvaWQgU2lnbmF0dXJlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIAogdW5zaWduZWQgU2lnbmF0dXJlOjpoYXNoKCkgY29u
c3QKIHsKLSAgICB1aW50MzJfdCBzaXplVG9IYXNoID0gYWxsb2NhdGVkU2l6ZShhcmd1bWVudENv
dW50KCkpIC8gc2l6ZW9mKGFsbG9jYXRpb25TaXplUm91bmRzVXBUbyk7Ci0gICAgLy8gQXNzdW1l
cyBvdmVyLWFsbG9jYXRlZCBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIGFuZCByb3VuZGVk
LXVwIHRvIGFsbG9jYXRpb25TaXplUm91bmRzVXBUbyBzbyB0aGF0IGEgd2lkZXIgaGFzaCBjYW4g
YmUgcGVyZm9ybWVkLgotICAgIEFTU0VSVChzaXplVG9IYXNoICogc2l6ZW9mKGFsbG9jYXRpb25T
aXplUm91bmRzVXBUbykgPT0gYWxsb2NhdGVkU2l6ZShhcmd1bWVudENvdW50KCkpKTsKICAgICB1
bnNpZ25lZCBhY2N1bXVsYXRvciA9IDB4YTFiY2VkZDh1OwotICAgIGNvbnN0IGF1dG8qIHBvcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgYWxsb2NhdGlvblNpemVSb3VuZHNVcFRvKj4odGhpcyk7
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemVUb0hhc2g7ICsraSkKLSAgICAgICAg
YWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8
YWxsb2NhdGlvblNpemVSb3VuZHNVcFRvPjo6aGFzaCgqcG9zKSk7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBhY2N1bXVsYXRvciA9
IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFz
aChzdGF0aWNfY2FzdDx1aW50OF90Pihhcmd1bWVudChpKSkpKTsKKyAgICBhY2N1bXVsYXRvciA9
IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFz
aChzdGF0aWNfY2FzdDx1aW50OF90PihyZXR1cm5UeXBlKCkpKSk7CiAgICAgcmV0dXJuIGFjY3Vt
dWxhdG9yOwogfQogCi1TaWduYXR1cmUqIFNpZ25hdHVyZTo6Y3JlYXRlKFNpZ25hdHVyZUFyZ0Nv
dW50IGFyZ3VtZW50Q291bnQpCitSZWZQdHI8U2lnbmF0dXJlPiBTaWduYXR1cmU6OmNyZWF0ZShT
aWduYXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50KQogewotICAgIC8vIEhhc2hpbmcgcmVsaWVz
IG9uIGFsbG9jYXRpb24gemVyby1pbml0aWFsaXppbmcgdHJhaWxpbmcgZWxlbWVudHMuCi0gICAg
YXV0byBhbGxvY2F0ZWQgPSB0cnlGYXN0Q2FsbG9jKGFsbG9jYXRlZFNpemUoYXJndW1lbnRDb3Vu
dCksIDEpOwotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOwotICAgIGlmICghYWxsb2NhdGVkLmdl
dFZhbHVlKHNpZ25hdHVyZSkpCisgICAgLy8gRG9uJ3QgYWxsb3cgYW55dGhpbmcgY3JhenkuCisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPiAxMDI0ICogMTAyNCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgbmV3IChzaWduYXR1cmUpIFNpZ25hdHVyZShhcmd1bWVudENvdW50KTsKLSAgICBy
ZXR1cm4gc2lnbmF0dXJlOwotfQogCi1TaWduYXR1cmUqIFNpZ25hdHVyZTo6Y3JlYXRlSW52YWxp
ZCgpCi17Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmUgPSBjcmVhdGUoMCk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoc2lnbmF0dXJlKTsKLSAgICBuZXcgKHNpZ25hdHVyZSkgU2lnbmF0dXJlKHN0ZDo6
bnVtZXJpY19saW1pdHM8U2lnbmF0dXJlQXJnQ291bnQ+OjptYXgoKSk7Ci0gICAgcmV0dXJuIHNp
Z25hdHVyZTsKLX0KLQotdm9pZCBTaWduYXR1cmU6OmRlc3Ryb3koU2lnbmF0dXJlKiBzaWduYXR1
cmUpCi17Ci0gICAgZmFzdEZyZWUoc2lnbmF0dXJlKTsKLX0KLQotU2lnbmF0dXJlSW5mb3JtYXRp
b246On5TaWduYXR1cmVJbmZvcm1hdGlvbigpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3NpZ25hdHVyZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIFNpZ25hdHVyZTo6ZGVzdHJveSht
X3NpZ25hdHVyZXNbaV0pOworICAgIHZvaWQqIG1lbW9yeSA9IFNpZ25hdHVyZTo6b3BlcmF0b3Ig
bmV3IChhbGxvY2F0ZWRTaXplKGFyZ3VtZW50Q291bnQpKTsKKyAgICBTaWduYXR1cmUqIHJlc3Vs
dCA9IG5ldyAobWVtb3J5KSBTaWduYXR1cmUoYXJndW1lbnRDb3VudCk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKHJlc3VsdCk7CiB9CiAKIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZv
cm1hdGlvbigpCiB7Ci0gICAgLy8gVGhlIHplcm90aCBlbnRyeSBpcyBhbiBpbnZhbGlkIHNpZ25h
dHVyZSwgdG8gbWF0Y2ggaW52YWxpZEluZGV4LgotICAgIEFTU0VSVCghU2lnbmF0dXJlOjppbnZh
bGlkSW5kZXgpOwotICAgIFNpZ25hdHVyZSogaW52YWxpZFNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6
Y3JlYXRlSW52YWxpZCgpOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zaWduYXR1cmVNYXAuYWRk
KFNpZ25hdHVyZUhhc2ggeyBpbnZhbGlkU2lnbmF0dXJlIH0sIFNpZ25hdHVyZTo6aW52YWxpZElu
ZGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVChhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgQVNT
RVJUKFNpZ25hdHVyZTo6aW52YWxpZEluZGV4ID09IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUp
OwotICAgIG1fc2lnbmF0dXJlcy5hcHBlbmQoaW52YWxpZFNpZ25hdHVyZSk7CiB9CiAKLVNpZ25h
dHVyZUluZm9ybWF0aW9uKiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFZNKiB2bSkKK1NpZ25h
dHVyZUluZm9ybWF0aW9uJiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2luZ2xldG9uKCkKIHsKLSAg
ICBzdGQ6OmNhbGxfb25jZSh2bS0+bV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb25PbmNlRmxhZywg
W3ZtXSB7Ci0gICAgICAgIHZtLT5tX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbiA9IHN0ZDo6dW5p
cXVlX3B0cjxTaWduYXR1cmVJbmZvcm1hdGlvbj4obmV3IFNpZ25hdHVyZUluZm9ybWF0aW9uKCkp
OworICAgIHN0YXRpYyBTaWduYXR1cmVJbmZvcm1hdGlvbiogdGhlT25lOworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBzaWduYXR1cmVJbmZvcm1hdGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29u
Y2Uoc2lnbmF0dXJlSW5mb3JtYXRpb25GbGFnLCBbXSAoKSB7CisgICAgICAgIHRoZU9uZSA9IG5l
dyBTaWduYXR1cmVJbmZvcm1hdGlvbjsKICAgICB9KTsKLSAgICByZXR1cm4gdm0tPm1fd2FzbVNp
Z25hdHVyZUluZm9ybWF0aW9uLmdldCgpOworCisgICAgcmV0dXJuICp0aGVPbmU7CiB9CiAKLVNp
Z25hdHVyZUluZGV4IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChWTSogdm0sIFNpZ25hdHVy
ZSogc2lnbmF0dXJlKQorc3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWZQdHI8U2lnbmF0dXJl
Pj4gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFkb3B0KFJlZlB0cjxTaWduYXR1cmU+JiYgc2lnbmF0
dXJlKQogewotICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uKiBpbmZvID0gZ2V0KHZtKTsKLSAgICBM
b2NrSG9sZGVyIGxvY2soaW5mby0+bV9sb2NrKTsKKyAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYg
aW5mbyA9IHNpbmdsZXRvbigpOworICAgIExvY2tIb2xkZXIgbG9jayhpbmZvLm1fbG9jayk7CiAK
LSAgICBTaWduYXR1cmVJbmRleCBuZXh0VmFsdWUgPSBpbmZvLT5tX3NpZ25hdHVyZXMuc2l6ZSgp
OwotICAgIGF1dG8gYWRkUmVzdWx0ID0gaW5mby0+bV9zaWduYXR1cmVNYXAuYWRkKFNpZ25hdHVy
ZUhhc2ggeyBzaWduYXR1cmUgfSwgbmV4dFZhbHVlKTsKKyAgICBTaWduYXR1cmVJbmRleCBuZXh0
VmFsdWUgPSBpbmZvLm1fbmV4dEluZGV4OworICAgIGF1dG8gYWRkUmVzdWx0ID0gaW5mby5tX3Np
Z25hdHVyZU1hcC5hZGQoU2lnbmF0dXJlSGFzaCB7IHNpZ25hdHVyZS5nZXQoKSB9LCBuZXh0VmFs
dWUpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICArK2luZm8ubV9u
ZXh0SW5kZXg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ubV9uZXh0SW5kZXggPiBuZXh0
VmFsdWUpOyAvLyBjcmFzaCBvbiBvdmVyZmxvdy4KICAgICAgICAgQVNTRVJUKG5leHRWYWx1ZSA9
PSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkFkb3B0IG5ldyBzaWduYXR1cmUgIiwgKnNpZ25hdHVyZSwgIiB3
aXRoIGluZGV4ICIsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUsICIgaGFzaDogIiwgc2lnbmF0
dXJlLT5oYXNoKCkpOwotICAgICAgICBpbmZvLT5tX3NpZ25hdHVyZXMuYXBwZW5kKHNpZ25hdHVy
ZSk7Ci0gICAgICAgIHJldHVybiBuZXh0VmFsdWU7CisKKyAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBpbmZvLm1faW5kZXhNYXAuYWRkKG5leHRWYWx1ZSwgc2lnbmF0dXJlKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBBU1NFUlQoaW5mby5t
X2luZGV4TWFwLnNpemUoKSA9PSBpbmZvLm1fc2lnbmF0dXJlTWFwLnNpemUoKSk7CisgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihuZXh0VmFsdWUsIHNpZ25hdHVyZSk7CiAgICAgfQogICAg
IGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nTG4oIkV4aXN0aW5nIHNpZ25hdHVyZSAiLCAq
c2lnbmF0dXJlLCAiIHdpdGggaW5kZXggIiwgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwgIiBo
YXNoOiAiLCBzaWduYXR1cmUtPmhhc2goKSk7Ci0gICAgU2lnbmF0dXJlOjpkZXN0cm95KHNpZ25h
dHVyZSk7CiAgICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgIT0gU2lnbmF0dXJl
OjppbnZhbGlkSW5kZXgpOwotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwor
ICAgIEFTU0VSVChpbmZvLm1faW5kZXhNYXAuY29udGFpbnMoYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLCBpbmZvLm1faW5kZXhNYXAuZ2V0KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpKTsKIH0K
IAotY29uc3QgU2lnbmF0dXJlKiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFZNKiB2bSwgU2ln
bmF0dXJlSW5kZXggaW5kZXgpCitSZWZQdHI8U2lnbmF0dXJlPiBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KFNpZ25hdHVyZUluZGV4IGluZGV4KQogewogICAgIEFTU0VSVChpbmRleCAhPSBTaWdu
YXR1cmU6OmludmFsaWRJbmRleCk7Ci0gICAgU2lnbmF0dXJlSW5mb3JtYXRpb24qIGluZm8gPSBn
ZXQodm0pOwotICAgIExvY2tIb2xkZXIgbG9jayhpbmZvLT5tX2xvY2spOworICAgIFNpZ25hdHVy
ZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7CisgICAgTG9ja0hvbGRlciBsb2NrKGlu
Zm8ubV9sb2NrKTsKIAotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIkdvdCBz
aWduYXR1cmUgIiwgKmluZm8tPm1fc2lnbmF0dXJlcy5hdChpbmRleCksICIgYXQgaW5kZXggIiwg
aW5kZXgpOwotICAgIHJldHVybiBpbmZvLT5tX3NpZ25hdHVyZXMuYXQoaW5kZXgpOworICAgIHJl
dHVybiBpbmZvLm1faW5kZXhNYXAuZ2V0KGluZGV4KTsKK30KKwordm9pZCBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6dHJ5Q2xlYW51cCgpCit7CisgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8g
PSBzaW5nbGV0b24oKTsKKyAgICBMb2NrSG9sZGVyIGxvY2soaW5mby5tX2xvY2spOworCisgICAg
VmVjdG9yPHN0ZDo6cGFpcjxTaWduYXR1cmVJbmRleCwgU2lnbmF0dXJlKj4+IHRvUmVtb3ZlOwor
ICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IGluZm8ubV9pbmRleE1hcCkgeworICAgICAgICBj
b25zdCBSZWZQdHI8U2lnbmF0dXJlPiYgc2lnbmF0dXJlID0gcGFpci52YWx1ZTsKKyAgICAgICAg
aWYgKHNpZ25hdHVyZS0+cmVmQ291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAvLyBXZSdyZSB0
aGUgb25seSBvd25lci4KKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihwYWlyLmtleSwgc2lnbmF0dXJlLmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9y
IChjb25zdCBhdXRvJiBwYWlyIDogdG9SZW1vdmUpIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0g
aW5mby5tX3NpZ25hdHVyZU1hcC5yZW1vdmUoU2lnbmF0dXJlSGFzaCB7IHBhaXIuc2Vjb25kIH0p
OworICAgICAgICBBU1NFUlQocmVtb3ZlZCk7CisgICAgICAgIHJlbW92ZWQgPSBpbmZvLm1faW5k
ZXhNYXAucmVtb3ZlKHBhaXIuZmlyc3QpOworICAgICAgICBBU1NFUlQocmVtb3ZlZCk7CisgICAg
fQorICAgIGlmICghaW5mby5tX3NpZ25hdHVyZU1hcC5zaXplKCkpIHsKKyAgICAgICAgQVNTRVJU
KCFpbmZvLm1faW5kZXhNYXAuc2l6ZSgpKTsKKyAgICAgICAgaW5mby5tX25leHRJbmRleCA9IFNp
Z25hdHVyZTo6aW52YWxpZEluZGV4ICsgMTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVy
ZS5oCShyZXZpc2lvbiAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2lnbmF0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00NiwxMiArNDcs
MTIgQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1aW50MzJfdCBT
aWduYXR1cmVBcmdDb3VudDsKLXR5cGVkZWYgdWludDMyX3QgU2lnbmF0dXJlSW5kZXg7Cit1c2lu
ZyBTaWduYXR1cmVBcmdDb3VudCA9IHVpbnQzMl90OwordXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1
aW50MzJfdDsKIAotY2xhc3MgU2lnbmF0dXJlIHsKK2NsYXNzIFNpZ25hdHVyZSA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTaWduYXR1cmU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIFNpZ25hdHVyZUFyZ0NvdW50IHNfcmV0
Q291bnQgPSAxOwotICAgIHR5cGVkZWYgdWludDY0X3QgYWxsb2NhdGlvblNpemVSb3VuZHNVcFRv
OwogCiAgICAgU2lnbmF0dXJlKCkgPSBkZWxldGU7CiAgICAgU2lnbmF0dXJlKGNvbnN0IFNpZ25h
dHVyZSYpID0gZGVsZXRlOwpAQCAtNjUsOSArNjYsOSBAQCBjbGFzcyBTaWduYXR1cmUgewogICAg
ICAgICByZXR1cm4gaSArIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpICsgc2l6ZW9mKFNpZ25hdHVyZSkpOwogICAgIH0KICAgICBUeXBlKiBzdG9y
YWdlKFNpZ25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0
dXJlKj4odGhpcyktPnN0b3JhZ2UoaSk7IH0KLSAgICBzdGF0aWMgdWludDMyX3QgYWxsb2NhdGVk
U2l6ZShTaWduYXR1cmVBcmdDb3VudCBhcmdDb3VudCkKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9j
YXRlZFNpemUoU2lnbmF0dXJlQXJnQ291bnQgYXJnQ291bnQpCiAgICAgewotICAgICAgICByZXR1
cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihhbGxvY2F0aW9uU2l6ZVJvdW5kc1Vw
VG8pPihzaXplb2YoU2lnbmF0dXJlKSArIChzX3JldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9m
KFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihTaWduYXR1cmUpICsgKHNfcmV0Q291bnQg
KyBhcmdDb3VudCkgKiBzaXplb2YoVHlwZSk7CiAgICAgfQogCiBwdWJsaWM6CkBAIC04NiwxOSAr
ODcsMjUgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaWduYXR1cmUmIHJocykgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZWRTaXplKGFyZ3VtZW50Q291bnQoKSkgPT0gYWxs
b2NhdGVkU2l6ZShyaHMuYXJndW1lbnRDb3VudCgpKSAmJiAhbWVtY21wKHRoaXMsICZyaHMsIGFs
bG9jYXRlZFNpemUoYXJndW1lbnRDb3VudCgpKSk7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50
KCkgIT0gcmhzLmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKHJldHVyblR5cGUoKSAhPSByaHMucmV0dXJuVHlwZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRD
b3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudChpKSAhPSByaHMuYXJndW1l
bnQoaSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKLSAgICBz
dGF0aWMgU2lnbmF0dXJlKiBjcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQpOwotICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koU2lnbmF0dXJlKik7CisgICAgc3RhdGljIFJlZlB0cjxTaWduYXR1cmU+IGNy
ZWF0ZShTaWduYXR1cmVBcmdDb3VudCk7CiAKICAgICAvLyBTaWduYXR1cmVzIGFyZSB1bmlxdWVk
IGFuZCwgZm9yIGNhbGxfaW5kaXJlY3QsIHZhbGlkYXRlZCBhdCBydW50aW1lLiBUYWJsZXMgY2Fu
IGNyZWF0ZSBpbnZhbGlkIFNpZ25hdHVyZUluZGV4IHZhbHVlcyB3aGljaCBjYXVzZSBjYWxsX2lu
ZGlyZWN0IHRvIGZhaWwuIFdlIHVzZSAwIGFzIHRoZSBpbnZhbGlkSW5kZXggc28gdGhhdCB0aGUg
Y29kZWdlbiBjYW4gZWFzaWx5IHRlc3QgZm9yIGl0IGFuZCB0cmFwLCBhbmQgd2UgYWRkIGEgdG9r
ZW4gaW52YWxpZCBlbnRyeSBpbiBTaWduYXR1cmVJbmZvcm1hdGlvbi4KICAgICBzdGF0aWMgY29u
c3QgY29uc3RleHByIFNpZ25hdHVyZUluZGV4IGludmFsaWRJbmRleCA9IDA7CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uOwotICAgIHN0YXRpYyBTaWdu
YXR1cmUqIGNyZWF0ZUludmFsaWQoKTsKICAgICBTaWduYXR1cmVBcmdDb3VudCBtX2FyZ0NvdW50
OwogICAgIC8vIFJldHVybiBUeXBlIGFuZCBhcmd1bWVudHMgYXJlIHN0b3JlZCBoZXJlLgogfTsK
QEAgLTE1MSwxNyArMTU4LDIyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAv
LyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBvbiBWTSB0byBhbGxvdyBh
bGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNh
bGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZS4KIC8vIE5vdGU6IHNpZ25hdHVyZXMgYXJlIG5ldmVy
IHJlbW92ZWQgZnJvbSBWTSBiZWNhdXNlIHRoYXQgd291bGQgcmVxdWlyZSBhY2NvdW50aW5nIGZv
ciBhbGwgV2ViQXNzZW1ibHkuTW9kdWxlIGFuZCB3aGljaCBzaWduYXR1cmVzIHRoZXkgdXNlLiBU
aGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBpcyBib3VuZGVkLCBhbmQgaXNuJ3Qgd29y
dGggdGhlIGNvdW50aW5nIG92ZXJoZWFkLiBXZSBjb3VsZCBjbGVhciBldmVyeXRoaW5nIHdoZW4g
d2UgcmVhY2ggemVybyBvdXRzdGFuZGluZyBXZWJBc3NlbWJseS5Nb2R1bGUuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMzcKIGNsYXNzIFNpZ25hdHVyZUluZm9y
bWF0aW9uIHsKLSAgICBIYXNoTWFwPFdhc206OlNpZ25hdHVyZUhhc2gsIFdhc206OlNpZ25hdHVy
ZUluZGV4PiBtX3NpZ25hdHVyZU1hcDsKLSAgICBWZWN0b3I8U2lnbmF0dXJlKj4gbV9zaWduYXR1
cmVzOwotICAgIExvY2sgbV9sb2NrOwotICAgIHN0YXRpYyBTaWduYXR1cmVJbmZvcm1hdGlvbiog
Z2V0KFZNKik7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2lnbmF0dXJlSW5mb3JtYXRpb24p
OworCiAgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24oKTsKLSAgICBTaWduYXR1cmVJbmZvcm1hdGlv
bihjb25zdCBTaWduYXR1cmVJbmZvcm1hdGlvbiYpID0gZGVsZXRlOwogCiBwdWJsaWM6Ci0gICAg
flNpZ25hdHVyZUluZm9ybWF0aW9uKCk7Ci0gICAgc3RhdGljIFNpZ25hdHVyZUluZGV4IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZG9wdChWTSosIFNpZ25hdHVyZSopOwotICAgIHN0YXRpYyBjb25zdCBT
aWduYXR1cmUqIFdBUk5fVU5VU0VEX1JFVFVSTiBnZXQoVk0qLCBTaWduYXR1cmVJbmRleCk7Cisg
ICAgc3RhdGljIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBzaW5nbGV0b24oKTsKKworICAgIHN0YXRp
YyBzdGQ6OnBhaXI8U2lnbmF0dXJlSW5kZXgsIFJlZlB0cjxTaWduYXR1cmU+PiBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRvcHQoUmVmUHRyPFNpZ25hdHVyZT4mJik7CisgICAgc3RhdGljIFJlZlB0cjxT
aWduYXR1cmU+IFdBUk5fVU5VU0VEX1JFVFVSTiBnZXQoU2lnbmF0dXJlSW5kZXgpOworICAgIHN0
YXRpYyB2b2lkIHRyeUNsZWFudXAoKTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFdhc206OlNp
Z25hdHVyZUhhc2gsIFdhc206OlNpZ25hdHVyZUluZGV4PiBtX3NpZ25hdHVyZU1hcDsKKyAgICBI
YXNoTWFwPFdhc206OlNpZ25hdHVyZUluZGV4LCBSZWZQdHI8U2lnbmF0dXJlPj4gbV9pbmRleE1h
cDsKKyAgICBTaWduYXR1cmVJbmRleCBtX25leHRJbmRleCB7IFNpZ25hdHVyZTo6aW52YWxpZElu
ZGV4ICsgMSB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMjE0NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgICAgXAogICAgIH0g
d2hpbGUgKDApCiAKLSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhj
b25zdCBTaWduYXR1cmUqKTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3Vt
ZW50cyhjb25zdCBSZWZQdHI8U2lnbmF0dXJlPiYpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENv
bnN0YW50KFR5cGUgdHlwZSwgdWludDY0X3QpIHsgcmV0dXJuIHR5cGU7IH0KIApAQCAtMTM4LDgg
KzEzOCw4IEBAIHB1YmxpYzoKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVh
Y2hhYmxlKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0
dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7Ci0gICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3Qo
Y29uc3QgU2lnbmF0dXJlKiwgU2lnbmF0dXJlSW5kZXgsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPFNpZ25hdHVy
ZT4mJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CisgICAgUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3Qo
UmVmUHRyPFNpZ25hdHVyZT4mJiwgU2lnbmF0dXJlSW5kZXgsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCiAgICAgYm9vbCBoYXNN
ZW1vcnkoKSBjb25zdCB7IHJldHVybiAhIW1fbW9kdWxlLm1lbW9yeTsgfQogCkBAIC0xNjAsNyAr
MTYwLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9tb2R1bGU7
CiB9OwogCi1hdXRvIFZhbGlkYXRlOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkQXJndW1lbnRzKGNvbnN0IFJlZlB0
cjxTaWduYXR1cmU+JiBzaWduYXR1cmUpIC0+IFJlc3VsdAogewogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyhhZGRMb2NhbChzaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAxKSk7
CkBAIC0zMjQsNyArMzI0LDcgQEAgYXV0byBWYWxpZGF0ZTo6YWRkRW5kVG9VbnJlYWNoYWJsZShD
b250cgogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZENhbGwodW5zaWdu
ZWQsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKK2F1dG8gVmFsaWRh
dGU6OmFkZENhbGwodW5zaWduZWQsIFJlZlB0cjxTaWduYXR1cmU+JiYgc2lnbmF0dXJlLCBjb25z
dCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKIHsKICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpICE9IGFyZ3Muc2l6ZSgpLCAiYXJpdHkgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIs
IGFyZ3Muc2l6ZSgpLCAiIGFyZ3VtZW50cywgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCkpOwogCkBAIC0zMzUsNyArMzM1LDcgQEAgYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1
bnNpZ25lZCwgY29uc3QgUwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFk
ZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbEluZGly
ZWN0KFJlZlB0cjxTaWduYXR1cmU+JiYgc2lnbmF0dXJlLCBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7CiAgICAgVU5VU0VEX1BBUkFNKHNpZ25hdHVyZUluZGV4
KTsKICAgICBBU1NFUlQoc2lnbmF0dXJlSW5kZXggIT0gU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgp
OwpAQCAtMzgyLDcgKzM4Miw3IEBAIHZvaWQgVmFsaWRhdGU6OmR1bXAoY29uc3QgVmVjdG9yPENv
bnRyb2wKICAgICBkYXRhTG9nTG4oKTsKIH0KIAotRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxp
ZGF0ZUZ1bmN0aW9uKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3QgbGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZSwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpCitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlk
YXRlRnVuY3Rpb24oVk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgs
IFJlZlB0cjxTaWduYXR1cmU+IHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZSwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpCiB7CiAgICAgVmFsaWRhdGUgY29udGV4dChtb2R1
bGUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3Iodm0sIGNvbnRleHQs
IHNvdXJjZSwgbGVuZ3RoLCBzaWduYXR1cmUsIG1vZHVsZSwgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVZhbGlkYXRlLmgJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLUV4cGVjdGVkPHZvaWQsIFN0cmlu
Zz4gdmFsaWRhdGVGdW5jdGlvbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVy
ZUluZGV4PiYpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKFZNKiwg
Y29uc3QgdWludDhfdCosIHNpemVfdCwgUmVmUHRyPFNpZ25hdHVyZT4sIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjE0NjQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6
OmZpbmlzaENyZWF0aW9uCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKS0+
SlNXZWJBc3NlbWJseU1vZHVsZTo6fkpTV2ViQXNzZW1ibHlNb2R1bGUoKTsKKyAgICBXYXNtOjpT
aWduYXR1cmVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51cCgpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OnNldENvZGVCbG9jayhWTSYgdm0sIFdhc206Ok1lbW9yeU1vZGUgbW9kZSwgSlNX
ZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBpZiAoIXdhc21GdW5jdGlvbikKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsICJleHBlY3RlZCBhIFdlYkFzc2VtYmx5IGZ1bmN0aW9uIiwgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGV4ZWMtPmpzQ2FsbGVlKCkp
KSkpOwogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0
aW9uLT5zaWduYXR1cmVJbmRleCgpOwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0
dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4
KTsKKyAgICBSZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1biB3aXRoIG1hdGNoZXMg
dGhlIG9uZSB3ZSBleHBlY3QuCiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+
Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5
KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzIs
NiArNzIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQqIG1fd2FzbUVudHJ5UG9pbnRDb2RlOyAvLyBD
YWNoZSBjb2RlIHBvaW50ZXI6IGFsbG93cyB0aGUgd2FzbSAtPiB3YXNtIHN0dWIgdG8gZG8gYSBz
aW5nbGUgbG9hZCBhbmQganVtcCBpbnN0ZWFkIG9mIGhhdmluZyBkZXBlbmRlbnQgbG9hZHMuCiAg
ICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fanNFbnRyeXBvaW50OwogICAg
IFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21FbnRyeXBvaW50OworICAg
IC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNl
IHdlIGhhdmUgYSByZWZlcmVuY2UKKyAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50
cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCisgICAgLy8gZW5zdXJlcyB0
aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgogICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IG1fc2lnbmF0dXJlSW5kZXg7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCShyZXZpc2lvbiAyMTQ2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3
ICsxMjgsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAg
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoganNFbnRyeXBvaW50Q2FsbGVlID0gY29k
ZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5k
SW5kZXgpOwogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBv
aW50Q2FsbGVlID0gY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZXhwLmtpbmRJbmRleCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZt
LCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFdhc206OlNpZ25hdHVy
ZT4gc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCksIGV4cC5maWVsZCwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwg
d2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICBl
eHBvcnRlZFZhbHVlID0gZnVuY3Rpb247CiAgICAgICAgICAgICB9CkBAIC0xODgsNyArMTg4LDcg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgIGlmIChoYXNT
dGFydCkgewogICAgICAgICBhdXRvIHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlID0gbW9kdWxlSW5m
b3JtYXRpb24uc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UudmFsdWVfb3IoMCk7CiAgICAgICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAg
ICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgIFJlZlB0cjxXYXNtOjpT
aWduYXR1cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOwogICAgICAgICAvLyBUaGUgc3RhcnQgZnVuY3Rpb24gbXVzdCBub3QgdGFr
ZSBhbnkgYXJndW1lbnRzIG9yIHJldHVybiBhbnl0aGluZy4gVGhpcyBpcyBlbmZvcmNlZCBieSB0
aGUgcGFyc2VyLgogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsK
ICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206OlZvaWQpOwpA
QCAtMjcyLDcgKzI3Miw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1
YXQKIAogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3
YXNtRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6
U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBs
b2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRleCAwLgogICAgICAgICAgICAgICAg
IC8vIFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5k
ZXggMC4KICAgICAgICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0
cy5mb28gPT09IHRhYmxlLmdldCgwKT8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXCiAgICAgU3RyaW5nIG5hbWUg
PSAiIjsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0
aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0
RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKICAgICBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZUluZGV4LCBjb2RlQmxvY2stPndhc21Ub0pzQ2FsbFN0
dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKTsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJ
bmRleCk7CisgICAgUmVmUHRyPFdhc206OlNpZ25hdHVyZT4gc2lnbmF0dXJlID0gV2FzbTo6U2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIG5h
bWUsIGZ1bmN0aW9uLCBjb2RlQmxvY2spOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxNDY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDYgKzYwLDkgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1
bmN0aW9uOwogICAgIHZvaWQqIG1fd2FzbUVudHJ5cG9pbnRDb2RlOworICAgIC8vIEl0J3Mgc2Fm
ZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBzaWduYXR1cmVJbmRleCBiZWNhdXNlIHdlIGhhdmUgYSBy
ZWZlcmVuY2UKKyAgICAvLyB0byBvdXIgQ29kZUJsb2NrLCB3aGljaCBwb2ludHMgdG8gdGhlIE1v
ZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAorICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0
dWFsIFNpZ25hdHVyZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBtX3NpZ25hdHVyZUluZGV4OwogfTsKIAo=
</data>
<flag name="review"
          id="327330"
          type_id="1"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306001</attachid>
            <date>2017-03-31 12:33:04 -0700</date>
            <delta_ts>2017-03-31 14:48:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>45741</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE3LTAzLTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBSZWYgY291bnQgU2lnbmF0dXJlIGFuZCBTaWduYXR1cmVJbmZvcm1hdGlv
biBzaG91bGQgbm90IGNhcmUgYWJvdXQgVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDMxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgeWV0IGFnYWluIGFub3RoZXIgc3RlcCB0b3dhcmRz
IFBJQy1pZnlpbmcgV2FzbS4KKyAgICAgICAgU2lnbmF0dXJlIHNob3VsZCBiZSByZWYgY291bnRl
ZCBzbyB3ZSBjYW4gdGVsbCB3aGVuCisgICAgICAgIG5vIGNvZGUgaXMgaG9sZGluZyBvbnRvIGEg
U2lnbmF0dXJlLiBUaGlzIG1ha2VzIGl0IGVhc3kKKyAgICAgICAgdG8gZnJlZSB1bnVzZWQgU2ln
bmF0dXJlcy4gQWxzbywgdGhpcyBwYXRjaCByaWRzIFNpZ25hdHVyZUluZm8KKyAgICAgICAgb2Yg
YW55IFZNIGtub3dsZWRnZS4gTm93LCB0aGVyZSBpcyBqdXN0IGEgc2luZ2xlIFNpZ25hdHVyZUlu
Zm8gdGhhdAorICAgICAgICBsaXZlcyBpbiBhIHByb2Nlc3MuCisKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgIChKU0M6Oldhc206OnBh
cnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9K
cyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OmxvYWRBcmd1bWVudHMpOgorICAgICAgICAqIHdh
c20vV2FzbUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNl
cik6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKiB3YXNt
L1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cGFyc2VBbmRWYWxpZGF0
ZU1vZHVsZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNt
U2lnbmF0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5mb3JtYXRpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2luZ2xldG9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmFkb3B0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0
dXJlOjpjcmVhdGVJbnZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0
dXJlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246On5TaWduYXR1cmVJbmZvcm1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6YWxsb2Nh
dGVkU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgICogd2FzbS9XYXNtVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp2YWxp
ZGF0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5oOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmRlc3Ryb3kpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6CisKIDIwMTct
MDMtMzEgIE9sZWtzYW5kciBTa2FjaGtvdiAgPGdza2FjaGtvdkBnbWFpbC5jb20+CiAKICAgICAg
ICAgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlIGluY29ycmVjdGx5IGFwcGxpZXMgInNwZWNpYWwg
cmVwbGFjZW1lbnQgcGFyYW1ldGVycyIgd2hlbiBwYXNzZWQgYSBmdW5jdGlvbgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMTQ2NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCw2
IEBAIGNsYXNzIERhdGFiYXNlOwogbmFtZXNwYWNlIERPTUpJVCB7CiBjbGFzcyBTaWduYXR1cmU7
CiB9Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotbmFtZXNwYWNlIFdhc20gewotY2xhc3MgU2ln
bmF0dXJlSW5mb3JtYXRpb247Ci19Ci0jZW5kaWYKIAogc3RydWN0IEhhc2hUYWJsZTsKIHN0cnVj
dCBJbnN0cnVjdGlvbjsKQEAgLTM2OCwxMCArMzYzLDYgQEAgcHVibGljOgogICAgIFN0cm9uZzxK
U0NlbGw+IGl0ZXJhdGlvblRlcm1pbmF0b3I7CiAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOwogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHN0ZDo6
b25jZV9mbGFnIG1fd2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uT25jZUZsYWc7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uPiBtX3dhc21TaWduYXR1cmVJbmZv
cm1hdGlvbjsKLSNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlRGVmZXJyZWRUaW1l
cj4gcHJvbWlzZURlZmVycmVkVGltZXI7CiAgICAgCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0
cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjQsNyArMTY0LDcgQEAgcHVibGljOgogCiAgICAgQjNJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSk7CiAKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlKik7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFJlZjxTaWduYXR1cmU+Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50
KFR5cGUsIHVpbnQ2NF90KTsKIApAQCAtMjA0LDggKzIwNCw4IEBAIHB1YmxpYzoKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xF
bnRyeSYpOwogCiAgICAgLy8gQ2FsbHMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUqLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKLSAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2ln
bmF0dXJlKiwgU2lnbmF0dXJlSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFJlZjxTaWduYXR1cmU+Jiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0
IFJlZjxTaWduYXR1cmU+JiwgU2lnbmF0dXJlSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAKICAgICB2b2lkIGR1bXAoY29uc3QgVmVj
dG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFjaywgY29uc3QgRXhwcmVzc2lvbkxpc3QqIGV4
cHJlc3Npb25TdGFjayk7CkBAIC00MDcsNyArNDA3LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRMb2NhbChUeXBlIHR5cGUsIAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlKSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBSZWY8U2lnbmF0
dXJlPiYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKCFtX2xvY2Fs
cy5zaXplKCkpOwogICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZl
Q2FwYWNpdHkoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgbWVt
b3J5IGZvciAiLCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKQEAg
LTg4MSw3ICs4ODEsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUo
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwg
Y29uc3QgUmVmPFNpZ25hdHVyZT4mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFT
U0VSVChzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAKQEAgLTk2
Miw3ICs5NjIsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qo
Y29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25z
dCBSZWY8U2lnbmF0dXJlPiYgc2lnbmF0dXJlLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChzaWduYXR1cmVJbmRleCAhPSBTaWduYXR1
cmU6OmludmFsaWRJbmRleCk7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdz
LnRha2VMYXN0KCk7CkBAIC0xMDgzLDcgKzEwODMsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1
bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4
dCwgV2FzbUludGVybmFsRnVuY3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCitzdGF0aWMgdm9pZCBjcmVhdGVK
U1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdh
c21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5jdGlvbiwgY29uc3QgUmVmPFNpZ25hdHVyZT4mIHNpZ25h
dHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7CiAgICAgQ0NhbGxIZWxwZXJz
JiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmpzRW50cnlwb2ludEpJVDsKIApAQCAtMTI2Myw3
ICsxMjYzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4oT3Bjb2RlT3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50
T3Bjb2RlKCksIG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSkpOwogfQog
Ci1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0
TGV2ZWwpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGls
YXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rp
b25MZW5ndGgsIGNvbnN0IFJlZjxTaWduYXR1cmU+JiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWdu
YXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcywgTWVtb3J5TW9kZSBtb2RlLCB1
bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8
V2FzbUludGVybmFsRnVuY3Rpb24+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwganNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGw7CiB9OwogCi1FeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShWTSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIE1l
bW9yeU1vZGUsIHVuc2lnbmVkIG9wdExldmVsID0gQjM6OmRlZmF1bHRPcHRMZXZlbCgpKTsKK0V4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlKFZNJiwgQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNp
emVfdCwgY29uc3QgUmVmPFNpZ25hdHVyZT4mLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRl
eD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2ZWwo
KSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAg
ICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCiAgICAgY29uc3QgV2FzbUNhbGxpbmdDb252ZW50aW9u
JiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICBjb25zdCBKU0NDYWxsaW5n
Q29udmVudGlvbiYganNDQyA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCk7Ci0gICAgY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHZtLCBzaWduYXR1
cmVJbmRleCk7CisgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBKSVQgaml0OwogCkBAIC00MTgsMTIgKzQxOCw4
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBDb2RlTG9j
YXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0No
ZWNrKSk7CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKICAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhl
cik7Ci0jaWYgIWRlZmluZWQoTkRFQlVHKQotICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlv
biA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQodm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJp
bmcoKTsKLSNlbHNlCi0gICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uOwotI2VuZGlmCi0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFT
Y3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5h
c2NpaSgpLmRhdGEoKSkpOworCisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
ICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBz
aWduYXR1cmUtPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKIH0KIAogc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmgJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBs
b2FkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBCMzo6UHJvY2VkdXJlJiBw
cm9jLCBCMzo6QmFzaWNCbG9jayogYmxvY2ssIEIzOjpPcmlnaW4gb3JpZ2luLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHZvaWQgbG9hZEFyZ3VtZW50cyhjb25zdCBSZWY8U2ln
bmF0dXJlPiYgc2lnbmF0dXJlLCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayog
YmxvY2ssIEIzOjpPcmlnaW4gb3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAog
ICAgIHsKICAgICAgICAgQjM6OlZhbHVlKiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjE0Njc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzQsNiArMjM0LDcgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8
SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXM7CisgICAgVmVjdG9yPFJlZjxTaWduYXR1cmU+PiB1c2Vk
U2lnbmF0dXJlczsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJldmlz
aW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwogICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvbkxpc3QgRXhwcmVzc2lvbkxpc3Q7CiAKLSAg
ICBGdW5jdGlvblBhcnNlcihWTSosIENvbnRleHQmLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0
YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYpOworICAgIEZ1bmN0
aW9uUGFyc2VyKFZNKiwgQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNp
emVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgUmVmPFNpZ25hdHVyZT4mLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mKTsKIAogICAgIFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIApAQCAtODQsNyArODQsNyBAQCBwcml2YXRl
OgogICAgIENvbnRleHQmIG1fY29udGV4dDsKICAgICBFeHByZXNzaW9uTGlzdCBtX2V4cHJlc3Np
b25TdGFjazsKICAgICBWZWN0b3I8Q29udHJvbEVudHJ5PiBtX2NvbnRyb2xTdGFjazsKLSAgICBj
b25zdCBTaWduYXR1cmUqIG1fc2lnbmF0dXJlOworICAgIGNvbnN0IFJlZjxTaWduYXR1cmU+JiBt
X3NpZ25hdHVyZTsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogICAgIGNv
bnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5p
cXVlZFNpZ25hdHVyZUluZGljZXM7CiAKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1GdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVu
Y3Rpb25QYXJzZXIoVk0qIHZtLCBDb250ZXh0JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5j
dGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0
dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPFNpZ25hdHVy
ZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMp
CitGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoVk0qIHZtLCBDb250ZXh0
JiBjb250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFJlZjxTaWduYXR1cmU+JiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1
cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykKICAgICA6IFBhcnNlcih2bSwgZnVu
Y3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAg
ICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKQEAgLTMyNCw3ICszMjQsNyBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8uZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiY2Fs
bCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlvbkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5k
ZXggc3BhY2UgIiwgbV9pbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICAgICAg
U2lnbmF0dXJlSW5kZXggY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBjb25zdCBT
aWduYXR1cmUqIGNhbGxlZVNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92
bSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBSZWY8U2lnbmF0dXJlPiBjYWxsZWVT
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KGNhbGxlZVNpZ25hdHVyZUluZGV4
KTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKSA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbGwgZnVuY3Rpb24gaW5kZXgg
IiwgZnVuY3Rpb25JbmRleCwgIiBoYXMgIiwgY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRz
ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAogICAgICAgICBzaXpl
X3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVl
U2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CkBAIC0zNTMsNyArMzUzLDcgQEAgYXV0byBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpIDw9IHNpZ25hdHVyZUluZGV4LCAiY2FsbF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCAi
LCBzaWduYXR1cmVJbmRleCwgIiBleGNlZWRzIGtub3duIHNpZ25hdHVyZXMgIiwgbV9tb2R1bGVT
aWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkpOwogCiAgICAg
ICAgIFNpZ25hdHVyZUluZGV4IGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVTaWduYXR1
cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlc1tzaWduYXR1cmVJbmRleF07Ci0gICAg
ICAgIGNvbnN0IFNpZ25hdHVyZSogY2FsbGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChtX3ZtLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIFJlZjxTaWduYXR1
cmU+IGNhbGxlZVNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoY2FsbGVlU2ln
bmF0dXJlSW5kZXgpOwogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxlZVNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBpbmRleC4KICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3Rh
Y2suc2l6ZSgpLCAiY2FsbF9pbmRpcmVjdCBleHBlY3RzICIsIGFyZ3VtZW50Q291bnQsICIgYXJn
dW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHJldmlzaW9uIDIxNDY3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlVHlw
ZSgpIC0+IFBhcnRpYQogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNv
dW50KSwgImNhbid0IGdldCBUeXBlIHNlY3Rpb24ncyBjb3VudCIpOwogICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoY291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAi
VHlwZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBjb3VudCk7CiAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25h
dHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMiKTsKKyAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUtPnVzZWRTaWduYXR1cmVzLnRy
eVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZv
ciBUeXBlIHNlY3Rpb24ncyAiLCBjb3VudCwgIiBlbnRyaWVzIik7CiAKICAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBpbnQ4X3QgdHlwZTsKQEAgLTEx
OCw4ICsxMTksNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhCiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAhPSBGdW5jLCBpLCAidGggVHlwZSBpcyBu
b24tRnVuYyAiLCB0eXBlKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJV
SW50MzIoYXJndW1lbnRDb3VudCksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyBhcmd1bWVu
dCBjb3VudCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgPT0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCBpLCAidGggYXJndW1lbnQgY291
bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50KTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFNpZ25hdHVyZSwgdm9pZCAoKikoU2lnbmF0dXJlKik+IHNpZ25hdHVyZShTaWduYXR1cmU6OmNy
ZWF0ZShhcmd1bWVudENvdW50KSwgJlNpZ25hdHVyZTo6ZGVzdHJveSk7Ci0gICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXNpZ25hdHVyZSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUiKTsKKyAgICAgICAgUmVmPFNp
Z25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlOjpjcmVhdGUoYXJndW1lbnRDb3VudCk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewog
ICAgICAgICAgICAgVHlwZSBhcmd1bWVudFR5cGU7CkBAIC0xMzgsOCArMTM4LDkgQEAgYXV0byBN
b2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRpYQogICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFR5cGU6OlZvaWQ7CiAgICAgICAgIHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID0gcmV0dXJu
VHlwZTsKIAotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjphZG9wdChtX3ZtLCBzaWduYXR1cmUucmVsZWFzZSgpKTsKLSAgICAgICAg
bV9yZXN1bHQubW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMu
dW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgc3RkOjpwYWlyPFNpZ25h
dHVyZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gcmVzdWx0ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmFkb3B0KFdURk1vdmUoc2lnbmF0dXJlKSk7CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZVNpZ25h
dHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChyZXN1
bHQuZmlyc3QpOworICAgICAgICBtX3Jlc3VsdC5tb2R1bGUtPnVzZWRTaWduYXR1cmVzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKHJlc3VsdC5zZWNvbmQpKTsKICAgICB9CiAgICAgcmV0dXJuIHsg
fTsKIH0KQEAgLTQxNCw3ICs0MTUsNyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCgp
IC0+IFBhcnRpCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc3RhcnRG
dW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRleCIpOwogICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+ZnVuY3Rpb25J
bmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXggIiwgc3RhcnRGdW5jdGlvbkluZGV4LCAiIGV4
Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9yZXN1bHQubW9kdWxlLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOwogICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9y
ZXN1bHQubW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRG
dW5jdGlvbkluZGV4KTsKLSAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQobV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgIFJlZjxTaWduYXR1
cmU+IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJT
dGFydCBmdW5jdGlvbiBjYW4ndCBoYXZlIGFyZ3VtZW50cyIpOwogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgIT0gVm9pZCwgIlN0YXJ0IGZ1bmN0aW9uIGNh
bid0IHJldHVybiBhIHZhbHVlIik7CiAgICAgbV9yZXN1bHQubW9kdWxlLT5zdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3
IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxpZGF0ZU1vZHVsZSgpCiAgICAgICAgIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhd
LmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0Owog
ICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmlu
dGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBj
b25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1f
dm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAgICAgICAgYXV0
byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVGdW5jdGlvbigmbV92bSwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxlSW5mb3JtYXRpb24sIG1fbW9k
dWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgICAgICBp
ZiAoIXZhbGlkYXRpb25SZXN1bHQpIHsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFBsYW46OmNv
bXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FCiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0
aCA9IG1fZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVu
Y3Rpb25Mb2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NF
UlQoZnVuY3Rpb25MZW5ndGggPD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1
cmUqIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVy
ZUluZGV4KTsKKyAgICAgICAgUmVmPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbUV4aXRTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFj
ZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbigm
bV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgKm1fbW9kdWxl
SW5mb3JtYXRpb24sIG1fbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUlu
ZGljZXMpKTsKQEAgLTI3MiwxOSArMjcyLDIwIEBAIHZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3Qg
QWJzdHJhY3RMb2NrZXIKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb21waWxhdGlv
bkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07
CiAgICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbklu
ZGV4XTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZtX3ZtLCBzaWduYXR1cmVJbmRleCktPnRvU3RyaW5nKCk7
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOwotICAgICAgICAgICAg
ICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24gPQotICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVl
PEIzOjpDb21waWxhdGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5
IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFz
Y2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25J
bmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6
Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCAoIldlYkFzc2VtYmx5IGZ1bmN0aW9uWyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRl
eHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNvbnRleHQuanNFbnRyeXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwsIEZ1bmN0
aW9uUHRyKG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlw
b2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgICAg
ICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNU
b1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJK
YXZhU2NyaXB0LT5XZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgs
IHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC5q
c0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVy
bmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRp
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1i
bHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVj
dHMpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCShyZXZpc2lvbiAyMTQ2Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQCBuYW1lc3BhY2UgewogY29uc3QgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CiB9CiAKLWNvbnN0IGNvbnN0ZXhwciBTaWduYXR1cmVJbmRleCBTaWduYXR1cmU6
OmludmFsaWRJbmRleDsKLQogU3RyaW5nIFNpZ25hdHVyZTo6dG9TdHJpbmcoKSBjb25zdAogewog
ICAgIFN0cmluZyByZXN1bHQobWFrZVN0cmluZyhyZXR1cm5UeXBlKCkpKTsKQEAgLTYxLDk1ICs1
OSw5MyBAQCB2b2lkIFNpZ25hdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAKIHVuc2ln
bmVkIFNpZ25hdHVyZTo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgdWludDMyX3Qgc2l6ZVRvSGFzaCA9
IGFsbG9jYXRlZFNpemUoYXJndW1lbnRDb3VudCgpKSAvIHNpemVvZihhbGxvY2F0aW9uU2l6ZVJv
dW5kc1VwVG8pOwotICAgIC8vIEFzc3VtZXMgb3Zlci1hbGxvY2F0ZWQgbWVtb3J5IHdhcyB6ZXJv
LWluaXRpYWxpemVkLCBhbmQgcm91bmRlZC11cCB0byBhbGxvY2F0aW9uU2l6ZVJvdW5kc1VwVG8g
c28gdGhhdCBhIHdpZGVyIGhhc2ggY2FuIGJlIHBlcmZvcm1lZC4KLSAgICBBU1NFUlQoc2l6ZVRv
SGFzaCAqIHNpemVvZihhbGxvY2F0aW9uU2l6ZVJvdW5kc1VwVG8pID09IGFsbG9jYXRlZFNpemUo
YXJndW1lbnRDb3VudCgpKSk7CiAgICAgdW5zaWduZWQgYWNjdW11bGF0b3IgPSAweGExYmNlZGQ4
dTsKLSAgICBjb25zdCBhdXRvKiBwb3MgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGFsbG9jYXRp
b25TaXplUm91bmRzVXBUbyo+KHRoaXMpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBz
aXplVG9IYXNoOyArK2kpCi0gICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChh
Y2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPGFsbG9jYXRpb25TaXplUm91bmRzVXBUbz46Omhhc2go
KnBvcykpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50KCk7ICsr
aSkKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBX
VEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJndW1lbnQo
aSkpKSk7CisgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBX
VEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4ocmV0dXJuVHlw
ZSgpKSkpOwogICAgIHJldHVybiBhY2N1bXVsYXRvcjsKIH0KIAotU2lnbmF0dXJlKiBTaWduYXR1
cmU6OmNyZWF0ZShTaWduYXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50KQotewotICAgIC8vIEhh
c2hpbmcgcmVsaWVzIG9uIGFsbG9jYXRpb24gemVyby1pbml0aWFsaXppbmcgdHJhaWxpbmcgZWxl
bWVudHMuCi0gICAgYXV0byBhbGxvY2F0ZWQgPSB0cnlGYXN0Q2FsbG9jKGFsbG9jYXRlZFNpemUo
YXJndW1lbnRDb3VudCksIDEpOwotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOwotICAgIGlmICgh
YWxsb2NhdGVkLmdldFZhbHVlKHNpZ25hdHVyZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIG5ldyAoc2lnbmF0dXJlKSBTaWduYXR1cmUoYXJndW1lbnRDb3VudCk7Ci0gICAgcmV0dXJu
IHNpZ25hdHVyZTsKLX0KLQotU2lnbmF0dXJlKiBTaWduYXR1cmU6OmNyZWF0ZUludmFsaWQoKQot
ewotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0gY3JlYXRlKDApOwotICAgIFJFTEVBU0VfQVNT
RVJUKHNpZ25hdHVyZSk7Ci0gICAgbmV3IChzaWduYXR1cmUpIFNpZ25hdHVyZShzdGQ6Om51bWVy
aWNfbGltaXRzPFNpZ25hdHVyZUFyZ0NvdW50Pjo6bWF4KCkpOwotICAgIHJldHVybiBzaWduYXR1
cmU7Ci19Ci0KLXZvaWQgU2lnbmF0dXJlOjpkZXN0cm95KFNpZ25hdHVyZSogc2lnbmF0dXJlKQot
ewotICAgIGZhc3RGcmVlKHNpZ25hdHVyZSk7Ci19Ci0KLVNpZ25hdHVyZUluZm9ybWF0aW9uOjp+
U2lnbmF0dXJlSW5mb3JtYXRpb24oKQorUmVmPFNpZ25hdHVyZT4gU2lnbmF0dXJlOjpjcmVhdGUo
U2lnbmF0dXJlQXJnQ291bnQgYXJndW1lbnRDb3VudCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc2lnbmF0dXJlcy5zaXplKCk7ICsraSkKLSAgICAgICAgU2lnbmF0dXJlOjpkZXN0
cm95KG1fc2lnbmF0dXJlc1tpXSk7CisgICAgdm9pZCogbWVtb3J5ID0gU2lnbmF0dXJlOjpvcGVy
YXRvciBuZXcgKGFsbG9jYXRlZFNpemUoYXJndW1lbnRDb3VudCkpOworICAgIFNpZ25hdHVyZSog
cmVzdWx0ID0gbmV3IChtZW1vcnkpIFNpZ25hdHVyZShhcmd1bWVudENvdW50KTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKnJlc3VsdCk7CiB9CiAKIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1
cmVJbmZvcm1hdGlvbigpCiB7Ci0gICAgLy8gVGhlIHplcm90aCBlbnRyeSBpcyBhbiBpbnZhbGlk
IHNpZ25hdHVyZSwgdG8gbWF0Y2ggaW52YWxpZEluZGV4LgotICAgIEFTU0VSVCghU2lnbmF0dXJl
OjppbnZhbGlkSW5kZXgpOwotICAgIFNpZ25hdHVyZSogaW52YWxpZFNpZ25hdHVyZSA9IFNpZ25h
dHVyZTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zaWduYXR1cmVN
YXAuYWRkKFNpZ25hdHVyZUhhc2ggeyBpbnZhbGlkU2lnbmF0dXJlIH0sIFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4KTsKLSAgICBSRUxFQVNFX0FTU0VSVChhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0g
ICAgQVNTRVJUKFNpZ25hdHVyZTo6aW52YWxpZEluZGV4ID09IGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUpOwotICAgIG1fc2lnbmF0dXJlcy5hcHBlbmQoaW52YWxpZFNpZ25hdHVyZSk7CiB9CiAK
LVNpZ25hdHVyZUluZm9ybWF0aW9uKiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFZNKiB2bSkK
K1NpZ25hdHVyZUluZm9ybWF0aW9uJiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2luZ2xldG9uKCkK
IHsKLSAgICBzdGQ6OmNhbGxfb25jZSh2bS0+bV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb25PbmNl
RmxhZywgW3ZtXSB7Ci0gICAgICAgIHZtLT5tX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbiA9IHN0
ZDo6dW5pcXVlX3B0cjxTaWduYXR1cmVJbmZvcm1hdGlvbj4obmV3IFNpZ25hdHVyZUluZm9ybWF0
aW9uKCkpOworICAgIHN0YXRpYyBTaWduYXR1cmVJbmZvcm1hdGlvbiogdGhlT25lOworICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBzaWduYXR1cmVJbmZvcm1hdGlvbkZsYWc7CisgICAgc3RkOjpj
YWxsX29uY2Uoc2lnbmF0dXJlSW5mb3JtYXRpb25GbGFnLCBbXSAoKSB7CisgICAgICAgIHRoZU9u
ZSA9IG5ldyBTaWduYXR1cmVJbmZvcm1hdGlvbjsKICAgICB9KTsKLSAgICByZXR1cm4gdm0tPm1f
d2FzbVNpZ25hdHVyZUluZm9ybWF0aW9uLmdldCgpOworCisgICAgcmV0dXJuICp0aGVPbmU7CiB9
CiAKLVNpZ25hdHVyZUluZGV4IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChWTSogdm0sIFNp
Z25hdHVyZSogc2lnbmF0dXJlKQorc3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWY8U2lnbmF0
dXJlPj4gU2lnbmF0dXJlSW5mb3JtYXRpb246OmFkb3B0KFJlZjxTaWduYXR1cmU+JiYgc2lnbmF0
dXJlKQogewotICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uKiBpbmZvID0gZ2V0KHZtKTsKLSAgICBM
b2NrSG9sZGVyIGxvY2soaW5mby0+bV9sb2NrKTsKKyAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYg
aW5mbyA9IHNpbmdsZXRvbigpOworICAgIExvY2tIb2xkZXIgbG9jayhpbmZvLm1fbG9jayk7CiAK
LSAgICBTaWduYXR1cmVJbmRleCBuZXh0VmFsdWUgPSBpbmZvLT5tX3NpZ25hdHVyZXMuc2l6ZSgp
OwotICAgIGF1dG8gYWRkUmVzdWx0ID0gaW5mby0+bV9zaWduYXR1cmVNYXAuYWRkKFNpZ25hdHVy
ZUhhc2ggeyBzaWduYXR1cmUgfSwgbmV4dFZhbHVlKTsKKyAgICBTaWduYXR1cmVJbmRleCBuZXh0
VmFsdWUgPSBpbmZvLm1fbmV4dEluZGV4OworICAgIGF1dG8gYWRkUmVzdWx0ID0gaW5mby5tX3Np
Z25hdHVyZU1hcC5hZGQoU2lnbmF0dXJlSGFzaCB7IHNpZ25hdHVyZS5wdHIoKSB9LCBuZXh0VmFs
dWUpOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICArK2luZm8ubV9u
ZXh0SW5kZXg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ubV9uZXh0SW5kZXggPiBuZXh0
VmFsdWUpOyAvLyBjcmFzaCBvbiBvdmVyZmxvdy4KICAgICAgICAgQVNTRVJUKG5leHRWYWx1ZSA9
PSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nTG4oIkFkb3B0IG5ldyBzaWduYXR1cmUgIiwgKnNpZ25hdHVyZSwgIiB3
aXRoIGluZGV4ICIsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUsICIgaGFzaDogIiwgc2lnbmF0
dXJlLT5oYXNoKCkpOwotICAgICAgICBpbmZvLT5tX3NpZ25hdHVyZXMuYXBwZW5kKHNpZ25hdHVy
ZSk7Ci0gICAgICAgIHJldHVybiBuZXh0VmFsdWU7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkFk
b3B0IG5ldyBzaWduYXR1cmUgIiwgc2lnbmF0dXJlLmdldCgpLCAiIHdpdGggaW5kZXggIiwgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwgIiBoYXNoOiAiLCBzaWduYXR1cmUtPmhhc2goKSk7CisK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBpbmZvLm1faW5kZXhNYXAuYWRkKG5leHRWYWx1ZSwg
c2lnbmF0dXJlLmNvcHlSZWYoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICAgICAgQVNTRVJUKGluZm8ubV9pbmRleE1hcC5zaXplKCkgPT0gaW5m
by5tX3NpZ25hdHVyZU1hcC5zaXplKCkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bmV4dFZhbHVlLCBXVEZNb3ZlKHNpZ25hdHVyZSkpOwogICAgIH0KICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZ0xuKCJFeGlzdGluZyBzaWduYXR1cmUgIiwgKnNpZ25hdHVyZSwgIiB3
aXRoIGluZGV4ICIsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUsICIgaGFzaDogIiwgc2lnbmF0
dXJlLT5oYXNoKCkpOwotICAgIFNpZ25hdHVyZTo6ZGVzdHJveShzaWduYXR1cmUpOworICAgICAg
ICBkYXRhTG9nTG4oIkV4aXN0aW5nIHNpZ25hdHVyZSAiLCBzaWduYXR1cmUuZ2V0KCksICIgd2l0
aCBpbmRleCAiLCBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLCAiIGhhc2g6ICIsIHNpZ25hdHVy
ZS0+aGFzaCgpKTsKICAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAhPSBTaWdu
YXR1cmU6OmludmFsaWRJbmRleCk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CisgICAgQVNTRVJUKGluZm8ubV9pbmRleE1hcC5jb250YWlucyhhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUsIFJlZjxTaWduYXR1cmU+KCppbmZvLm1faW5kZXhNYXAuZ2V0KGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpKSk7CiB9CiAKLWNvbnN0IFNpZ25hdHVyZSogU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChWTSogdm0sIFNpZ25hdHVyZUluZGV4IGluZGV4KQorUmVmPFNpZ25hdHVyZT4g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChTaWduYXR1cmVJbmRleCBpbmRleCkKIHsKICAgICBB
U1NFUlQoaW5kZXggIT0gU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOwotICAgIFNpZ25hdHVyZUlu
Zm9ybWF0aW9uKiBpbmZvID0gZ2V0KHZtKTsKLSAgICBMb2NrSG9sZGVyIGxvY2soaW5mby0+bV9s
b2NrKTsKKyAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOworICAg
IExvY2tIb2xkZXIgbG9jayhpbmZvLm1fbG9jayk7CiAKLSAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgZGF0YUxvZ0xuKCJHb3Qgc2lnbmF0dXJlICIsICppbmZvLT5tX3NpZ25hdHVyZXMuYXQoaW5k
ZXgpLCAiIGF0IGluZGV4ICIsIGluZGV4KTsKLSAgICByZXR1cm4gaW5mby0+bV9zaWduYXR1cmVz
LmF0KGluZGV4KTsKKyAgICByZXR1cm4gUmVmPFNpZ25hdHVyZT4oKmluZm8ubV9pbmRleE1hcC5n
ZXQoaW5kZXgpKTsKK30KKwordm9pZCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51cCgp
Cit7CisgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2soaW5mby5tX2xvY2spOworCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTaWdu
YXR1cmVJbmRleCwgU2lnbmF0dXJlKj4+IHRvUmVtb3ZlOworICAgIGZvciAoY29uc3QgYXV0byYg
cGFpciA6IGluZm8ubV9pbmRleE1hcCkgeworICAgICAgICBjb25zdCBSZWY8U2lnbmF0dXJlPiYg
c2lnbmF0dXJlID0gcGFpci52YWx1ZTsKKyAgICAgICAgaWYgKHNpZ25hdHVyZS0+cmVmQ291bnQo
KSA9PSAxKSB7CisgICAgICAgICAgICAvLyBXZSdyZSB0aGUgb25seSBvd25lci4KKyAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihwYWlyLmtleSwgc2lnbmF0dXJlLnB0
cigpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogdG9S
ZW1vdmUpIHsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gaW5mby5tX3NpZ25hdHVyZU1hcC5yZW1v
dmUoU2lnbmF0dXJlSGFzaCB7IHBhaXIuc2Vjb25kIH0pOworICAgICAgICBBU1NFUlQocmVtb3Zl
ZCk7CisgICAgICAgIHJlbW92ZWQgPSBpbmZvLm1faW5kZXhNYXAucmVtb3ZlKHBhaXIuZmlyc3Qp
OworICAgICAgICBBU1NFUlQocmVtb3ZlZCk7CisgICAgfQorICAgIGlmIChpbmZvLm1fc2lnbmF0
dXJlTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoaW5mby5tX2luZGV4TWFwLmlzRW1w
dHkoKSk7CisgICAgICAgIGluZm8ubV9uZXh0SW5kZXggPSBTaWduYXR1cmU6OmZpcnN0VmFsaWRJ
bmRleDsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCShyZXZpc2lvbiAyMTQ2Nzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC00NiwxMiArNDcsMTIgQEAgY2xhc3MgVk07CiAKIG5h
bWVzcGFjZSBXYXNtIHsKIAotdHlwZWRlZiB1aW50MzJfdCBTaWduYXR1cmVBcmdDb3VudDsKLXR5
cGVkZWYgdWludDMyX3QgU2lnbmF0dXJlSW5kZXg7Cit1c2luZyBTaWduYXR1cmVBcmdDb3VudCA9
IHVpbnQzMl90OwordXNpbmcgU2lnbmF0dXJlSW5kZXggPSB1aW50MzJfdDsKIAotY2xhc3MgU2ln
bmF0dXJlIHsKK2NsYXNzIFNpZ25hdHVyZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
aWduYXR1cmU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBzdGF0aWMgY29u
c3QgY29uc3RleHByIFNpZ25hdHVyZUFyZ0NvdW50IHNfcmV0Q291bnQgPSAxOwotICAgIHR5cGVk
ZWYgdWludDY0X3QgYWxsb2NhdGlvblNpemVSb3VuZHNVcFRvOwogCiAgICAgU2lnbmF0dXJlKCkg
PSBkZWxldGU7CiAgICAgU2lnbmF0dXJlKGNvbnN0IFNpZ25hdHVyZSYpID0gZGVsZXRlOwpAQCAt
NjUsOSArNjYsOSBAQCBjbGFzcyBTaWduYXR1cmUgewogICAgICAgICByZXR1cm4gaSArIHJlaW50
ZXJwcmV0X2Nhc3Q8VHlwZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc2l6ZW9m
KFNpZ25hdHVyZSkpOwogICAgIH0KICAgICBUeXBlKiBzdG9yYWdlKFNpZ25hdHVyZUFyZ0NvdW50
IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0dXJlKj4odGhpcyktPnN0b3JhZ2Uo
aSk7IH0KLSAgICBzdGF0aWMgdWludDMyX3QgYWxsb2NhdGVkU2l6ZShTaWduYXR1cmVBcmdDb3Vu
dCBhcmdDb3VudCkKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZFNpemUoU2lnbmF0dXJlQXJn
Q291bnQgYXJnQ291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPHNpemVvZihhbGxvY2F0aW9uU2l6ZVJvdW5kc1VwVG8pPihzaXplb2YoU2lnbmF0dXJl
KSArIChzX3JldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUpKTsKKyAgICAgICAgcmV0
dXJuIHNpemVvZihTaWduYXR1cmUpICsgKHNfcmV0Q291bnQgKyBhcmdDb3VudCkgKiBzaXplb2Yo
VHlwZSk7CiAgICAgfQogCiBwdWJsaWM6CkBAIC04NiwxOSArODcsMjYgQEAgcHVibGljOgogICAg
IHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBTaWduYXR1cmUmIHJocykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBh
bGxvY2F0ZWRTaXplKGFyZ3VtZW50Q291bnQoKSkgPT0gYWxsb2NhdGVkU2l6ZShyaHMuYXJndW1l
bnRDb3VudCgpKSAmJiAhbWVtY21wKHRoaXMsICZyaHMsIGFsbG9jYXRlZFNpemUoYXJndW1lbnRD
b3VudCgpKSk7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50KCkgIT0gcmhzLmFyZ3VtZW50Q291
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHJldHVyblR5cGUo
KSAhPSByaHMucmV0dXJuVHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChhcmd1bWVudChpKSAhPSByaHMuYXJndW1lbnQoaSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgU2lnbmF0dXJlKiBjcmVh
dGUoU2lnbmF0dXJlQXJnQ291bnQpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koU2lnbmF0dXJl
Kik7CisgICAgc3RhdGljIFJlZjxTaWduYXR1cmU+IGNyZWF0ZShTaWduYXR1cmVBcmdDb3VudCk7
CiAKICAgICAvLyBTaWduYXR1cmVzIGFyZSB1bmlxdWVkIGFuZCwgZm9yIGNhbGxfaW5kaXJlY3Qs
IHZhbGlkYXRlZCBhdCBydW50aW1lLiBUYWJsZXMgY2FuIGNyZWF0ZSBpbnZhbGlkIFNpZ25hdHVy
ZUluZGV4IHZhbHVlcyB3aGljaCBjYXVzZSBjYWxsX2luZGlyZWN0IHRvIGZhaWwuIFdlIHVzZSAw
IGFzIHRoZSBpbnZhbGlkSW5kZXggc28gdGhhdCB0aGUgY29kZWdlbiBjYW4gZWFzaWx5IHRlc3Qg
Zm9yIGl0IGFuZCB0cmFwLCBhbmQgd2UgYWRkIGEgdG9rZW4gaW52YWxpZCBlbnRyeSBpbiBTaWdu
YXR1cmVJbmZvcm1hdGlvbi4KICAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIFNpZ25hdHVyZUlu
ZGV4IGludmFsaWRJbmRleCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBTaWduYXR1
cmVJbmRleCBmaXJzdFZhbGlkSW5kZXggPSBpbnZhbGlkSW5kZXggKyAxOwogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBTaWduYXR1cmVJbmZvcm1hdGlvbjsKLSAgICBzdGF0aWMgU2lnbmF0
dXJlKiBjcmVhdGVJbnZhbGlkKCk7CiAgICAgU2lnbmF0dXJlQXJnQ291bnQgbV9hcmdDb3VudDsK
ICAgICAvLyBSZXR1cm4gVHlwZSBhbmQgYXJndW1lbnRzIGFyZSBzdG9yZWQgaGVyZS4KIH07CkBA
IC0xNTEsMTcgKzE1OSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogLy8g
U2lnbmF0dXJlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgb24gVk0gdG8gYWxsb3cgYWxs
IHNpZ25hdHVyZXMgdG8gYmUgdW5pcXVlLiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxs
cyBhbm90aGVyIHdhc20gaW5zdGFuY2UuCiAvLyBOb3RlOiBzaWduYXR1cmVzIGFyZSBuZXZlciBy
ZW1vdmVkIGZyb20gVk0gYmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgYWNjb3VudGluZyBmb3Ig
YWxsIFdlYkFzc2VtYmx5Lk1vZHVsZSBhbmQgd2hpY2ggc2lnbmF0dXJlcyB0aGV5IHVzZS4gVGhl
IG1heGltdW0gbnVtYmVyIG9mIHNpZ25hdHVyZXMgaXMgYm91bmRlZCwgYW5kIGlzbid0IHdvcnRo
IHRoZSBjb3VudGluZyBvdmVyaGVhZC4gV2UgY291bGQgY2xlYXIgZXZlcnl0aGluZyB3aGVuIHdl
IHJlYWNoIHplcm8gb3V0c3RhbmRpbmcgV2ViQXNzZW1ibHkuTW9kdWxlLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDM3CiBjbGFzcyBTaWduYXR1cmVJbmZvcm1h
dGlvbiB7Ci0gICAgSGFzaE1hcDxXYXNtOjpTaWduYXR1cmVIYXNoLCBXYXNtOjpTaWduYXR1cmVJ
bmRleD4gbV9zaWduYXR1cmVNYXA7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZSo+IG1fc2lnbmF0dXJl
czsKLSAgICBMb2NrIG1fbG9jazsKLSAgICBzdGF0aWMgU2lnbmF0dXJlSW5mb3JtYXRpb24qIGdl
dChWTSopOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNpZ25hdHVyZUluZm9ybWF0aW9uKTsK
KwogICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uKCk7Ci0gICAgU2lnbmF0dXJlSW5mb3JtYXRpb24o
Y29uc3QgU2lnbmF0dXJlSW5mb3JtYXRpb24mKSA9IGRlbGV0ZTsKIAogcHVibGljOgotICAgIH5T
aWduYXR1cmVJbmZvcm1hdGlvbigpOwotICAgIHN0YXRpYyBTaWduYXR1cmVJbmRleCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRvcHQoVk0qLCBTaWduYXR1cmUqKTsKLSAgICBzdGF0aWMgY29uc3QgU2ln
bmF0dXJlKiBXQVJOX1VOVVNFRF9SRVRVUk4gZ2V0KFZNKiwgU2lnbmF0dXJlSW5kZXgpOworICAg
IHN0YXRpYyBTaWduYXR1cmVJbmZvcm1hdGlvbiYgc2luZ2xldG9uKCk7CisKKyAgICBzdGF0aWMg
c3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gV0FSTl9VTlVTRURfUkVU
VVJOIGFkb3B0KFJlZjxTaWduYXR1cmU+JiYpOworICAgIHN0YXRpYyBSZWY8U2lnbmF0dXJlPiBX
QVJOX1VOVVNFRF9SRVRVUk4gZ2V0KFNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0aWMgdm9pZCB0
cnlDbGVhbnVwKCk7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxXYXNtOjpTaWduYXR1cmVIYXNo
LCBXYXNtOjpTaWduYXR1cmVJbmRleD4gbV9zaWduYXR1cmVNYXA7CisgICAgSGFzaE1hcDxXYXNt
OjpTaWduYXR1cmVJbmRleCwgUmVmPFNpZ25hdHVyZT4+IG1faW5kZXhNYXA7CisgICAgU2lnbmF0
dXJlSW5kZXggbV9uZXh0SW5kZXggeyBTaWduYXR1cmU6OmZpcnN0VmFsaWRJbmRleCB9OworICAg
IExvY2sgbV9sb2NrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjE0
Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWls
KF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAg
ICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUq
KTsKKyAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBSZWY8
U2lnbmF0dXJlPiYpOwogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUgdHlwZSwg
dWludDY0X3QpIHsgcmV0dXJuIHR5cGU7IH0KIApAQCAtMTM4LDggKzEzOCw4IEBAIHB1YmxpYzoK
ICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCkgeyByZXR1cm4g
eyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7Ci0gICAgUmVz
dWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlKiwg
U2lnbmF0dXJlSW5kZXgsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bCh1bnNpZ25lZCBjYWxsZWVJbmRleCwgY29uc3QgUmVmPFNpZ25hdHVyZT4mLCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICBS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBSZWY8U2lnbmF0
dXJlPiYsIFNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3Qg
eyByZXR1cm4gISFtX21vZHVsZS5tZW1vcnk7IH0KIApAQCAtMTYwLDcgKzE2MCw3IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1fbW9kdWxlOwogfTsKIAotYXV0byBW
YWxpZGF0ZTo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlKSAtPiBSZXN1
bHQKK2F1dG8gVmFsaWRhdGU6OmFkZEFyZ3VtZW50cyhjb25zdCBSZWY8U2lnbmF0dXJlPiYgc2ln
bmF0dXJlKSAtPiBSZXN1bHQKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJ
TFMoYWRkTG9jYWwoc2lnbmF0dXJlLT5hcmd1bWVudChpKSwgMSkpOwpAQCAtMzI0LDcgKzMyNCw3
IEBAIGF1dG8gVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHIKICAgICByZXR1cm4g
eyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBTaWduYXR1
cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2ln
bmVkLCBjb25zdCBSZWY8U2lnbmF0dXJlPiYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpICE9IGFy
Z3Muc2l6ZSgpLCAiYXJpdHkgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIsIGFyZ3Muc2l6ZSgpLCAi
IGFyZ3VtZW50cywgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogCkBA
IC0zMzUsNyArMzM1LDcgQEAgYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbCh1bnNpZ25lZCwgY29uc3Qg
UwogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gVmFsaWRhdGU6OmFkZENhbGxJbmRpcmVjdChj
b25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgs
IGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFJlZjxT
aWduYXR1cmU+JiBzaWduYXR1cmUsIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4LCBjb25z
dCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAt
PiBSZXN1bHQKIHsKICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VS
VChzaWduYXR1cmVJbmRleCAhPSBTaWduYXR1cmU6OmludmFsaWRJbmRleCk7CkBAIC0zODIsNyAr
MzgyLDcgQEAgdm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbAogICAgIGRh
dGFMb2dMbigpOwogfQogCi1FeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHZhbGlkYXRlRnVuY3Rpb24o
Vk0qIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25h
dHVyZSogc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlLCBjb25zdCBW
ZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2ln
bmF0dXJlSW5kaWNlcykKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlvbihW
TSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgUmVmPFNp
Z25hdHVyZT4mIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZSwgY29u
c3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVl
ZFNpZ25hdHVyZUluZGljZXMpCiB7CiAgICAgVmFsaWRhdGUgY29udGV4dChtb2R1bGUpOwogICAg
IEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3Iodm0sIGNvbnRleHQsIHNvdXJjZSwg
bGVuZ3RoLCBzaWduYXR1cmUsIG1vZHVsZSwgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVl
ZFNpZ25hdHVyZUluZGljZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVZhbGlkYXRlLmgJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21WYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNz
IFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLUV4cGVjdGVkPHZvaWQsIFN0cmluZz4gdmFsaWRh
dGVGdW5jdGlvbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSos
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYp
OworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKFZNKiwgY29uc3QgdWlu
dDhfdCosIHNpemVfdCwgY29uc3QgUmVmPFNpZ25hdHVyZT4mLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5p
c2hDcmVhdGlvbgogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2VsbCktPkpTV2Vi
QXNzZW1ibHlNb2R1bGU6On5KU1dlYkFzc2VtYmx5TW9kdWxlKCk7CisgICAgV2FzbTo6U2lnbmF0
dXJlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpzZXRDb2RlQmxvY2soVk0mIHZtLCBXYXNtOjpNZW1vcnlNb2RlIG1vZGUsIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMTQ2
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgaWYgKCF3YXNtRnVuY3Rpb24pCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQgYSBXZWJBc3NlbWJseSBmdW5jdGlvbiIsIGRlZmF1bHRT
b3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShleGVjLT5qc0NhbGxlZSgpKSkpKTsK
ICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+
c2lnbmF0dXJlSW5kZXgoKTsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZtLCBzaWduYXR1cmVJbmRleCk7Cisg
ICAgUmVmUHRyPFdhc206OlNpZ25hdHVyZT4gc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgbWVtb3J5IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBv
bmUgd2UgZXhwZWN0LgogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmNvZGVC
bG9jaygpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTQ2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBtX3dhc21FbnRyeVBvaW50Q29kZTsgLy8gQ2FjaGUg
Y29kZSBwb2ludGVyOiBhbGxvd3MgdGhlIHdhc20gLT4gd2FzbSBzdHViIHRvIGRvIGEgc2luZ2xl
IGxvYWQgYW5kIGp1bXAgaW5zdGVhZCBvZiBoYXZpbmcgZGVwZW5kZW50IGxvYWRzLgogICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX2pzRW50cnlwb2ludDsKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4gbV93YXNtRW50cnlwb2ludDsKKyAgICAvLyBJ
dCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgc2lnbmF0dXJlSW5kZXggYmVjYXVzZSB3ZSBo
YXZlIGEgcmVmZXJlbmNlCisgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8g
dGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAorICAgIC8vIGVuc3VyZXMgdGhhdCB0
aGUgYWN0dWFsIFNpZ25hdHVyZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBtX3NpZ25hdHVyZUluZGV4OwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9j
ay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4
KTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0
dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2ln
bmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpTaWduYXR1cmU+IHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwogICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21F
bnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0
ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgfQpAQCAtMTg4LDcgKzE4OCw3IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICBpZiAoaGFzU3RhcnQp
IHsKICAgICAgICAgYXV0byBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1vZHVsZUluZm9ybWF0
aW9uLnN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlLnZhbHVlX29yKDApOwogICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgY29u
c3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBSZWZQdHI8V2FzbTo6U2lnbmF0
dXJlPiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKICAgICAgICAgLy8gVGhlIHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90IHRha2UgYW55
IGFyZ3VtZW50cyBvciByZXR1cm4gYW55dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIHBh
cnNlci4KICAgICAgICAgQVNTRVJUKCFzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAg
ICAgIEFTU0VSVChzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBXYXNtOjpWb2lkKTsKQEAgLTI3
Miw3ICsyNzIsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAK
ICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCk7CiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgICAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
JnZtLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFdhc206OlNpZ25h
dHVyZT4gc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwg
ZnVuY3Rpb24gImZvbyIgYXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAgICAgICAgICAvLyBX
aGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAu
CiAgICAgICAgICAgICAgICAgLy8gRG9lcyAobmV3IEluc3RhbmNlKC4uLikpLmV4cG9ydHMuZm9v
ID09PSB0YWJsZS5nZXQoMCk/CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyMTQ2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5VwogICAgIFN0cmluZyBuYW1lID0gIiI7
CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihj
YWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0
cnVjdHVyZSgpLCBzaWduYXR1cmVJbmRleCwgY29kZUJsb2NrLT53YXNtVG9Kc0NhbGxTdHViRm9y
SW1wb3J0KGltcG9ydEluZGV4KSk7Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1
cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2lnbmF0dXJlSW5kZXgp
OworICAgIFJlZlB0cjxXYXNtOjpTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBuYW1lLCBm
dW5jdGlvbiwgY29kZUJsb2NrKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTQ2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw2ICs2MCw5IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+IG1fY29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlv
bjsKICAgICB2b2lkKiBtX3dhc21FbnRyeXBvaW50Q29kZTsKKyAgICAvLyBJdCdzIHNhZmUgdG8g
anVzdCBob2xkIHRoZSByYXcgc2lnbmF0dXJlSW5kZXggYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJl
bmNlCisgICAgLy8gdG8gb3VyIENvZGVCbG9jaywgd2hpY2ggcG9pbnRzIHRvIHRoZSBNb2R1bGUg
dGhhdCBleHBvcnRlZCB1cywgd2hpY2gKKyAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBT
aWduYXR1cmUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggbV9zaWduYXR1cmVJbmRleDsKIH07CiAK
</data>
<flag name="review"
          id="327381"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306012</attachid>
            <date>2017-03-31 14:48:04 -0700</date>
            <delta_ts>2017-03-31 14:48:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>61739</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE3LTAzLTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBSZWYgY291bnQgU2lnbmF0dXJlIGFuZCBTaWduYXR1cmVJbmZvcm1hdGlv
biBzaG91bGQgbm90IGNhcmUgYWJvdXQgVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MDMxNgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1p
bGxlci4KKworICAgICAgICBUaGlzIGlzIHlldCBhZ2FpbiBhbm90aGVyIHN0ZXAgdG93YXJkcyBQ
SUMtaWZ5aW5nIFdhc20uCisgICAgICAgIFNpZ25hdHVyZSBzaG91bGQgYmUgcmVmIGNvdW50ZWQg
c28gd2UgY2FuIHRlbGwgd2hlbgorICAgICAgICBubyBjb2RlIGlzIGhvbGRpbmcgb250byBhIFNp
Z25hdHVyZS4gVGhpcyBtYWtlcyBpdCBlYXN5CisgICAgICAgIHRvIGZyZWUgdW51c2VkIFNpZ25h
dHVyZXMuIEFsc28sIHRoaXMgcGF0Y2ggcmlkcyBTaWduYXR1cmVJbmZvCisgICAgICAgIG9mIGFu
eSBWTSBrbm93bGVkZ2UuIE5vdywgdGhlcmUgaXMganVzdCBhIHNpbmdsZSBTaWduYXR1cmVJbmZv
IHRoYXQKKyAgICAgICAgbGl2ZXMgaW4gYSBwcm9jZXNzLgorCisgICAgICAgICogcnVudGltZS9W
TS5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSnMp
OgorICAgICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6
Oldhc206OkNhbGxpbmdDb252ZW50aW9uOjpsb2FkQXJndW1lbnRzKToKKyAgICAgICAgKiB3YXNt
L1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIp
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgICogd2FzbS9X
YXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnBhcnNlQW5kVmFsaWRhdGVN
b2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Y29tcGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbVNp
Z25hdHVyZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6aGFzaCk6CisgICAg
ICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U2lnbmF0dXJlSW5mb3JtYXRpb246OlNpZ25hdHVyZUluZm9ybWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpbmdsZXRvbik6CisgICAgICAgIChKU0M6
Oldhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdCk6CisgICAgICAgIChKU0M6Oldhc206
OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1
cmVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51cCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVy
ZTo6Y3JlYXRlSW52YWxpZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVy
ZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZUluZm9y
bWF0aW9uOjp+U2lnbmF0dXJlSW5mb3JtYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHdhc20v
V2FzbVNpZ25hdHVyZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6OmFsbG9jYXRl
ZFNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHdhc20vV2FzbVZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dmFsaWRh
dGVGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtVmFsaWRhdGUuaDoKKyAgICAgICAgKiB3
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpkZXN0cm95KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2
YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOgorCiAyMDE3LTAz
LTMxICBPbGVrc2FuZHIgU2thY2hrb3YgIDxnc2thY2hrb3ZAZ21haWwuY29tPgogCiAgICAgICAg
IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBpbmNvcnJlY3RseSBhcHBsaWVzICJzcGVjaWFsIHJl
cGxhY2VtZW50IHBhcmFtZXRlcnMiIHdoZW4gcGFzc2VkIGEgZnVuY3Rpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDExICsxNTQsNiBA
QCBjbGFzcyBEYXRhYmFzZTsKIG5hbWVzcGFjZSBET01KSVQgewogY2xhc3MgU2lnbmF0dXJlOwog
fQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLW5hbWVzcGFjZSBXYXNtIHsKLWNsYXNzIFNpZ25h
dHVyZUluZm9ybWF0aW9uOwotfQotI2VuZGlmCiAKIHN0cnVjdCBIYXNoVGFibGU7CiBzdHJ1Y3Qg
SW5zdHJ1Y3Rpb247CkBAIC0zNjgsMTAgKzM2Myw2IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8SlND
ZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVy
dHlOYW1lRW51bWVyYXRvcjsKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBzdGQ6Om9u
Y2VfZmxhZyBtX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbk9uY2VGbGFnOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbj4gbV93YXNtU2lnbmF0dXJlSW5mb3Jt
YXRpb247Ci0jZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZURlZmVycmVkVGltZXI+
IHByb21pc2VEZWZlcnJlZFRpbWVyOwogICAgIAogICAgIEpTQ2VsbCogY3VycmVudGx5RGVzdHJ1
Y3RpbmdDYWxsYmFja09iamVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKIAogICAgIEIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUpOwogCi0gICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSopOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBT
aWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2Nh
bChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwg
dWludDY0X3QpOwogCkBAIC0yMDQsOCArMjA0LDggQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5Jik7
CiAKICAgICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSosIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUq
LCBTaWduYXR1cmVJbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYs
IFNpZ25hdHVyZUluZGV4LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRV
bnJlYWNoYWJsZSgpOwogCiAgICAgdm9pZCBkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+
JiBjb250cm9sU3RhY2ssIGNvbnN0IEV4cHJlc3Npb25MaXN0KiBleHByZXNzaW9uU3RhY2spOwpA
QCAtNDA3LDEyICs0MDcsMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBlIHR5
cGUsIAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1l
bnRzKGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKLSAgICBXQVNN
X0NPTVBJTEVfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgc2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxf
SUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
KSwgImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgIiBhcmd1bWVudHMiKTsKIAotICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCkpOworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7
CiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubG9hZEFyZ3VtZW50cyhzaWduYXR1cmUsIG1f
cHJvYywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLAogICAgICAgICBbPV0gKEV4cHJlc3Npb25U
eXBlIGFyZ3VtZW50LCB1bnNpZ25lZCBpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZSogYXJndW1l
bnRWYXJpYWJsZSA9IG1fcHJvYy5hZGRWYXJpYWJsZShhcmd1bWVudC0+dHlwZSgpKTsKQEAgLTg4
MSwxMSArODgxLDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSgK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1
bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIEFTU0VSVChz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCi0gICAgVHlwZSByZXR1
cm5UeXBlID0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCk7CisgICAgVHlwZSByZXR1cm5UeXBlID0g
c2lnbmF0dXJlLnJldHVyblR5cGUoKTsKICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7
CiAKICAgICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoZnVuY3Rpb25JbmRleCkpIHsKQEAgLTk2MiwxMSArOTYyLDExIEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW4KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwg
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVChz
aWduYXR1cmVJbmRleCAhPSBTaWduYXR1cmU6OmludmFsaWRJbmRleCk7CiAgICAgRXhwcmVzc2lv
blR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7Ci0gICAgQVNTRVJUKHNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyOwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXJTaXplOwpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29ucwogCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIE9CSkVDVF9PRkZTRVRPRihDYWxs
YWJsZUZ1bmN0aW9uLCBjb2RlKSk7CiAKLSAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUt
PnJldHVyblR5cGUoKTsKKyAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlw
ZSgpOwogICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3By
b2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSks
CiAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xMDgzLDcgKzEw
ODMsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0
YUxvZ0xuKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxh
dGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgV2FzbUludGVybmFsRnVuY3Rpb24mIGZ1
bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8pCitzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25D
b250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIFdhc21JbnRlcm5hbEZ1bmN0aW9uJiBmdW5jdGlv
biwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvKQogewogICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5qc0Vu
dHJ5cG9pbnRKSVQ7CiAKQEAgLTExMTYsOCArMTExNiw4IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDb21waWwKICAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQyk7CiAgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CiAgICAgdW5zaWduZWQgbnVt
RlBScyA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUtPmFyZ3VtZW50KGkp
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewogICAg
ICAgICBjYXNlIFdhc206Okk2NDoKICAgICAgICAgY2FzZSBXYXNtOjpJMzI6CiAgICAgICAgICAg
ICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgp
KQpAQCAtMTE2OCwxMiArMTE2OCwxMiBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoQ29tcGlsCiAgICAgICAgIH0KIAogICAgICAgICBwdHJkaWZmX3Qgd2FzbU9mZnNldCA9IENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6ZW9mKHZvaWQqKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyBpKysp
IHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5hcmd1bWVudChpKSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsr
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewogICAgICAg
ICAgICAgY2FzZSBXYXNtOjpJMzI6CiAgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoKICAgICAg
ICAgICAgICAgICBpZiAobnVtR1BScyA+PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFy
Z3Muc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUtPmFyZ3VtZW50
KGkpID09IFdhc206OkkzMikgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpID09IFdhc206OkkzMikgewogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpz
T2Zmc2V0KSwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyB2b2lk
IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWwKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1l
bnQoaSkgPT0gV2FzbTo6STMyKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpID09IFdhc206OkkzMikKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09m
ZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5s
b2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBq
c09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIo
KSk7CkBAIC0xMTkyLDcgKzExOTIsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoQ29tcGlsCiAgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKICAgICAgICAgICAgIGNhc2Ug
V2FzbTo6RjY0OgogICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZS0+YXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2Fz
bU9mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTIwMSw3ICsxMjAx
LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbAogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZv
aWQqKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAo
c2lnbmF0dXJlLT5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAgICAgICAgICAg
IGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJB
cmdzW251bUZQUnNdLmZwcigpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHdhc21DYWxsaW5nQ29udmVudGlvbigp
Lm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKSk7CkBAIC0xMjQzLDcgKzEyNDMsNyBAQCBzdGF0aWMg
dm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsCiAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwg
cmVnKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpKSB7Cisg
ICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CiAgICAgY2FzZSBXYXNtOjpGMzI6
CiAgICAgICAgIGppdC5tb3ZlRmxvYXRUbzMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTI2Myw3ICsxMjYzLDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PE9yaWdpbj4oT3Bjb2RlT3JpZ2luKG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlKCks
IG1fcGFyc2VyLT5jdXJyZW50T3Bjb2RlU3RhcnRpbmdPZmZzZXQoKSkpOwogfQogCi1FeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0
IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgY29u
c3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVl
ZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0TGV2ZWwpCitF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShWTSYgdm0sIENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250
ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1Rv
VW5pcXVlZFNpZ25hdHVyZUluZGljZXMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgb3B0TGV2
ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGpz
RW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxsOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoVk0m
LCBDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWdu
YXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mLCBNZW1vcnlNb2RlLCB1bnNp
Z25lZCBvcHRMZXZlbCA9IEIzOjpkZWZhdWx0T3B0TGV2ZWwoKSk7CitFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShW
TSYsIENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYsIE1lbW9yeU1vZGUsIHVu
c2lnbmVkIG9wdExldmVsID0gQjM6OmRlZmF1bHRPcHRMZXZlbCgpKTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJp
bmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICAvLyBJdCdkIGJlIHN1cGVy
IGVhc3kgdG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Njk0MDEKICAgICBjb25zdCBXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9IHdhc21DYWxs
aW5nQ29udmVudGlvbigpOwogICAgIGNvbnN0IEpTQ0NhbGxpbmdDb252ZW50aW9uJiBqc0NDID0g
anNjQ2FsbGluZ0NvbnZlbnRpb24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQodm0sIHNpZ25hdHVyZUluZGV4KTsKLSAgICB1bnNp
Z25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CisgICAgdW5zaWduZWQgYXJnQ291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
OwogICAgIEpJVCBqaXQ7CiAKICAgICAvLyBCZWxvdywgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNh
bGxpbmcgY29udmVudGlvbiBpcyBhbHdheXMgb24gdGhlIHN0YWNrLgpAQCAtNjgsOSArNjgsOSBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAKICAgICB7CiAgICAg
ICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7Ci0gICAgICAgIGhhc0JhZEk2NFVzZSB8PSBz
aWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAgIGhhc0JhZEk2NFVzZSB8PSBz
aWduYXR1cmUucmV0dXJuVHlwZSgpID09IEk2NDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdO
dW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAhaGFzQmFkSTY0VXNlOyArK2FyZ051bSkgewot
ICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLT5hcmd1bWVudChhcmdOdW0pOwor
ICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgVm9pZDoKICAg
ICAgICAgICAgIGNhc2UgRnVuYzoKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zm
c2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyAr
K2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLT5hcmd1bWVu
dChhcmdOdW0pOworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50
KGFyZ051bSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKICAgICAgICAgICAgIGNh
c2UgVm9pZDoKICAgICAgICAgICAgIGNhc2UgRnVuYzoKQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgIHVuc2lnbmVkIGNh
bGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0g
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8
IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0
dXJlLT5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0
dXJlLmFyZ3VtZW50KGFyZ051bSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKICAg
ICAgICAgICAgIGNhc2UgVm9pZDoKICAgICAgICAgICAgIGNhc2UgRnVuYzoKQEAgLTI4NSw3ICsy
ODUsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAKICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKIAotICAgIHN3aXRjaCAoc2ln
bmF0dXJlLT5yZXR1cm5UeXBlKCkpIHsKKyAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBl
KCkpIHsKICAgICBjYXNlIFZvaWQ6CiAgICAgICAgIC8vIERpc2NhcmQuCiAgICAgICAgIGJyZWFr
OwpAQCAtNDE4LDEyICs0MTgsOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21U
b0pzKFZNCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOwogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBh
dGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCk7CiAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0
aEJlZ2luLCBob3RQYXRoT3RoZXIpOwotI2lmICFkZWZpbmVkKE5ERUJVRykKLSAgICBTdHJpbmcg
c2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHZtLCBzaWdu
YXR1cmVJbmRleCktPnRvU3RyaW5nKCk7Ci0jZWxzZQotICAgIFN0cmluZyBzaWduYXR1cmVEZXNj
cmlwdGlvbjsKLSNlbmRpZgotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
IldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2ln
bmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKTsKKworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0g
JXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsK
IH0KIAogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9XYXNtKHVuc2lnbmVkIGlt
cG9ydEluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Ci0gICAgdm9pZCBsb2FkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJl
LCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayogYmxvY2ssIEIzOjpPcmlnaW4g
b3JpZ2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHZvaWQgbG9hZEFyZ3Vt
ZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6
OkJhc2ljQmxvY2sqIGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKICAgICB7CiAgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7
CiAKQEAgLTEyOCw4ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50
Q291bnQgPSAwOwogICAgICAgICBzaXplX3Qgc3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplOwogCi0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7
ICsraSkgewotICAgICAgICAgICAgQjM6OlR5cGUgdHlwZSA9IHRvQjNUeXBlKHNpZ25hdHVyZS0+
YXJndW1lbnQoaSkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICAgICAgQjM6OlR5cGUgdHlwZSA9IHRvQjNU
eXBlKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CiAgICAgICAgICAgICBCMzo6VmFsdWUqIGFyZ3Vt
ZW50OwogICAgICAgICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJndW1lbnQodHlw
ZSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKICAgICAg
ICAgICAgIGlmIChyZXAuaXNSZWcoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDcgQEAgc3Ry
dWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAg
IFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwog
ICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXM7CisgICAgVmVjdG9yPFJlZjxTaWduYXR1cmU+PiB1c2VkU2lnbmF0dXJlczsKIAogICAgIE1l
bW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6
OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6
RXhwcmVzc2lvbkxpc3QgRXhwcmVzc2lvbkxpc3Q7CiAKLSAgICBGdW5jdGlvblBhcnNlcihWTSos
IENvbnRleHQmLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3Qg
VmVjdG9yPFNpZ25hdHVyZUluZGV4PiYpOworICAgIEZ1bmN0aW9uUGFyc2VyKFZNKiwgQ29udGV4
dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwg
Y29uc3QgU2lnbmF0dXJlJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8
U2lnbmF0dXJlSW5kZXg+Jik7CiAKICAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
KCk7CiAKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBDb250ZXh0JiBtX2NvbnRleHQ7
CiAgICAgRXhwcmVzc2lvbkxpc3QgbV9leHByZXNzaW9uU3RhY2s7CiAgICAgVmVjdG9yPENvbnRy
b2xFbnRyeT4gbV9jb250cm9sU3RhY2s7Ci0gICAgY29uc3QgU2lnbmF0dXJlKiBtX3NpZ25hdHVy
ZTsKKyAgICBjb25zdCBTaWduYXR1cmUmIG1fc2lnbmF0dXJlOwogICAgIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBtX2luZm87CiAgICAgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbV9t
b2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlczsKIApAQCAtOTUs
NyArOTUsNyBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLUZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihWTSogdm0sIENvbnRleHQmIGNv
bnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0
aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJbmRpY2Vz
VG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykKK0Z1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5j
dGlvblBhcnNlcihWTSogdm0sIENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0
aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJl
SW5kZXg+JiBtb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcykK
ICAgICA6IFBhcnNlcih2bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgpCiAgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKQEAgLTExMiw3
ICsxMTIsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgpIC0+CiB7CiAg
ICAgdWludDMyX3QgbG9jYWxDb3VudDsKIAotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29u
dGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUpLCAiY2FuJ3QgYWRkICIsIG1fc2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIHRvIEZ1bmN0aW9uIik7CisgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZSksICJjYW4n
dCBhZGQgIiwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyB0byBGdW5j
dGlvbiIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGxvY2FsQ291
bnQpLCAiY2FuJ3QgZ2V0IGxvY2FsIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihs
b2NhbENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkZ1bmN0
aW9uIHNlY3Rpb24ncyBsb2NhbCBjb3VudCBpcyB0b28gYmlnICIsIGxvY2FsQ291bnQpOwogCkBA
IC0xMzQsNyArMTM0LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2UoKSAt
PgogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OnBhcnNlQm9keSgpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBtX2NvbnRyb2xTdGFjay5h
cHBlbmQoeyBFeHByZXNzaW9uTGlzdCgpLCBtX2NvbnRleHQuYWRkVG9wTGV2ZWwobV9zaWduYXR1
cmUtPnJldHVyblR5cGUoKSkgfSk7CisgICAgbV9jb250cm9sU3RhY2suYXBwZW5kKHsgRXhwcmVz
c2lvbkxpc3QoKSwgbV9jb250ZXh0LmFkZFRvcExldmVsKG1fc2lnbmF0dXJlLnJldHVyblR5cGUo
KSkgfSk7CiAgICAgdWludDhfdCBvcDsKICAgICB3aGlsZSAobV9jb250cm9sU3RhY2suc2l6ZSgp
KSB7CiAgICAgICAgIG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0ID0gbV9vZmZzZXQ7CkBA
IC0zMjQsMTIgKzMyNCwxMiBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4
cHJlCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25JbmRleCA+PSBtX2luZm8u
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5jdGlv
bkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9pbmZvLmZ1bmN0aW9u
SW5kZXhTcGFjZVNpemUoKSk7CiAKICAgICAgICAgU2lnbmF0dXJlSW5kZXggY2FsbGVlU2lnbmF0
dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIGNhbGxlZVNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV92bSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBm
dW5jdGlvbkluZGV4LCAiIGhhcyAiLCBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwg
IiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lvbiBzdGFjayBjdXJyZW50bHkgaG9sZHMgIiwg
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOworICAgICAgICBjb25zdCBTaWdu
YXR1cmUmIGNhbGxlZVNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoY2FsbGVl
U2lnbmF0dXJlSW5kZXgpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNhbGxlZVNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsIGZ1
bmN0aW9uIGluZGV4ICIsIGZ1bmN0aW9uSW5kZXgsICIgaGFzICIsIGNhbGxlZVNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCksICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3Vy
cmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAot
ICAgICAgICBzaXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpIC0gY2FsbGVlU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgIHNpemVfdCBm
aXJzdEFyZ3VtZW50SW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBjYWxsZWVTaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpOwogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFy
Z3M7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGNhbGxlZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwg
IiBhcmd1bWVudHMiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJncy50cnlSZXNl
cnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJn
dW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgYXJncy51bmNoZWNrZWRBcHBlbmQobV9leHByZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICBt
X2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKQEAgLTM1Myw4ICsz
NTMsOCBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYobV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2ln
bmF0dXJlSW5kaWNlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mg
c2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0
dXJlcyAiLCBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2Vz
LnNpemUoKSk7CiAKICAgICAgICAgU2lnbmF0dXJlSW5kZXggY2FsbGVlU2lnbmF0dXJlSW5kZXgg
PSBtX21vZHVsZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzW3NpZ25h
dHVyZUluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlKiBjYWxsZWVTaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1fdm0sIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKLSAg
ICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSArIDE7IC8vIEFkZCB0aGUgY2FsbGVlJ3MgaW5kZXguCisgICAgICAgIGNvbnN0IFNpZ25h
dHVyZSYgY2FsbGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjYWxsZWVT
aWduYXR1cmVJbmRleCk7CisgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSArIDE7IC8vIEFkZCB0aGUgY2FsbGVlJ3MgaW5kZXguCiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1fZXhwcmVzc2lvblN0
YWNrLnNpemUoKSwgImNhbGxfaW5kaXJlY3QgZXhwZWN0cyAiLCBhcmd1bWVudENvdW50LCAiIGFy
Z3VtZW50cywgYnV0IHRoZSBleHByZXNzaW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAiLCBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7CiAKICAgICAgICAgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiBhcmdzOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmUKIAogICAgIGNhc2UgUmV0dXJuOiB7CiAgICAgICAgIEV4cHJl
c3Npb25MaXN0IHJldHVyblZhbHVlczsKLSAgICAgICAgaWYgKG1fc2lnbmF0dXJlLT5yZXR1cm5U
eXBlKCkgIT0gVm9pZCkgeworICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSgpICE9
IFZvaWQpIHsKICAgICAgICAgICAgIEV4cHJlc3Npb25UeXBlIHJldHVyblZhbHVlOwogICAgICAg
ICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhyZXR1cm5WYWx1ZSwgInJl
dHVybiIpOwogICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFwcGVuZChyZXR1cm5WYWx1ZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNw
cAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBhdXRvIE1v
ZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoY291bnQpLCAiY2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50
Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCksICJUeXBlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNv
dW50KTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGVTaWduYXR1cmVJ
bmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQp
LCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291
bnQsICIgZW50cmllcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fcmVzdWx0Lm1vZHVs
ZS0+dXNlZFNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMi
KTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAg
IGludDhfdCB0eXBlOwpAQCAtMTE4LDggKzExOSw5IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJz
ZVR5cGUoKSAtPiBQYXJ0aWEKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlICE9IEZ1
bmMsIGksICJ0aCBUeXBlIGlzIG5vbi1GdW5jICIsIHR5cGUpOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSwgImNhbid0IGdldCAiLCBp
LCAidGggVHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoYXJndW1lbnRDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCks
IGksICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQpOwotICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2lnbmF0dXJlLCB2b2lkICgqKShTaWduYXR1cmUqKT4gc2ln
bmF0dXJlKFNpZ25hdHVyZTo6Y3JlYXRlKGFyZ3VtZW50Q291bnQpLCAmU2lnbmF0dXJlOjpkZXN0
cm95KTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2lnbmF0dXJlLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVy
ZSIpOworICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBtYXliZVNpZ25hdHVyZSA9IFNpZ25hdHVy
ZTo6dHJ5Q3JlYXRlKGFyZ3VtZW50Q291bnQpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtYXliZVNpZ25hdHVyZSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUg
c2VjdGlvbidzICIsIGksICJ0aCBzaWduYXR1cmUiKTsKKyAgICAgICAgUmVmPFNpZ25hdHVyZT4g
c2lnbmF0dXJlID0gbWF5YmVTaWduYXR1cmUucmVsZWFzZU5vbk51bGwoKTsKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgICAg
ICBUeXBlIGFyZ3VtZW50VHlwZTsKQEAgLTEzOCw4ICsxNDAsOSBAQCBhdXRvIE1vZHVsZVBhcnNl
cjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhCiAgICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKICAgICAgICAgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPSByZXR1cm5UeXBlOwogCi0g
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmFkb3B0KG1fdm0sIHNpZ25hdHVyZS5yZWxlYXNlKCkpOwotICAgICAgICBtX3Jlc3VsdC5t
b2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRB
cHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBzdGQ6OnBhaXI8U2lnbmF0dXJlSW5kZXgs
IFJlZjxTaWduYXR1cmU+PiByZXN1bHQgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6YWRvcHQoV1RG
TW92ZShzaWduYXR1cmUpKTsKKyAgICAgICAgbV9yZXN1bHQubW9kdWxlU2lnbmF0dXJlSW5kaWNl
c1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHJlc3VsdC5maXJzdCk7
CisgICAgICAgIG1fcmVzdWx0Lm1vZHVsZS0+dXNlZFNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUocmVzdWx0LnNlY29uZCkpOwogICAgIH0KICAgICByZXR1cm4geyB9OwogfQpAQCAt
NDE0LDkgKzQxNyw5IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZVN0YXJ0KCkgLT4gUGFydGkK
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzdGFydEZ1bmN0aW9uSW5k
ZXgpLCAiY2FuJ3QgZ2V0IFN0YXJ0IGluZGV4Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihz
dGFydEZ1bmN0aW9uSW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCksICJTdGFydCBpbmRleCAiLCBzdGFydEZ1bmN0aW9uSW5kZXgsICIgZXhjZWVkcyBmdW5j
dGlvbiBpbmRleCBzcGFjZSAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZ1bmN0aW9uSW5kZXhTcGFjZVNp
emUoKSk7CiAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX3Jlc3VsdC5tb2R1
bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5k
ZXgpOwotICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChtX3ZtLCBzaWduYXR1cmVJbmRleCk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhhdmUgYXJn
dW1lbnRzIik7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUtPnJldHVyblR5cGUo
KSAhPSBWb2lkLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgcmV0dXJuIGEgdmFsdWUiKTsKKyAgICBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhhdmUgYXJndW1lbnRzIik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUucmV0dXJuVHlwZSgpICE9IFZvaWQsICJTdGFydCBm
dW5jdGlvbiBjYW4ndCByZXR1cm4gYSB2YWx1ZSIpOwogICAgIG1fcmVzdWx0Lm1vZHVsZS0+c3Rh
cnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7CiAgICAgcmV0dXJuIHsg
fTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlz
aW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIGJvb2wgUGxhbjo6cGFyc2VBbmRWYWxp
ZGF0ZU1vZHVsZSgpCiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IG1fZnVuY3Rpb25M
b2NhdGlvbkluQmluYXJ5W2Z1bmN0aW9uSW5kZXhdLmVuZCAtIG1fZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5W2Z1bmN0aW9uSW5kZXhdLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5n
dGggPD0gbV9zb3VyY2VMZW5ndGgpOwogICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKIAogICAgICAgICBhdXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxp
ZGF0ZUZ1bmN0aW9uKCZtX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0
dXJlLCAqbV9tb2R1bGVJbmZvcm1hdGlvbiwgbV9tb2R1bGVTaWduYXR1cmVJbmRpY2VzVG9Vbmlx
dWVkU2lnbmF0dXJlSW5kaWNlcyk7CiAgICAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkgewpA
QCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlv
bkUKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoID0gbV9mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnlbZnVuY3Rpb25JbmRleF0uZW5kIC0gbV9mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnlbZnVu
Y3Rpb25JbmRleF0uc3RhcnQ7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBtX3Nv
dXJjZUxlbmd0aCk7CiAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rp
b25JbmRleF07Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gU2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldCgmbV92bSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOwogICAgICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21FeGl0
U3R1YnMuc2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKICAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5j
dGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsK
ICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oJm1fdm0sIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsICptX21vZHVsZUluZm9ybWF0aW9uLCBtX21vZHVsZVNp
Z25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKSk7CkBAIC0yNzIsMTkgKzI3
MiwyMCBAQCB2b2lkIFBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgm
bV92bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRy
eXBvaW50SklULCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KLSAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5j
dGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3Zl
KGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5j
b21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBm
dW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxs
cHRyKTsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNvbnRleHQuanNFbnRy
eXBvaW50VG9XYXNtRW50cnlwb2ludENhbGwsIEZ1bmN0aW9uUHRyKG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgICAgICAgICAgICAgICAgICBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0
aW9uID0KLSAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRp
b24+KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJseSBl
bnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFz
Y2lpKCkuZGF0YSgpKSksIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5k
ZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIz
OjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBm
dW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBXVEZN
b3ZlKGNvbnRleHQuanNFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNp
Z25hdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNpZ25hdHVyZS5jcHAJKHJldmlzaW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw2IEBA
IG5hbWVzcGFjZSB7CiBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotY29uc3QgY29u
c3RleHByIFNpZ25hdHVyZUluZGV4IFNpZ25hdHVyZTo6aW52YWxpZEluZGV4OwotCiBTdHJpbmcg
U2lnbmF0dXJlOjp0b1N0cmluZygpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlc3VsdChtYWtlU3Ry
aW5nKHJldHVyblR5cGUoKSkpOwpAQCAtNjEsOTUgKzU5LDk3IEBAIHZvaWQgU2lnbmF0dXJlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGMKIAogdW5zaWduZWQgU2lnbmF0dXJlOjpoYXNoKCkgY29u
c3QKIHsKLSAgICB1aW50MzJfdCBzaXplVG9IYXNoID0gYWxsb2NhdGVkU2l6ZShhcmd1bWVudENv
dW50KCkpIC8gc2l6ZW9mKGFsbG9jYXRpb25TaXplUm91bmRzVXBUbyk7Ci0gICAgLy8gQXNzdW1l
cyBvdmVyLWFsbG9jYXRlZCBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIGFuZCByb3VuZGVk
LXVwIHRvIGFsbG9jYXRpb25TaXplUm91bmRzVXBUbyBzbyB0aGF0IGEgd2lkZXIgaGFzaCBjYW4g
YmUgcGVyZm9ybWVkLgotICAgIEFTU0VSVChzaXplVG9IYXNoICogc2l6ZW9mKGFsbG9jYXRpb25T
aXplUm91bmRzVXBUbykgPT0gYWxsb2NhdGVkU2l6ZShhcmd1bWVudENvdW50KCkpKTsKICAgICB1
bnNpZ25lZCBhY2N1bXVsYXRvciA9IDB4YTFiY2VkZDh1OwotICAgIGNvbnN0IGF1dG8qIHBvcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgYWxsb2NhdGlvblNpemVSb3VuZHNVcFRvKj4odGhpcyk7
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemVUb0hhc2g7ICsraSkKLSAgICAgICAg
YWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8
YWxsb2NhdGlvblNpemVSb3VuZHNVcFRvPjo6aGFzaCgqcG9zKSk7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBhY2N1bXVsYXRvciA9
IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFz
aChzdGF0aWNfY2FzdDx1aW50OF90Pihhcmd1bWVudChpKSkpKTsKKyAgICBhY2N1bXVsYXRvciA9
IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFz
aChzdGF0aWNfY2FzdDx1aW50OF90PihyZXR1cm5UeXBlKCkpKSk7CiAgICAgcmV0dXJuIGFjY3Vt
dWxhdG9yOwogfQogCi1TaWduYXR1cmUqIFNpZ25hdHVyZTo6Y3JlYXRlKFNpZ25hdHVyZUFyZ0Nv
dW50IGFyZ3VtZW50Q291bnQpCitSZWZQdHI8U2lnbmF0dXJlPiBTaWduYXR1cmU6OnRyeUNyZWF0
ZShTaWduYXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50KQogewotICAgIC8vIEhhc2hpbmcgcmVs
aWVzIG9uIGFsbG9jYXRpb24gemVyby1pbml0aWFsaXppbmcgdHJhaWxpbmcgZWxlbWVudHMuCi0g
ICAgYXV0byBhbGxvY2F0ZWQgPSB0cnlGYXN0Q2FsbG9jKGFsbG9jYXRlZFNpemUoYXJndW1lbnRD
b3VudCksIDEpOwotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOwotICAgIGlmICghYWxsb2NhdGVk
LmdldFZhbHVlKHNpZ25hdHVyZSkpCisgICAgLy8gV2UgdXNlIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEIGZvciB0aGlzIGNsYXNzLgorICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhhbGxv
Y2F0ZWRTaXplKGFyZ3VtZW50Q291bnQpKTsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOwor
ICAgIGlmICghcmVzdWx0LmdldFZhbHVlKG1lbW9yeSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIG5ldyAoc2lnbmF0dXJlKSBTaWduYXR1cmUoYXJndW1lbnRDb3VudCk7Ci0gICAgcmV0
dXJuIHNpZ25hdHVyZTsKLX0KLQotU2lnbmF0dXJlKiBTaWduYXR1cmU6OmNyZWF0ZUludmFsaWQo
KQotewotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlID0gY3JlYXRlKDApOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHNpZ25hdHVyZSk7Ci0gICAgbmV3IChzaWduYXR1cmUpIFNpZ25hdHVyZShzdGQ6Om51
bWVyaWNfbGltaXRzPFNpZ25hdHVyZUFyZ0NvdW50Pjo6bWF4KCkpOwotICAgIHJldHVybiBzaWdu
YXR1cmU7Ci19Ci0KLXZvaWQgU2lnbmF0dXJlOjpkZXN0cm95KFNpZ25hdHVyZSogc2lnbmF0dXJl
KQotewotICAgIGZhc3RGcmVlKHNpZ25hdHVyZSk7Ci19Ci0KLVNpZ25hdHVyZUluZm9ybWF0aW9u
Ojp+U2lnbmF0dXJlSW5mb3JtYXRpb24oKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9zaWduYXR1cmVzLnNpemUoKTsgKytpKQotICAgICAgICBTaWduYXR1cmU6OmRlc3Ryb3kobV9z
aWduYXR1cmVzW2ldKTsKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG5ldyAoTm90TnVsbCwg
bWVtb3J5KSBTaWduYXR1cmUoYXJndW1lbnRDb3VudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKHNp
Z25hdHVyZSk7CiB9CiAKIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1hdGlv
bigpCiB7Ci0gICAgLy8gVGhlIHplcm90aCBlbnRyeSBpcyBhbiBpbnZhbGlkIHNpZ25hdHVyZSwg
dG8gbWF0Y2ggaW52YWxpZEluZGV4LgotICAgIEFTU0VSVCghU2lnbmF0dXJlOjppbnZhbGlkSW5k
ZXgpOwotICAgIFNpZ25hdHVyZSogaW52YWxpZFNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6Y3JlYXRl
SW52YWxpZCgpOwotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zaWduYXR1cmVNYXAuYWRkKFNpZ25h
dHVyZUhhc2ggeyBpbnZhbGlkU2lnbmF0dXJlIH0sIFNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsK
LSAgICBSRUxFQVNFX0FTU0VSVChhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgQVNTRVJUKFNp
Z25hdHVyZTo6aW52YWxpZEluZGV4ID09IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwotICAg
IG1fc2lnbmF0dXJlcy5hcHBlbmQoaW52YWxpZFNpZ25hdHVyZSk7CiB9CiAKLVNpZ25hdHVyZUlu
Zm9ybWF0aW9uKiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFZNKiB2bSkKK1NpZ25hdHVyZUlu
Zm9ybWF0aW9uJiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2luZ2xldG9uKCkKIHsKLSAgICBzdGQ6
OmNhbGxfb25jZSh2bS0+bV93YXNtU2lnbmF0dXJlSW5mb3JtYXRpb25PbmNlRmxhZywgW3ZtXSB7
Ci0gICAgICAgIHZtLT5tX3dhc21TaWduYXR1cmVJbmZvcm1hdGlvbiA9IHN0ZDo6dW5pcXVlX3B0
cjxTaWduYXR1cmVJbmZvcm1hdGlvbj4obmV3IFNpZ25hdHVyZUluZm9ybWF0aW9uKCkpOworICAg
IHN0YXRpYyBTaWduYXR1cmVJbmZvcm1hdGlvbiogdGhlT25lOworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBzaWduYXR1cmVJbmZvcm1hdGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc2ln
bmF0dXJlSW5mb3JtYXRpb25GbGFnLCBbXSAoKSB7CisgICAgICAgIHRoZU9uZSA9IG5ldyBTaWdu
YXR1cmVJbmZvcm1hdGlvbjsKICAgICB9KTsKLSAgICByZXR1cm4gdm0tPm1fd2FzbVNpZ25hdHVy
ZUluZm9ybWF0aW9uLmdldCgpOworCisgICAgcmV0dXJuICp0aGVPbmU7CiB9CiAKLVNpZ25hdHVy
ZUluZGV4IFNpZ25hdHVyZUluZm9ybWF0aW9uOjphZG9wdChWTSogdm0sIFNpZ25hdHVyZSogc2ln
bmF0dXJlKQorc3RkOjpwYWlyPFNpZ25hdHVyZUluZGV4LCBSZWY8U2lnbmF0dXJlPj4gU2lnbmF0
dXJlSW5mb3JtYXRpb246OmFkb3B0KFJlZjxTaWduYXR1cmU+JiYgc2lnbmF0dXJlKQogewotICAg
IFNpZ25hdHVyZUluZm9ybWF0aW9uKiBpbmZvID0gZ2V0KHZtKTsKLSAgICBMb2NrSG9sZGVyIGxv
Y2soaW5mby0+bV9sb2NrKTsKKyAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmds
ZXRvbigpOworICAgIExvY2tIb2xkZXIgbG9jayhpbmZvLm1fbG9jayk7CiAKLSAgICBTaWduYXR1
cmVJbmRleCBuZXh0VmFsdWUgPSBpbmZvLT5tX3NpZ25hdHVyZXMuc2l6ZSgpOwotICAgIGF1dG8g
YWRkUmVzdWx0ID0gaW5mby0+bV9zaWduYXR1cmVNYXAuYWRkKFNpZ25hdHVyZUhhc2ggeyBzaWdu
YXR1cmUgfSwgbmV4dFZhbHVlKTsKKyAgICBTaWduYXR1cmVJbmRleCBuZXh0VmFsdWUgPSBpbmZv
Lm1fbmV4dEluZGV4OworICAgIGF1dG8gYWRkUmVzdWx0ID0gaW5mby5tX3NpZ25hdHVyZU1hcC5h
ZGQoU2lnbmF0dXJlSGFzaCB7IHNpZ25hdHVyZS5wdHIoKSB9LCBuZXh0VmFsdWUpOwogICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICArK2luZm8ubV9uZXh0SW5kZXg7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ubV9uZXh0SW5kZXggPiBuZXh0VmFsdWUpOyAvLyBj
cmFzaCBvbiBvdmVyZmxvdy4KICAgICAgICAgQVNTRVJUKG5leHRWYWx1ZSA9PSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKTsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nTG4oIkFkb3B0IG5ldyBzaWduYXR1cmUgIiwgKnNpZ25hdHVyZSwgIiB3aXRoIGluZGV4ICIs
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUsICIgaGFzaDogIiwgc2lnbmF0dXJlLT5oYXNoKCkp
OwotICAgICAgICBpbmZvLT5tX3NpZ25hdHVyZXMuYXBwZW5kKHNpZ25hdHVyZSk7Ci0gICAgICAg
IHJldHVybiBuZXh0VmFsdWU7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkFkb3B0IG5ldyBzaWdu
YXR1cmUgIiwgc2lnbmF0dXJlLmdldCgpLCAiIHdpdGggaW5kZXggIiwgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSwgIiBoYXNoOiAiLCBzaWduYXR1cmUtPmhhc2goKSk7CisKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBpbmZvLm1faW5kZXhNYXAuYWRkKG5leHRWYWx1ZSwgc2lnbmF0dXJlLmNv
cHlSZWYoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICAgICAgQVNTRVJUKGluZm8ubV9pbmRleE1hcC5zaXplKCkgPT0gaW5mby5tX3NpZ25hdHVy
ZU1hcC5zaXplKCkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobmV4dFZhbHVlLCBX
VEZNb3ZlKHNpZ25hdHVyZSkpOwogICAgIH0KICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZ0xuKCJFeGlzdGluZyBzaWduYXR1cmUgIiwgKnNpZ25hdHVyZSwgIiB3aXRoIGluZGV4ICIs
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUsICIgaGFzaDogIiwgc2lnbmF0dXJlLT5oYXNoKCkp
OwotICAgIFNpZ25hdHVyZTo6ZGVzdHJveShzaWduYXR1cmUpOworICAgICAgICBkYXRhTG9nTG4o
IkV4aXN0aW5nIHNpZ25hdHVyZSAiLCBzaWduYXR1cmUuZ2V0KCksICIgd2l0aCBpbmRleCAiLCBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLCAiIGhhc2g6ICIsIHNpZ25hdHVyZS0+aGFzaCgpKTsK
ICAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSAhPSBTaWduYXR1cmU6OmludmFs
aWRJbmRleCk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgQVNT
RVJUKGluZm8ubV9pbmRleE1hcC5jb250YWlucyhhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKSk7
CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIFJl
ZjxTaWduYXR1cmU+KCppbmZvLm1faW5kZXhNYXAuZ2V0KGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpKSk7CiB9CiAKLWNvbnN0IFNpZ25hdHVyZSogU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChW
TSogdm0sIFNpZ25hdHVyZUluZGV4IGluZGV4KQorY29uc3QgU2lnbmF0dXJlJiBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KFNpZ25hdHVyZUluZGV4IGluZGV4KQogewogICAgIEFTU0VSVChpbmRl
eCAhPSBTaWduYXR1cmU6OmludmFsaWRJbmRleCk7Ci0gICAgU2lnbmF0dXJlSW5mb3JtYXRpb24q
IGluZm8gPSBnZXQodm0pOwotICAgIExvY2tIb2xkZXIgbG9jayhpbmZvLT5tX2xvY2spOworICAg
IFNpZ25hdHVyZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7CisgICAgTG9ja0hvbGRl
ciBsb2NrKGluZm8ubV9sb2NrKTsKIAotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9n
TG4oIkdvdCBzaWduYXR1cmUgIiwgKmluZm8tPm1fc2lnbmF0dXJlcy5hdChpbmRleCksICIgYXQg
aW5kZXggIiwgaW5kZXgpOwotICAgIHJldHVybiBpbmZvLT5tX3NpZ25hdHVyZXMuYXQoaW5kZXgp
OworICAgIHJldHVybiAqaW5mby5tX2luZGV4TWFwLmdldChpbmRleCk7Cit9CisKK3ZvaWQgU2ln
bmF0dXJlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKQoreworICAgIFNpZ25hdHVyZUluZm9ybWF0
aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7CisgICAgTG9ja0hvbGRlciBsb2NrKGluZm8ubV9sb2Nr
KTsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U2lnbmF0dXJlSW5kZXgsIFNpZ25hdHVyZSo+PiB0
b1JlbW92ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBpbmZvLm1faW5kZXhNYXApIHsK
KyAgICAgICAgY29uc3QgUmVmPFNpZ25hdHVyZT4mIHNpZ25hdHVyZSA9IHBhaXIudmFsdWU7Cisg
ICAgICAgIGlmIChzaWduYXR1cmUtPnJlZkNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAgLy8g
V2UncmUgdGhlIG9ubHkgb3duZXIuCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIocGFpci5rZXksIHNpZ25hdHVyZS5wdHIoKSkpOworICAgICAgICB9CisgICAgfQor
ICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHRvUmVtb3ZlKSB7CisgICAgICAgIGJvb2wgcmVt
b3ZlZCA9IGluZm8ubV9zaWduYXR1cmVNYXAucmVtb3ZlKFNpZ25hdHVyZUhhc2ggeyBwYWlyLnNl
Y29uZCB9KTsKKyAgICAgICAgQVNTRVJUKHJlbW92ZWQpOworICAgICAgICByZW1vdmVkID0gaW5m
by5tX2luZGV4TWFwLnJlbW92ZShwYWlyLmZpcnN0KTsKKyAgICAgICAgQVNTRVJUKHJlbW92ZWQp
OworICAgIH0KKyAgICBpZiAoaW5mby5tX3NpZ25hdHVyZU1hcC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgQVNTRVJUKGluZm8ubV9pbmRleE1hcC5pc0VtcHR5KCkpOworICAgICAgICBpbmZvLm1fbmV4
dEluZGV4ID0gU2lnbmF0dXJlOjpmaXJzdFZhbGlkSW5kZXg7CisgICAgfQogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNpZ25hdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TaWduYXR1cmUuaAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNpZ25hdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
NDYsMTIgKzQ3LDEyIEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLXR5cGVkZWYg
dWludDMyX3QgU2lnbmF0dXJlQXJnQ291bnQ7Ci10eXBlZGVmIHVpbnQzMl90IFNpZ25hdHVyZUlu
ZGV4OwordXNpbmcgU2lnbmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKK3VzaW5nIFNpZ25hdHVy
ZUluZGV4ID0gdWludDMyX3Q7CiAKLWNsYXNzIFNpZ25hdHVyZSB7CitjbGFzcyBTaWduYXR1cmUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2lnbmF0dXJlPiB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBTaWduYXR1cmVBcmdD
b3VudCBzX3JldENvdW50ID0gMTsKLSAgICB0eXBlZGVmIHVpbnQ2NF90IGFsbG9jYXRpb25TaXpl
Um91bmRzVXBUbzsKIAogICAgIFNpZ25hdHVyZSgpID0gZGVsZXRlOwogICAgIFNpZ25hdHVyZShj
b25zdCBTaWduYXR1cmUmKSA9IGRlbGV0ZTsKQEAgLTY1LDkgKzY2LDkgQEAgY2xhc3MgU2lnbmF0
dXJlIHsKICAgICAgICAgcmV0dXJuIGkgKyByZWludGVycHJldF9jYXN0PFR5cGUqPihyZWludGVy
cHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHNpemVvZihTaWduYXR1cmUpKTsKICAgICB9CiAgICAg
VHlwZSogc3RvcmFnZShTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJldHVybiBjb25zdF9j
YXN0PFNpZ25hdHVyZSo+KHRoaXMpLT5zdG9yYWdlKGkpOyB9Ci0gICAgc3RhdGljIHVpbnQzMl90
IGFsbG9jYXRlZFNpemUoU2lnbmF0dXJlQXJnQ291bnQgYXJnQ291bnQpCisgICAgc3RhdGljIHNp
emVfdCBhbGxvY2F0ZWRTaXplKFNpZ25hdHVyZUFyZ0NvdW50IGFyZ0NvdW50KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoYWxsb2NhdGlvblNp
emVSb3VuZHNVcFRvKT4oc2l6ZW9mKFNpZ25hdHVyZSkgKyAoc19yZXRDb3VudCArIGFyZ0NvdW50
KSAqIHNpemVvZihUeXBlKSk7CisgICAgICAgIHJldHVybiBzaXplb2YoU2lnbmF0dXJlKSArIChz
X3JldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUpOwogICAgIH0KIAogcHVibGljOgpA
QCAtODYsMTkgKzg3LDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lnbmF0dXJlJiByaHMp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gYWxsb2NhdGVkU2l6ZShhcmd1bWVudENvdW50
KCkpID09IGFsbG9jYXRlZFNpemUocmhzLmFyZ3VtZW50Q291bnQoKSkgJiYgIW1lbWNtcCh0aGlz
LCAmcmhzLCBhbGxvY2F0ZWRTaXplKGFyZ3VtZW50Q291bnQoKSkpOworICAgICAgICBpZiAoYXJn
dW1lbnRDb3VudCgpICE9IHJocy5hcmd1bWVudENvdW50KCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChyZXR1cm5UeXBlKCkgIT0gcmhzLnJldHVyblR5cGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnQoaSkgIT0g
cmhzLmFyZ3VtZW50KGkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
OwogCi0gICAgc3RhdGljIFNpZ25hdHVyZSogY3JlYXRlKFNpZ25hdHVyZUFyZ0NvdW50KTsKLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KFNpZ25hdHVyZSopOworICAgIHN0YXRpYyBSZWZQdHI8U2ln
bmF0dXJlPiB0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQpOwogCiAgICAgLy8gU2lnbmF0dXJl
cyBhcmUgdW5pcXVlZCBhbmQsIGZvciBjYWxsX2luZGlyZWN0LCB2YWxpZGF0ZWQgYXQgcnVudGlt
ZS4gVGFibGVzIGNhbiBjcmVhdGUgaW52YWxpZCBTaWduYXR1cmVJbmRleCB2YWx1ZXMgd2hpY2gg
Y2F1c2UgY2FsbF9pbmRpcmVjdCB0byBmYWlsLiBXZSB1c2UgMCBhcyB0aGUgaW52YWxpZEluZGV4
IHNvIHRoYXQgdGhlIGNvZGVnZW4gY2FuIGVhc2lseSB0ZXN0IGZvciBpdCBhbmQgdHJhcCwgYW5k
IHdlIGFkZCBhIHRva2VuIGludmFsaWQgZW50cnkgaW4gU2lnbmF0dXJlSW5mb3JtYXRpb24uCiAg
ICAgc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBTaWduYXR1cmVJbmRleCBpbnZhbGlkSW5kZXggPSAw
OworICAgIHN0YXRpYyBjb25zdCBjb25zdGV4cHIgU2lnbmF0dXJlSW5kZXggZmlyc3RWYWxpZElu
ZGV4ID0gaW52YWxpZEluZGV4ICsgMTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2ln
bmF0dXJlSW5mb3JtYXRpb247Ci0gICAgc3RhdGljIFNpZ25hdHVyZSogY3JlYXRlSW52YWxpZCgp
OwogICAgIFNpZ25hdHVyZUFyZ0NvdW50IG1fYXJnQ291bnQ7CiAgICAgLy8gUmV0dXJuIFR5cGUg
YW5kIGFyZ3VtZW50cyBhcmUgc3RvcmVkIGhlcmUuCiB9OwpAQCAtMTUxLDE3ICsxNTksMjIgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIC8vIFNpZ25hdHVyZSBpbmZvcm1hdGlv
biBpcyBoZWxkIGdsb2JhbGx5IG9uIFZNIHRvIGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVu
aXF1ZS4gVGhpcyBpcyByZXF1aXJlZCB3aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGluc3Rh
bmNlLgogLy8gTm90ZTogc2lnbmF0dXJlcyBhcmUgbmV2ZXIgcmVtb3ZlZCBmcm9tIFZNIGJlY2F1
c2UgdGhhdCB3b3VsZCByZXF1aXJlIGFjY291bnRpbmcgZm9yIGFsbCBXZWJBc3NlbWJseS5Nb2R1
bGUgYW5kIHdoaWNoIHNpZ25hdHVyZXMgdGhleSB1c2UuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBz
aWduYXR1cmVzIGlzIGJvdW5kZWQsIGFuZCBpc24ndCB3b3J0aCB0aGUgY291bnRpbmcgb3Zlcmhl
YWQuIFdlIGNvdWxkIGNsZWFyIGV2ZXJ5dGhpbmcgd2hlbiB3ZSByZWFjaCB6ZXJvIG91dHN0YW5k
aW5nIFdlYkFzc2VtYmx5Lk1vZHVsZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjAzNwogY2xhc3MgU2lnbmF0dXJlSW5mb3JtYXRpb24gewotICAgIEhhc2hNYXA8
V2FzbTo6U2lnbmF0dXJlSGFzaCwgV2FzbTo6U2lnbmF0dXJlSW5kZXg+IG1fc2lnbmF0dXJlTWFw
OwotICAgIFZlY3RvcjxTaWduYXR1cmUqPiBtX3NpZ25hdHVyZXM7Ci0gICAgTG9jayBtX2xvY2s7
Ci0gICAgc3RhdGljIFNpZ25hdHVyZUluZm9ybWF0aW9uKiBnZXQoVk0qKTsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTaWduYXR1cmVJbmZvcm1hdGlvbik7CisKICAgICBTaWduYXR1cmVJbmZv
cm1hdGlvbigpOwotICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uKGNvbnN0IFNpZ25hdHVyZUluZm9y
bWF0aW9uJikgPSBkZWxldGU7CiAKIHB1YmxpYzoKLSAgICB+U2lnbmF0dXJlSW5mb3JtYXRpb24o
KTsKLSAgICBzdGF0aWMgU2lnbmF0dXJlSW5kZXggV0FSTl9VTlVTRURfUkVUVVJOIGFkb3B0KFZN
KiwgU2lnbmF0dXJlKik7Ci0gICAgc3RhdGljIGNvbnN0IFNpZ25hdHVyZSogV0FSTl9VTlVTRURf
UkVUVVJOIGdldChWTSosIFNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0aWMgU2lnbmF0dXJlSW5m
b3JtYXRpb24mIHNpbmdsZXRvbigpOworCisgICAgc3RhdGljIHN0ZDo6cGFpcjxTaWduYXR1cmVJ
bmRleCwgUmVmPFNpZ25hdHVyZT4+IFdBUk5fVU5VU0VEX1JFVFVSTiBhZG9wdChSZWY8U2lnbmF0
dXJlPiYmKTsKKyAgICBzdGF0aWMgY29uc3QgU2lnbmF0dXJlJiBXQVJOX1VOVVNFRF9SRVRVUk4g
Z2V0KFNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0aWMgdm9pZCB0cnlDbGVhbnVwKCk7CisKK3By
aXZhdGU6CisgICAgSGFzaE1hcDxXYXNtOjpTaWduYXR1cmVIYXNoLCBXYXNtOjpTaWduYXR1cmVJ
bmRleD4gbV9zaWduYXR1cmVNYXA7CisgICAgSGFzaE1hcDxXYXNtOjpTaWduYXR1cmVJbmRleCwg
UmVmPFNpZ25hdHVyZT4+IG1faW5kZXhNYXA7CisgICAgU2lnbmF0dXJlSW5kZXggbV9uZXh0SW5k
ZXggeyBTaWduYXR1cmU6OmZpcnN0VmFsaWRJbmRleCB9OworICAgIExvY2sgbV9sb2NrOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NyArOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAg
ICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUqKTsKKyAgICBSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHBy
ZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlIHR5cGUsIHVpbnQ2NF90KSB7IHJldHVybiB0eXBl
OyB9CiAKQEAgLTEzOCw4ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQ2FsbHMK
LSAgICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwotICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSosIFNpZ25hdHVyZUluZGV4LCBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAg
ICBSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpOworICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYsIFNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAg
IGJvb2wgaGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtX21vZHVsZS5tZW1vcnk7IH0KIApA
QCAtMTYwLDEwICsxNjAsMTAgQEAgcHJpdmF0ZToKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgbV9tb2R1bGU7CiB9OwogCi1hdXRvIFZhbGlkYXRlOjphZGRBcmd1bWVudHMoY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUpIC0+IFJlc3VsdAorYXV0byBWYWxpZGF0ZTo6YWRkQXJndW1lbnRz
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBSZXN1bHQKIHsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMoYWRkTG9jYWwoc2lnbmF0dXJlLT5hcmd1bWVudChpKSwg
MSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsgKytpKQorICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKGFkZExvY2FsKHNpZ25h
dHVyZS5hcmd1bWVudChpKSwgMSkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTMyNCwzMCAr
MzI0LDMwIEBAIGF1dG8gVmFsaWRhdGU6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHIKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIFZhbGlkYXRlOjphZGRDYWxsKHVuc2lnbmVkLCBjb25zdCBT
aWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlkYXRlOjphZGRDYWxs
KHVuc2lnbmVkLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CiB7Ci0g
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSAhPSBh
cmdzLnNpemUoKSwgImFyaXR5IG1pc21hdGNoIGluIGNhbGwsIGdvdCAiLCBhcmdzLnNpemUoKSwg
IiBhcmd1bWVudHMsIGV4cGVjdGVkICIsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKKyAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgIT0gYXJn
cy5zaXplKCksICJhcml0eSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJncy5zaXplKCksICIg
YXJndW1lbnRzLCBleHBlY3RlZCAiLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLT5hcmd1bWVudChpKSwgImFy
Z3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIsIGFyZ3NbaV0sICIsIGV4cGVjdGVk
ICIsIHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKGFyZ3NbaV0gIT0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCAiYXJndW1lbnQgdHlwZSBtaXNt
YXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnc1tpXSwgIiwgZXhwZWN0ZWQgIiwgc2lnbmF0dXJlLmFy
Z3VtZW50KGkpKTsKIAotICAgIHJlc3VsdCA9IHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpOworICAg
IHJlc3VsdCA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
YXV0byBWYWxpZGF0ZTo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJl
LCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUmVzdWx0CithdXRvIFZhbGlk
YXRlOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBSZXN1bHQKIHsKICAgICBVTlVTRURfUEFSQU0o
c2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVChzaWduYXR1cmVJbmRleCAhPSBTaWduYXR1cmU6
OmludmFsaWRJbmRleCk7Ci0gICAgY29uc3QgYXV0byBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCk7CisgICAgY29uc3QgYXV0byBhcmd1bWVudENvdW50ID0gc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsKICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3VtZW50
Q291bnQgIT0gYXJncy5zaXplKCkgLSAxLCAiYXJpdHkgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVj
dCwgZ290ICIsIGFyZ3Muc2l6ZSgpIC0gMSwgIiBhcmd1bWVudHMsIGV4cGVjdGVkICIsIGFyZ3Vt
ZW50Q291bnQpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7
ICsraSkKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmdzW2ldICE9IHNpZ25hdHVy
ZS0+YXJndW1lbnQoaSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3Qs
IGdvdCAiLCBhcmdzW2ldLCAiLCBleHBlY3RlZCAiLCBzaWduYXR1cmUtPmFyZ3VtZW50KGkpKTsK
KyAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmdzW2ldICE9IHNpZ25hdHVyZS5hcmd1
bWVudChpKSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIs
IGFyZ3NbaV0sICIsIGV4cGVjdGVkICIsIHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CiAKICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZ3MubGFzdCgpICE9IEkzMiwgIm5vbi1pMzIgY2FsbF9p
bmRpcmVjdCBpbmRleCAiLCBhcmdzLmxhc3QoKSk7CiAKLSAgICByZXN1bHQgPSBzaWduYXR1cmUt
PnJldHVyblR5cGUoKTsKKyAgICByZXN1bHQgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwogICAg
IHJldHVybiB7IH07CiB9CiAKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIFZhbGlkYXRlOjpkdW1w
KGNvbnN0IFZlY3RvcjxDb250cm9sCiAgICAgZGF0YUxvZ0xuKCk7CiB9CiAKLUV4cGVjdGVkPHZv
aWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlvbihWTSogdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBtb2R1bGUsIGNvbnN0IFZlY3RvcjxTaWduYXR1cmVJbmRleD4mIG1vZHVs
ZVNpZ25hdHVyZUluZGljZXNUb1VuaXF1ZWRTaWduYXR1cmVJbmRpY2VzKQorRXhwZWN0ZWQ8dm9p
ZCwgU3RyaW5nPiB2YWxpZGF0ZUZ1bmN0aW9uKFZNKiB2bSwgY29uc3QgdWludDhfdCogc291cmNl
LCBzaXplX3QgbGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIG1vZHVsZSwgY29uc3QgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiYgbW9kdWxl
U2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpCiB7CiAgICAgVmFsaWRh
dGUgY29udGV4dChtb2R1bGUpOwogICAgIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0
b3Iodm0sIGNvbnRleHQsIHNvdXJjZSwgbGVuZ3RoLCBzaWduYXR1cmUsIG1vZHVsZSwgbW9kdWxl
U2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVyZUluZGljZXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgJKHJldmlzaW9uIDIxNDY3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLUV4cGVj
dGVkPHZvaWQsIFN0cmluZz4gdmFsaWRhdGVGdW5jdGlvbihWTSosIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgY29uc3Qg
VmVjdG9yPFNpZ25hdHVyZUluZGV4PiYpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiB2YWxpZGF0
ZUZ1bmN0aW9uKFZNKiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+Jik7
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCShyZXZpc2lv
biAyMTQ2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIHZvaWQgSlNXZWJB
c3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24KIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseU1v
ZHVsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5TW9kdWxlOjp+SlNXZWJBc3NlbWJseU1vZHVsZSgp
OworICAgIFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7CiB9CiAKIHZv
aWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6c2V0Q29kZUJsb2NrKFZNJiB2bSwgV2FzbTo6TWVtb3J5
TW9kZSBtb2RlLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2spCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDIyICs1NywyMiBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgaWYgKCF3YXNt
RnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQgYSBXZWJBc3NlbWJs
eSBmdW5jdGlvbiIsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShl
eGVjLT5qc0NhbGxlZSgpKSkpKTsKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICBjb25zdCBXYXNtOjpT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJnZt
LCBzaWduYXR1cmVJbmRleCk7CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUg
PSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKIAogICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1
biB3aXRoIG1hdGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCiAgICAgQVNTRVJUKHdhc21GdW5jdGlv
bi0+aW5zdGFuY2UoKS0+Y29kZUJsb2NrKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKS0+bWVtb3J5KCkpKTsKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUg
YSBkaXNhbGxvd2VkIEk2NCB1c2UuCiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9
IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsK
LSAgICAgICAgICAgIGlmIChzaWduYXR1cmUtPmFyZ3VtZW50KGFyZ0luZGV4KSA9PSBXYXNtOjpJ
NjQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdJbmRleCkgeworICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZS5hcmd1bWVudChhcmdJbmRleCkgPT0gV2FzbTo6STY0KSB7CiAgICAgICAgICAgICAg
ICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwKICAgICAgICAgICAgICAgICAgICAgIldl
YkFzc2VtYmx5IGZ1bmN0aW9uIHdpdGggYW4gaTY0IGFyZ3VtZW50IGNhbid0IGJlIGNhbGxlZCBm
cm9tIEphdmFTY3JpcHQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IFdhc206Okk2
NCkgeworICAgICAgICBpZiAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSA9PSBXYXNtOjpJNjQpIHsK
ICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IqIGVycm9yID0gSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksCiAgICAgICAgICAgICAg
ICAgIldlYkFzc2VtYmx5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpNjQgY2FuJ3QgYmUgY2FsbGVk
IGZyb20gSmF2YVNjcmlwdCIpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXJyb3IpKTsKQEAgLTg4LDkgKzg4LDkgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIGlmICghV2FzbTo6dXNl
RmFzdFRMU0ZvckNvbnRleHQoKSkKICAgICAgICAgYm94ZWRBcmdzLmFwcGVuZCh3YXNtQ29udGV4
dCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBzaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKTsgKythcmdJbmRleCkgeworICAgIGZvciAodW5zaWduZWQgYXJn
SW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5k
ZXgpIHsKICAgICAgICAgSlNWYWx1ZSBhcmcgPSBleGVjLT5hcmd1bWVudChhcmdJbmRleCk7Ci0g
ICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5hcmd1bWVudChhcmdJbmRleCkpIHsKKyAgICAgICAg
c3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpKSB7CiAgICAgICAgIGNhc2UgV2Fz
bTo6STMyOgogICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGFyZy50b0ludDMyKGV4
ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBXYXNtOjpzdG9yZUNvbnRleHQodm0s
IHByZXZXYXNtQ29udGV4dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAotICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkpIHsKKyAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKCkpIHsKICAgICBjYXNlIFdhc206OlZvaWQ6CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgY2FzZSBXYXNtOjpJMzI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTQ2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBtX3dhc21FbnRyeVBvaW50Q29kZTsgLy8gQ2FjaGUg
Y29kZSBwb2ludGVyOiBhbGxvd3MgdGhlIHdhc20gLT4gd2FzbSBzdHViIHRvIGRvIGEgc2luZ2xl
IGxvYWQgYW5kIGp1bXAgaW5zdGVhZCBvZiBoYXZpbmcgZGVwZW5kZW50IGxvYWRzLgogICAgIFdy
aXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX2pzRW50cnlwb2ludDsKICAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4gbV93YXNtRW50cnlwb2ludDsKKyAgICAvLyBJ
dCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgc2lnbmF0dXJlSW5kZXggYmVjYXVzZSB3ZSBo
YXZlIGEgcmVmZXJlbmNlCisgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8g
dGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAorICAgIC8vIGVuc3VyZXMgdGhhdCB0
aGUgYWN0dWFsIFNpZ25hdHVyZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBtX3NpZ25hdHVyZUluZGV4OwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjE0Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsOCArMTI4
LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9j
ay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4
KTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZXhwLmtpbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0
dXJlKiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KCZ2bSwgc2ln
bmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQsIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRD
YWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBleHAuZmllbGQsIGluc3Rh
bmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODgsMTcgKzE4OCwxNyBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgaWYgKGhhc1N0YXJ0KSB7CiAg
ICAgICAgIGF1dG8gc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1bGVJbmZvcm1hdGlvbi5z
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZS52YWx1ZV9vcigwKTsKICAgICAgICAgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgIGNvbnN0IFdh
c206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKICAgICAgICAgLy8gVGhlIHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90IHRha2UgYW55IGFyZ3Vt
ZW50cyBvciByZXR1cm4gYW55dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIHBhcnNlci4K
LSAgICAgICAgQVNTRVJUKCFzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgICAgIEFT
U0VSVChzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBXYXNtOjpWb2lkKTsKKyAgICAgICAgQVNT
RVJUKCFzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICAgICAgQVNTRVJUKHNpZ25hdHVy
ZS5yZXR1cm5UeXBlKCkgPT0gV2FzbTo6Vm9pZCk7CiAgICAgICAgIGlmIChzdGFydEZ1bmN0aW9u
SW5kZXhTcGFjZSA8IGNvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7CiAgICAgICAg
ICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlvbiA9IGluc3RhbmNlLT5pbXBvcnRGdW5jdGlvbihz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24uc2V0
KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+anNF
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSk7CiAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5jZSwganNF
bnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwor
ICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgInN0YXJ0IiwgaW5zdGFuY2UsIGpzRW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRD
YWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQo
dm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3MiwxMyArMjcyLDEz
IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKIAogICAgICAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9j
ay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4
KTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENh
bGxlZSA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVy
ZSogc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJm
b28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAgICAgLy8gV2hhdCBpZiB3ZSBh
bHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVudCB3LyBpbmRleCAwLgogICAgICAgICAg
ICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5leHBvcnRzLmZvbyA9PT0gdGFibGUu
Z2V0KDApPwogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAg
ICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSwgU3RyaW5nKCksIG1faW5zdGFuY2UuZ2V0KCksIGpzRW50cnlwb2ludENhbGxlZSwgd2Fz
bUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
dm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwganNFbnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50
cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgdGFibGUt
PnNldEZ1bmN0aW9uKHZtLCB0YWJsZUluZGV4LCBmdW5jdGlvbik7CiAgICAgICAgICAgICAgICAg
Kyt0YWJsZUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjE0
Njc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4ICs2NCw4IEBAIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVcKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFz
Q29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgc2lnbmF0dXJlSW5kZXgsIGNvZGVCbG9jay0+d2FzbVRvSnNDYWxsU3R1YkZvckltcG9y
dChpbXBvcnRJbmRleCkpOwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0g
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmdm0sIHNpZ25hdHVyZUluZGV4KTsKLSAg
ICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUtPmFyZ3Vt
ZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGNvZGVCbG9jayk7CisgICAgY29uc3QgV2FzbTo6
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNp
Z25hdHVyZUluZGV4KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxl
LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgY29kZUJsb2NrKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlz
aW9uIDIxNDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDkgQEAgcHJpdmF0
ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7
CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwogICAgIHZvaWQqIG1fd2Fz
bUVudHJ5cG9pbnRDb2RlOworICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBz
aWduYXR1cmVJbmRleCBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKKyAgICAvLyB0byBvdXIg
Q29kZUJsb2NrLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3
aGljaAorICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZSBkb2Vzbid0IGdl
dCBkZWFsbG9jYXRlZC4KICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBtX3NpZ25hdHVyZUluZGV4
OwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>