<?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>163903</bug_id>
          
          <creation_ts>2016-10-24 11:12:19 -0700</creation_ts>
          <short_desc>WebAssembly JS API: implement Module</short_desc>
          <delta_ts>2016-10-28 02:24:23 -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>
          
          <blocked>161709</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1243793</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-24 11:12:19 -0700</bug_when>
    <thetext>As described in https://github.com/WebAssembly/design/blob/master/JS.md#webassemblymodule-constructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244002</commentid>
    <comment_count>1</comment_count>
      <attachid>292688</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-24 18:00:08 -0700</bug_when>
    <thetext>Created attachment 292688
patch

Implement WebAssembly.Module</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244198</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-25 08:15:01 -0700</bug_when>
    <thetext>Looks like you made the bots angry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244204</commentid>
    <comment_count>3</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-25 08:36:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Looks like you made the bots angry.

That&apos;s super weird... I built and ran testWASM locally just fine, and did a regex replace that should have caught this. I&apos;ll fix when I&apos;m in later, should be easy, I think the rest of the patch is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244211</commentid>
    <comment_count>4</comment_count>
      <attachid>292688</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-25 08:44:21 -0700</bug_when>
    <thetext>Comment on attachment 292688
patch

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

r=me with some comments.

&gt; JSTests/ChangeLog:21
&gt; +         - Beef up the testing infrastructure under JSTests/wasm so that more complex
&gt; +           modules can be created and tested (instead of writing the bits by hand).

+1!

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:50
&gt; +        m_errorMessage = &quot;Modules doens&apos;t start with &apos;\\0asm&apos;&quot;;

typo: doesn&apos;t

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.h:81
&gt; +    bool m_failed = true;
&gt; +    String m_errorMessage;

Why have both m_failed and m_errorMessage? It seems like failed() could just return !!m_errorMessage.

Also, I think the new hotness in WebKit is to do:
bool m_failed { true };

&gt; Source/JavaScriptCore/wasm/WasmPlan.h:71
&gt; +    bool m_failed = true;
&gt; +    String m_errorMessage;

ditto.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:56
&gt; +    JSValue val = state-&gt;argumentCount() ? state-&gt;argument(0) : jsUndefined();

You don&apos;t need to check the argument count here. if you try to get an argument past the real argument count arguement(i) returns jsUndefined().

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:59
&gt; +    JSArrayBuffer* arrayBuffer = obj ? jsDynamicCast&lt;JSArrayBuffer*&gt;(obj) : nullptr;
&gt; +    JSArrayBufferView* arrayBufferView = obj ? jsDynamicCast&lt;JSArrayBufferView*&gt;(obj) : nullptr;

You can just use val and delete obj.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:64
&gt; +    bool isNeutered = arrayBufferView ? arrayBufferView-&gt;isNeutered() : arrayBuffer-&gt;impl()-&gt;isNeutered();
&gt; +    if (isNeutered)

Why store this in a local? You don&apos;t reuse it the fact you are checking if the buffer is neutered is pretty clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244213</commentid>
    <comment_count>5</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-25 08:45:59 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Looks like you made the bots angry.
&gt; 
&gt; That&apos;s super weird... I built and ran testWASM locally just fine, and did a
&gt; regex replace that should have caught this. I&apos;ll fix when I&apos;m in later,
&gt; should be easy, I think the rest of the patch is fine.

It&apos;s probably an auto-merge with my floating points patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244225</commentid>
    <comment_count>6</comment_count>
      <attachid>292761</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-25 09:16:55 -0700</bug_when>
    <thetext>Created attachment 292761
patch

Comments addressed. Let me know if you want me to do a follow-up (see below).


&gt; &gt; Source/JavaScriptCore/wasm/WasmModuleParser.h:81
&gt; &gt; +    bool m_failed = true;
&gt; &gt; +    String m_errorMessage;
&gt; 
&gt; Why have both m_failed and m_errorMessage? It seems like failed() could just
&gt; return !!m_errorMessage.

Ideally we&apos;d have something like LLVM&apos;s ErrorOr (contains an error+message or a value), but I figure the way I&apos;ve set it up makes it ~impossible to mess up: by default things fail until the end of the parse function is reached. If you forget to set the message it asserts out, if you try to use the content while there&apos;s an error it asserts out.

I didn&apos;t find something like ErrorOr in WTF, maybe I can add one? It&apos;s almost like std::variant but more explicit.


&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:56
&gt; &gt; +    JSValue val = state-&gt;argumentCount() ? state-&gt;argument(0) : jsUndefined();
&gt;
&gt; You don&apos;t need to check the argument count here. if you try to get an
&gt; argument past the real argument count arguement(i) returns jsUndefined().

Ah OK, I&apos;d cargo-culted from another part of the code, and then re-cargo&apos;d from CompileError. I fixed CompileError, I can fix the source separately.

 
&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:59
&gt; &gt; +    JSArrayBuffer* arrayBuffer = obj ? jsDynamicCast&lt;JSArrayBuffer*&gt;(obj) : nullptr;
&gt; &gt; +    JSArrayBufferView* arrayBufferView = obj ? jsDynamicCast&lt;JSArrayBufferView*&gt;(obj) : nullptr;
&gt; 
&gt; You can just use val and delete obj.

Done, I wasn&apos;t sure if everything gets CSE&apos;d but it looks simple enough that it should.


&gt; &gt; &gt; Looks like you made the bots angry.
&gt; &gt; 
&gt; &gt; That&apos;s super weird... I built and ran testWASM locally just fine, and did a
&gt; &gt; regex replace that should have caught this. I&apos;ll fix when I&apos;m in later,
&gt; &gt; should be easy, I think the rest of the patch is fine.
&gt; 
&gt; It&apos;s probably an auto-merge with my floating points patch.

Oh yeah you&apos;re right, I rebuilt other tests but not that one after my merge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244226</commentid>
    <comment_count>7</comment_count>
      <attachid>292761</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-25 09:17:46 -0700</bug_when>
    <thetext>Comment on attachment 292761
patch

Rejecting attachment 292761 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 292761, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in JSTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/2368387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244227</commentid>
    <comment_count>8</comment_count>
      <attachid>292762</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-25 09:21:12 -0700</bug_when>
    <thetext>Created attachment 292762
patch

Oops, I always forget about that OOPS in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244265</commentid>
    <comment_count>9</comment_count>
      <attachid>292762</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-25 10:26:43 -0700</bug_when>
    <thetext>Comment on attachment 292762
patch

Clearing flags on attachment: 292762

Committed r207825: &lt;http://trac.webkit.org/changeset/207825&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244266</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-25 10:26:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244326</commentid>
    <comment_count>11</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-25 12:01:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created attachment 292761 [details]
&gt; patch
&gt; 
&gt; Comments addressed. Let me know if you want me to do a follow-up (see below).
&gt; 
&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmModuleParser.h:81
&gt; &gt; &gt; +    bool m_failed = true;
&gt; &gt; &gt; +    String m_errorMessage;
&gt; &gt; 
&gt; &gt; Why have both m_failed and m_errorMessage? It seems like failed() could just
&gt; &gt; return !!m_errorMessage.
&gt; 
&gt; Ideally we&apos;d have something like LLVM&apos;s ErrorOr (contains an error+message
&gt; or a value), but I figure the way I&apos;ve set it up makes it ~impossible to
&gt; mess up: by default things fail until the end of the parse function is
&gt; reached. If you forget to set the message it asserts out, if you try to use
&gt; the content while there&apos;s an error it asserts out.
&gt; 
&gt; I didn&apos;t find something like ErrorOr in WTF, maybe I can add one? It&apos;s
&gt; almost like std::variant but more explicit.
&gt; 

The current paradigm for this is to return a WARN_UNUSED_RETURN boolean and take the result by reference. With the current system you basically have to intentionally write code incorrectly. It also eliminates the need for an m_failed bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244333</commentid>
    <comment_count>12</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-25 12:09:47 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #6)
&gt; &gt; Created attachment 292761 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; Comments addressed. Let me know if you want me to do a follow-up (see below).
&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmModuleParser.h:81
&gt; &gt; &gt; &gt; +    bool m_failed = true;
&gt; &gt; &gt; &gt; +    String m_errorMessage;
&gt; &gt; &gt; 
&gt; &gt; &gt; Why have both m_failed and m_errorMessage? It seems like failed() could just
&gt; &gt; &gt; return !!m_errorMessage.
&gt; &gt; 
&gt; &gt; Ideally we&apos;d have something like LLVM&apos;s ErrorOr (contains an error+message
&gt; &gt; or a value), but I figure the way I&apos;ve set it up makes it ~impossible to
&gt; &gt; mess up: by default things fail until the end of the parse function is
&gt; &gt; reached. If you forget to set the message it asserts out, if you try to use
&gt; &gt; the content while there&apos;s an error it asserts out.
&gt; &gt; 
&gt; &gt; I didn&apos;t find something like ErrorOr in WTF, maybe I can add one? It&apos;s
&gt; &gt; almost like std::variant but more explicit.
&gt; &gt; 
&gt; 
&gt; The current paradigm for this is to return a WARN_UNUSED_RETURN boolean and
&gt; take the result by reference. With the current system you basically have to
&gt; intentionally write code incorrectly. It also eliminates the need for an
&gt; m_failed bit.

IIUC that&apos;s not sufficient for what I want to achieve:
 1. The parse result either contains an error or parsed content.
 2. The parser *must* set the error message on all error paths.
 3. The consumer *cannot* obtain content if an error was generated.

Starting with `m_failed = true`, setting it only at the very end of the function, and JS error construction asserting that messages are non-empty ensure 2.

Private content + failed/message enforce asserts which guarantee 3.

The problem with 1. is that with just m_errorMessage the default is &quot;no error&quot;. You can&apos;t brainlessly make sure that you&apos;ve actually set the error state on all paths. We could initialize it to a placeholder &quot;there&apos;s an error but I don&apos;t know what&quot;, but that&apos;s pretty ugly!

IMO something like ErrorOr is even better than what I&apos;ve cobbled together. I&apos;ll implement something like that for WTF when we&apos;re further with WebAssembly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245500</commentid>
    <comment_count>13</comment_count>
      <attachid>292762</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-28 02:24:23 -0700</bug_when>
    <thetext>Comment on attachment 292762
patch

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

Patch LGTM too

&gt; JSTests/wasm/assert.js:59
&gt; +const _instanceof = (obj, type) =&gt; obj instanceof type;

Do we really need a helper function for this? I think the actual language expression is easier to read than a function call.

&gt; JSTests/wasm/assert.js:61
&gt; +// Use underscore names to avoid clashing with builtin names.

Why would this be needed for anything but instanceof?

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:75
&gt; +        dataLogLn(&quot;Parsing function starting at: &quot;, (uintptr_t)functionStart, &quot; of length: &quot;, functionLength);

Style: should be static_cast

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:46
&gt; +        m_errorMessage = &quot;Module is &quot; + String::number(length()) + &quot; bytes, expected at least &quot; + String::number(minSize) + &quot; bytes&quot;;

I think the general rule is to use StringBuilder for code like this. At least others have recommended this to me. Also, the constant strings could be ASCIILiterals

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:58
&gt; +        m_errorMessage = &quot;couldn&apos;t parse version number&quot;;

Should be ASCIILiteral

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:64
&gt; +        m_errorMessage = &quot;unexpected version number&quot;;

Ditto

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:80
&gt; +            m_errorMessage = &quot;couldn&apos;t get section byte&quot;;

Ditto (and to others below)

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:194
&gt;      // TODO

Should be FIXME

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleConstructor.cpp:67
&gt; +    const auto* base = arrayBufferView ? static_cast&lt;uint8_t*&gt;(arrayBufferView-&gt;vector()) : static_cast&lt;uint8_t*&gt;(arrayBuffer-&gt;impl()-&gt;data());

Style: I&apos;m not a big fan of auto here</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292688</attachid>
            <date>2016-10-24 18:00:08 -0700</date>
            <delta_ts>2016-10-25 09:16:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-Module.patch</filename>
            <type>text/plain</type>
            <size>96668</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyOTIzYWMwNWYwMGMwMTFlYjY5MjkzODJhNGU3ZjQyZTdkYjI4NTdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDI0IE9jdCAyMDE2IDExOjEwOjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgTW9kdWxlCgpUaGlzIGltcGxlbWVudGF0aW9uIGFsbG93
cyB1cyB0bzoKIC0gU3luY3Job25vdXNseSBjcmVhdGUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgd2l0
aCBhIHR5cGVkIGFycmF5LgogLSBDcmVhdGVzIGEgY29tcGlsYXRpb24gcGxhbi4KIC0gUGFyc2Ug
dGhlIE1vZHVsZSBhbmQgY3JlYXRlcyBjb3JyZXNwb25kaW5nIGNvZGUuCiAtIFRocm93IFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciB3aXRoIG1pbGRseSBoZWxwZnVsIFsqXSBlcnJvciBtZXNzYWdl
cyBvbgogICBmYWlsdXJlLgoKQ29uc3VsdCB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGV4cGVj
dGVkIGJlaGF2aW9yOiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2Iv
bWFzdGVyL0pTLm1kI3dlYmFzc2VtYmx5bW9kdWxlLWNvbnN0cnVjdG9yCgpGb3Igbm93IHRoZSBp
bXBsZW1lbnRhdGlvbiBkaXNjYXJkcyB0aGUgZ2VuZXJhdGVkIGNvZGUuCgpUaGUgbmV4dCBzdGVw
cyB3aWxsIGJlOgogLSBFeHBvc2UgYSBNb2R1bGUncyBleHBvcnRzLgogLSBJbXBsZW1lbnQgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UsIHdoaWNoIGFsbG93cyBpbnN0YW50aWF0aW5nIGFuZCBydW5uaW5n
IGEKICAgY29tcGlsZWQgTW9kdWxlLgogLSBCZWVmIHVwIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0
dXJlIHVuZGVyIEpTVGVzdHMvd2FzbSBzbyB0aGF0IG1vcmUgY29tcGxleAogICBtb2R1bGVzIGNh
biBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgKGluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYml0cyBieSBo
YW5kKS4KClRoaXMgcGF0Y2ggYWxzbzoKIC0gQWRkcyBhc3NlcnQuaW5zdGFuY2VvZiBpbiBhc3Nl
cnQuanMuCiAtIFJlZmFjdG9ycyBXYXNtOjpQYXJzZXIgYW5kIGZyaWVuZHMgdG8gYWNjZXB0IGNv
bnN0IHVpbnQ4X3QqIGFzIHdlbGwgYXMgYQogICBWZWN0b3IsIHRvIGF2b2lkIGNvcHlpbmcgd2hl
biBpbnZva2VkIHN5bmNocm9ub3VzbHkuCiAtIFJlbW92ZSB1c2VsZXNzIFN0cnVjdHVyZSBmcm9t
IHNvbWUgb2YgdGhlIHdhc20gY29uc3RydWN0b3JzOiB0aGV5J3JlIGFscmVhZHkKICAgb24gdGhl
IEpTR2xvYmFsT2JqZWN0LCB2aXNpdGVkIHByb3Blcmx5IGFuZCBhbGwuCiAtIEZpeCBvZmYtYnkt
b25lIGVycm9yIGluIHBhcnNpbmc6IFBhcnNlcjo6cGFyc2VVSW50MzIgZmFpbGVkIGlmIHRoZSBp
bnRlZ2VyCiAgIHdhcyBleGFjdGx5IGF0IGVuZCBvZiBmaWxlLgoKIFsqXSBPbiBlcnJvciBtZXNz
YWdlcyB3aGlsZSBwYXJzaW5nOiBJIGZpbGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM5MTkKLS0tCiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICA0NyArKysrCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAyNiArLQogSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X2Jhc2ljX2FwaS5qcyAgICAgICAgICAgICAgfCAgNDggKysrLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAxMTEgKysrKysrKysrCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcCB8ICAgMiArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oICAgfCAgIDIgKwog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwICAgfCAgIDIg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgICAgICAgICAgICAgICAgIHwg
Mjc0ICsrKysrKysrKystLS0tLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwICAgfCAgIDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmggICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaCAgICB8ICAxNiArLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgICAgfCAgNzQgKysrKy0tCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggICAgICB8ICAyNiArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oICAgICAgICAgICAgfCAgMzkgKy0tCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAyNiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAg
MzQgKystCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAgICAgICAg
ICB8ICAgOCArCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggICAgICAg
ICAgICB8ICAgMiArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVj
dG9yLmNwcCB8ICAgNiArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25z
dHJ1Y3Rvci5oICAgfCAgIDQgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25z
dHJ1Y3Rvci5jcHAgICAgIHwgICA4ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuaCAgICAgICB8ICAgOCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuaCAgICAgICAgIHwgICA4ICstCiAuLi4vd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICA0MSArKy0KIC4uLi93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaCAgICAgICAgIHwgICA4ICstCiAuLi4vd2FzbS9q
cy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcCB8ICAgNiArLQogLi4uL3dh
c20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5oICAgfCAgIDQgKy0KIC4u
Li93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAgICAgICAgIHwgICA4ICst
CiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCAgICAgICAgICB8ICAg
OCArLQogMzAgZmlsZXMgY2hhbmdlZCwgNTg1IGluc2VydGlvbnMoKyksIDI3NyBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGFkNjAwMzEuLjBiNzEyMTIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTYtMTAtMjQgIEpGIEJhc3Rp
ZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTog
aW1wbGVtZW50IE1vZHVsZQorCisgICAgICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzIHVz
IHRvOgorICAgICAgICAgLSBTeW5jcmhvbm91c2x5IGNyZWF0ZSBhIFdlYkFzc2VtYmx5Lk1vZHVs
ZSB3aXRoIGEgdHlwZWQgYXJyYXkuCisgICAgICAgICAtIENyZWF0ZXMgYSBjb21waWxhdGlvbiBw
bGFuLgorICAgICAgICAgLSBQYXJzZSB0aGUgTW9kdWxlIGFuZCBjcmVhdGVzIGNvcnJlc3BvbmRp
bmcgY29kZS4KKyAgICAgICAgIC0gVGhyb3cgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIHdpdGgg
bWlsZGx5IGhlbHBmdWwgWypdIGVycm9yIG1lc3NhZ2VzIG9uCisgICAgICAgICAgIGZhaWx1cmUu
CisKKyAgICAgICAgQ29uc3VsdCB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGV4cGVjdGVkIGJl
aGF2aW9yOiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFzdGVy
L0pTLm1kI3dlYmFzc2VtYmx5bW9kdWxlLWNvbnN0cnVjdG9yCisKKyAgICAgICAgRm9yIG5vdyB0
aGUgaW1wbGVtZW50YXRpb24gZGlzY2FyZHMgdGhlIGdlbmVyYXRlZCBjb2RlLgorCisgICAgICAg
IFRoZSBuZXh0IHN0ZXBzIHdpbGwgYmU6CisgICAgICAgICAtIEV4cG9zZSBhIE1vZHVsZSdzIGV4
cG9ydHMuCisgICAgICAgICAtIEltcGxlbWVudCBXZWJBc3NlbWJseS5JbnN0YW5jZSwgd2hpY2gg
YWxsb3dzIGluc3RhbnRpYXRpbmcgYW5kIHJ1bm5pbmcgYQorICAgICAgICAgICBjb21waWxlZCBN
b2R1bGUuCisgICAgICAgICAtIEJlZWYgdXAgdGhlIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgdW5k
ZXIgSlNUZXN0cy93YXNtIHNvIHRoYXQgbW9yZSBjb21wbGV4CisgICAgICAgICAgIG1vZHVsZXMg
Y2FuIGJlIGNyZWF0ZWQgYW5kIHRlc3RlZCAoaW5zdGVhZCBvZiB3cml0aW5nIHRoZSBiaXRzIGJ5
IGhhbmQpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbzoKKyAgICAgICAgIC0gQWRkcyBhc3Nl
cnQuaW5zdGFuY2VvZiBpbiBhc3NlcnQuanMuCisgICAgICAgICAtIFJlZmFjdG9ycyBXYXNtOjpQ
YXJzZXIgYW5kIGZyaWVuZHMgdG8gYWNjZXB0IGNvbnN0IHVpbnQ4X3QqIGFzIHdlbGwgYXMgYQor
ICAgICAgICAgICBWZWN0b3IsIHRvIGF2b2lkIGNvcHlpbmcgd2hlbiBpbnZva2VkIHN5bmNocm9u
b3VzbHkuCisgICAgICAgICAtIFJlbW92ZSB1c2VsZXNzIFN0cnVjdHVyZSBmcm9tIHNvbWUgb2Yg
dGhlIHdhc20gY29uc3RydWN0b3JzOiB0aGV5J3JlIGFscmVhZHkKKyAgICAgICAgICAgb24gdGhl
IEpTR2xvYmFsT2JqZWN0LCB2aXNpdGVkIHByb3Blcmx5IGFuZCBhbGwuCisgICAgICAgICAtIEZp
eCBvZmYtYnktb25lIGVycm9yIGluIHBhcnNpbmc6IFBhcnNlcjo6cGFyc2VVSW50MzIgZmFpbGVk
IGlmIHRoZSBpbnRlZ2VyCisgICAgICAgICAgIHdhcyBleGFjdGx5IGF0IGVuZCBvZiBmaWxlLgor
CisgICAgICAgICBbKl0gT24gZXJyb3IgbWVzc2FnZXMgd2hpbGUgcGFyc2luZzogSSBmaWxlZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisKKyAgICAgICAg
V2ViQXNzZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgTW9kdWxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vYXNzZXJ0LmpzOiB1c2UgdW5kZXJz
Y29yZSBpbiBuYW1lLCBhbmQgcmVtb3ZlIHdoZW4gZXhwb3J0aW5nIHRvIGF2b2lkIGNsYXNpbmcg
d2l0aCBidWlsdGluIG5hbWVzCisgICAgICAgIChjb25zdC5fbm90VW5kZWYpOgorICAgICAgICAo
Y29uc3QuX2lzVW5kZWYpOgorICAgICAgICAoY29uc3QuX2VxKToKKyAgICAgICAgKGNvbnN0Ll9n
ZSk6CisgICAgICAgIChjb25zdC5fdGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0
X2Jhc2ljX2FwaS5qczogdGVzdCB0aGUgV2ViQXNzZW1ibHkuTW9kdWxlIEFQSQorICAgICAgICAo
Y29uc3QuYy5pbi5jb25zdHJ1Y3RvclByb3BlcnRpZXMuc3dpdGNoKToKKwogMjAxNi0xMC0yNCAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXYXNtIHNo
b3VsZCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vYXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwppbmRleCA1YzcxY2M0
Li4yZWE1ZjcwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9hc3NlcnQuanMKQEAgLTIzLDI5ICsyMywyOSBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi1leHBvcnQgY29uc3Qgbm90VW5kZWYgPSAodikgPT4geworY29uc3QgX25vdFVuZGVmID0g
KHYpID0+IHsKICAgICBpZiAodHlwZW9mIHYgPT09ICJ1bmRlZmluZWQiKQogICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIlNob3VsZG4ndCBiZSB1bmRlZmluZWQiKTsKIH07CiAKLWV4cG9ydCBjb25z
dCBpc1VuZGVmID0gKHYpID0+IHsKK2NvbnN0IF9pc1VuZGVmID0gKHYpID0+IHsKICAgICBpZiAo
dHlwZW9mIHYgIT09ICJ1bmRlZmluZWQiKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3Vs
ZCBiZSB1bmRlZmluZWQiKTsKIH07CiAKLWV4cG9ydCBjb25zdCBlcSA9IChsaHMsIHJocykgPT4g
eworY29uc3QgX2VxID0gKGxocywgcmhzKSA9PiB7CiAgICAgaWYgKGxocyAhPT0gcmhzKQogICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCB0aGUgc2FtZTogIiR7bGhzfSIgYW5kICIke3Joc30i
YCk7CiB9OwogCi1leHBvcnQgY29uc3QgZ2UgPSAobGhzLCByaHMpID0+IHsKLSAgICBub3RVbmRl
ZihsaHMpOwotICAgIG5vdFVuZGVmKHJocyk7Citjb25zdCBfZ2UgPSAobGhzLCByaHMpID0+IHsK
KyAgICBfbm90VW5kZWYobGhzKTsKKyAgICBfbm90VW5kZWYocmhzKTsKICAgICBpZiAoIShsaHMg
Pj0gcmhzKSkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZDogIiR7bGhzfSIgPCAi
JHtyaHN9ImApOwogfTsKIAotZXhwb3J0IGNvbnN0IHRocm93cyA9IChmdW5jLCB0eXBlLCBtZXNz
YWdlLCAuLi5hcmdzKSA9PiB7Citjb25zdCBfdGhyb3dzID0gKGZ1bmMsIHR5cGUsIG1lc3NhZ2Us
IC4uLmFyZ3MpID0+IHsKICAgICB0cnkgewogICAgICAgICBmdW5jKC4uLmFyZ3MpOwogICAgIH0g
Y2F0Y2ggKGUpIHsKQEAgLTU1LDMgKzU1LDE1IEBAIGV4cG9ydCBjb25zdCB0aHJvd3MgPSAoZnVu
YywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewogICAgIH0KICAgICB0aHJvdyBuZXcgRXJy
b3IoYEV4cGVjdGVkIHRvIHRocm93IGEgJHt0eXBlLm5hbWV9IHdpdGggbWVzc2FnZSAiJHttZXNz
YWdlfSJgKTsKIH07CisKK2NvbnN0IF9pbnN0YW5jZW9mID0gKG9iaiwgdHlwZSkgPT4gb2JqIGlu
c3RhbmNlb2YgdHlwZTsKKworLy8gVXNlIHVuZGVyc2NvcmUgbmFtZXMgdG8gYXZvaWQgY2xhc2hp
bmcgd2l0aCBidWlsdGluIG5hbWVzLgorZXhwb3J0IHsKKyAgICBfbm90VW5kZWYgYXMgbm90VW5k
ZWYsCisgICAgX2lzVW5kZWYgYXMgaXNVbmRlZiwKKyAgICBfZXEgYXMgZXEsCisgICAgX2dlIGFz
IGdlLAorICAgIF90aHJvd3MgYXMgdGhyb3dzLAorICAgIF9pbnN0YW5jZW9mIGFzIGluc3RhbmNl
b2YsCit9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5q
cyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKaW5kZXggYzRlMTkyNy4u
NGVlODg1MyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5q
cworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCkBAIC0xLDYgKzEs
OSBAQAogaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgKiBh
cyB1dGlsaXRpZXMgZnJvbSAnLi4vdXRpbGl0aWVzLmpzJzsKIAorY29uc3QgdmVyc2lvbiA9IDB4
QzsKK2NvbnN0IGVtcHR5TW9kdWxlID0gVWludDhBcnJheS5vZigweDAsIDB4NjEsIDB4NzMsIDB4
NmQsIHZlcnNpb24sIDB4MDAsIDB4MDAsIDB4MDApOworCiBjb25zdCBjaGVja093blByb3BlcnR5
RGVzY3JpcHRvciA9IChvYmosIHByb3AsIGV4cGVjdCkgPT4gewogICAgIGNvbnN0IGRlc2NyaXB0
b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7CiAgICAgYXNz
ZXJ0LmVxKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlLCBleHBlY3QudHlwZW9mdmFsdWUpOwpAQCAt
MTQsMTIgKzE3LDEyIEBAIGNvbnN0IGZ1bmN0aW9uUHJvcGVydGllcyA9IHsKICAgICAiY29tcGls
ZSI6ICB7IGxlbmd0aDogMSB9LAogfTsKIGNvbnN0IGNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHsK
LSAgICAiTW9kdWxlIjogICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6
IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwg
aXNFcnJvcjogZmFsc2UgfSwKLSAgICAiSW5zdGFuY2UiOiAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1
bmN0aW9uIiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTog
ZmFsc2UsIGxlbmd0aDogMSwgaXNFcnJvcjogZmFsc2UgfSwKLSAgICAiTWVtb3J5IjogICAgICAg
eyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwgaXNFcnJvcjogZmFsc2UgfSwKLSAg
ICAiVGFibGUiOiAgICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRy
dWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwgaXNF
cnJvcjogZmFsc2UgfSwKLSAgICAiQ29tcGlsZUVycm9yIjogeyB0eXBlb2Z2YWx1ZTogImZ1bmN0
aW9uIiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFs
c2UsIGxlbmd0aDogMSwgaXNFcnJvcjogdHJ1ZSAgfSwKLSAgICAiUnVudGltZUVycm9yIjogeyB0
eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1
ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwgaXNFcnJvcjogdHJ1ZSAgfSwKKyAgICAi
TW9kdWxlIjogICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRydWUs
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSB9LAorICAg
ICJJbnN0YW5jZSI6ICAgICB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTogdHJ1
ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxIH0sCisg
ICAgIk1lbW9yeSI6ICAgICAgIHsgdHlwZW9mdmFsdWU6ICJmdW5jdGlvbiIsIHdyaXRhYmxlOiB0
cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCBsZW5ndGg6IDEgfSwK
KyAgICAiVGFibGUiOiAgICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6
IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSB9
LAorICAgICJDb21waWxlRXJyb3IiOiB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJs
ZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAx
IH0sCisgICAgIlJ1bnRpbWVFcnJvciI6IHsgdHlwZW9mdmFsdWU6ICJmdW5jdGlvbiIsIHdyaXRh
YmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCBsZW5ndGg6
IDEgfSwKIH07CiAKIApAQCAtNDQsNyArNDcsMzAgQEAgZm9yIChjb25zdCBjIGluIGNvbnN0cnVj
dG9yUHJvcGVydGllcykgewogICAgIGNoZWNrT3duUHJvcGVydHlEZXNjcmlwdG9yKFdlYkFzc2Vt
Ymx5LCBjLCBjb25zdHJ1Y3RvclByb3BlcnRpZXNbY10pOwogICAgIGNoZWNrT3duUHJvcGVydHlE
ZXNjcmlwdG9yKFdlYkFzc2VtYmx5W2NdLCAicHJvdG90eXBlIiwgeyB0eXBlb2Z2YWx1ZTogIm9i
amVjdCIsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTog
ZmFsc2UgfSk7CiAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBXZWJBc3NlbWJseVtjXSgpLCBUeXBl
RXJyb3IsIGBjYWxsaW5nIFdlYkFzc2VtYmx5LiR7Y30gY29uc3RydWN0b3Igd2l0aG91dCBuZXcg
aXMgaW52YWxpZGApOwotICAgIGlmIChjb25zdHJ1Y3RvclByb3BlcnRpZXNbY10uaXNFcnJvcikg
eworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgIk1vZHVsZSI6CisgICAgICAgIGZvciAoY29u
c3QgaW52YWxpZCBvZiBbdW5kZWZpbmVkLCAiIiwgMSwge30sIFtdXSkKKyAgICAgICAgICAgIGFz
c2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpLCBUeXBlRXJyb3Is
IGBmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5Nb2R1bGUgbXVzdCBiZSBhbiBBcnJheUJ1
ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtj
XShpbnZhbGlkKScpYCk7CisgICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIFtuZXcgQXJyYXlC
dWZmZXIoKSwgbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigpKSwgbmV3IEludDhBcnJheSgp
LCBuZXcgVWludDhBcnJheSgpLCBuZXcgVWludDhDbGFtcGVkQXJyYXkoKSwgbmV3IEludDE2QXJy
YXkoKSwgbmV3IFVpbnQxNkFycmF5KCksIG5ldyBJbnQzMkFycmF5KCksIG5ldyBVaW50MzJBcnJh
eSgpLCBuZXcgRmxvYXQzMkFycmF5KCksIG5ldyBGbG9hdDY0QXJyYXkoKV0pCisgICAgICAgICAg
ICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBXZWJBc3NlbWJseS5Db21waWxlRXJy
b3IuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3NjgKKyAgICAg
ICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVy
cm9yLCBgTW9kdWxlIGlzIDAgYnl0ZXMsIGV4cGVjdGVkIGF0IGxlYXN0IDggYnl0ZXMgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpJylgKTsKKyAgICAgICAgYXNzZXJ0Lmlu
c3RhbmNlb2YobmV3IFdlYkFzc2VtYmx5W2NdKGVtcHR5TW9kdWxlKSwgV2ViQXNzZW1ibHkuTW9k
dWxlKTsKKyAgICAgICAgLy8gRklYTUUgdGVzdCBuZXV0ZXJlZCBUeXBlZEFycmF5IGFuZCBUeXBl
ZEFycmF5Vmlldy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzg5
OQorICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbnN0YW5jZSI6CisgICAgICAgIC8vIEZJWE1F
IEltcGxlbWVudCBhbmQgdGVzdCB0aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBqdXN0
IHRocm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1Cisg
ICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKCksIEVycm9yLCBg
V2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSAke2N9IGNvbnN0cnVjdG9yIHBy
b3BlcnR5YCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIk1lbW9yeSI6CisgICAgICAgIC8v
IEZJWE1FIEltcGxlbWVudCBhbmQgdGVzdCB0aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhl
eSBqdXN0IHRocm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5
Nzc1CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKCksIEVy
cm9yLCBgV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSAke2N9IGNvbnN0cnVj
dG9yIHByb3BlcnR5YCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIlRhYmxlIjoKKyAgICAg
ICAgLy8gRklYTUUgSW1wbGVtZW50IGFuZCB0ZXN0IHRoZXNlIEFQSXMgZnVydGhlci4gRm9yIG5v
dyB0aGV5IGp1c3QgdGhyb3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTk3NzUKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10o
KSwgRXJyb3IsIGBXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29u
c3RydWN0b3IgcHJvcGVydHlgKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiQ29tcGlsZUVy
cm9yIjoKKyAgICBjYXNlICJSdW50aW1lRXJyb3IiOiB7CiAgICAgICAgIGNvbnN0IGUgPSBuZXcg
V2ViQXNzZW1ibHlbY107CiAgICAgICAgIGFzc2VydC5lcShlIGluc3RhbmNlb2YgV2ViQXNzZW1i
bHlbY10sIHRydWUpOwogICAgICAgICBhc3NlcnQuZXEoZSBpbnN0YW5jZW9mIEVycm9yLCB0cnVl
KTsKQEAgLTU0LDE2ICs4MCwxMiBAQCBmb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0b3JQcm9wZXJ0
aWVzKSB7CiAgICAgICAgIGNvbnN0IHNpbGx5U3RyaW5nID0gInVoLW9oISI7CiAgICAgICAgIGNv
bnN0IGUyID0gbmV3IFdlYkFzc2VtYmx5W2NdKHNpbGx5U3RyaW5nKTsKICAgICAgICAgYXNzZXJ0
LmVxKGUyLm1lc3NhZ2UsIHNpbGx5U3RyaW5nKTsKKyAgICB9IGJyZWFrOworICAgIGRlZmF1bHQ6
IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gZXJyb3I6IHVuZXhwZWN0ZWQgY29uc3Ry
dWN0b3IgcHJvcGVydHkgIiR7Y30iYCk7CiAgICAgfQogfQogCiAvLyBGSVhNRSBJbXBsZW1lbnQg
YW5kIHRlc3QgdGhlc2UgQVBJcyBmdXJ0aGVyLiBGb3Igbm93IHRoZXkganVzdCB0aHJvdy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTc3NQotCiBmb3IgKGNvbnN0
IGYgaW4gZnVuY3Rpb25Qcm9wZXJ0aWVzKSB7CiAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBXZWJB
c3NlbWJseVtmXSgpLCBFcnJvciwgYFdlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0
aGUgJHtmfSBmdW5jdGlvbiBwcm9wZXJ0eWApOwogfQotCi1mb3IgKGNvbnN0IGMgaW4gY29uc3Ry
dWN0b3JQcm9wZXJ0aWVzKSB7Ci0gICAgaWYgKCFjb25zdHJ1Y3RvclByb3BlcnRpZXNbY10uaXNF
cnJvcikKLSAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oKSwg
RXJyb3IsIGBXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29uc3Ry
dWN0b3IgcHJvcGVydHlgKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDY2YzYwZTQu
LjNhZjYyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAx
Ni0xMC0yNCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
QXNzZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgTW9kdWxlCisKKyAgICAgICAgVGhpcyBpbXBsZW1l
bnRhdGlvbiBhbGxvd3MgdXMgdG86CisgICAgICAgICAtIFN5bmNyaG9ub3VzbHkgY3JlYXRlIGEg
V2ViQXNzZW1ibHkuTW9kdWxlIHdpdGggYSB0eXBlZCBhcnJheS4KKyAgICAgICAgIC0gQ3JlYXRl
cyBhIGNvbXBpbGF0aW9uIHBsYW4uCisgICAgICAgICAtIFBhcnNlIHRoZSBNb2R1bGUgYW5kIGNy
ZWF0ZXMgY29ycmVzcG9uZGluZyBjb2RlLgorICAgICAgICAgLSBUaHJvdyBXZWJBc3NlbWJseS5D
b21waWxlRXJyb3Igd2l0aCBtaWxkbHkgaGVscGZ1bCBbKl0gZXJyb3IgbWVzc2FnZXMgb24KKyAg
ICAgICAgICAgZmFpbHVyZS4KKworICAgICAgICBDb25zdWx0IHRoZSBBUEkgZG9jdW1lbnRhdGlv
biBmb3IgZXhwZWN0ZWQgYmVoYXZpb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9k
ZXNpZ24vYmxvYi9tYXN0ZXIvSlMubWQjd2ViYXNzZW1ibHltb2R1bGUtY29uc3RydWN0b3IKKwor
ICAgICAgICBGb3Igbm93IHRoZSBpbXBsZW1lbnRhdGlvbiBkaXNjYXJkcyB0aGUgZ2VuZXJhdGVk
IGNvZGUuCisKKyAgICAgICAgVGhlIG5leHQgc3RlcHMgd2lsbCBiZToKKyAgICAgICAgIC0gRXhw
b3NlIGEgTW9kdWxlJ3MgZXhwb3J0cy4KKyAgICAgICAgIC0gSW1wbGVtZW50IFdlYkFzc2VtYmx5
Lkluc3RhbmNlLCB3aGljaCBhbGxvd3MgaW5zdGFudGlhdGluZyBhbmQgcnVubmluZyBhCisgICAg
ICAgICAgIGNvbXBpbGVkIE1vZHVsZS4KKyAgICAgICAgIC0gQmVlZiB1cCB0aGUgdGVzdGluZyBp
bmZyYXN0cnVjdHVyZSB1bmRlciBKU1Rlc3RzL3dhc20gc28gdGhhdCBtb3JlIGNvbXBsZXgKKyAg
ICAgICAgICAgbW9kdWxlcyBjYW4gYmUgY3JlYXRlZCBhbmQgdGVzdGVkIChpbnN0ZWFkIG9mIHdy
aXRpbmcgdGhlIGJpdHMgYnkgaGFuZCkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvOgorICAg
ICAgICAgLSBBZGRzIGFzc2VydC5pbnN0YW5jZW9mIGluIGFzc2VydC5qcy4KKyAgICAgICAgIC0g
UmVmYWN0b3JzIFdhc206OlBhcnNlciBhbmQgZnJpZW5kcyB0byBhY2NlcHQgY29uc3QgdWludDhf
dCogYXMgd2VsbCBhcyBhCisgICAgICAgICAgIFZlY3RvciwgdG8gYXZvaWQgY29weWluZyB3aGVu
IGludm9rZWQgc3luY2hyb25vdXNseS4KKyAgICAgICAgIC0gUmVtb3ZlIHVzZWxlc3MgU3RydWN0
dXJlIGZyb20gc29tZSBvZiB0aGUgd2FzbSBjb25zdHJ1Y3RvcnM6IHRoZXkncmUgYWxyZWFkeQor
ICAgICAgICAgICBvbiB0aGUgSlNHbG9iYWxPYmplY3QsIHZpc2l0ZWQgcHJvcGVybHkgYW5kIGFs
bC4KKyAgICAgICAgIC0gRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gcGFyc2luZzogUGFyc2VyOjpw
YXJzZVVJbnQzMiBmYWlsZWQgaWYgdGhlIGludGVnZXIKKyAgICAgICAgICAgd2FzIGV4YWN0bHkg
YXQgZW5kIG9mIGZpbGUuCisKKyAgICAgICAgIFsqXSBPbiBlcnJvciBtZXNzYWdlcyB3aGlsZSBw
YXJzaW5nOiBJIGZpbGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjM5MTkKKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBNb2R1bGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkwMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6ZGVmYXVsdFNvdXJjZUFwcGVuZGVy
KTogbWFrZSB0aGlzIHB1YmxpYyBzbyB0aGF0IFdlYkFzc2VtYmx5IGNhbiB1c2UgaXQ6IGl0IGdl
bmVyYXRlcyB0aG9zZSBmYW5jeSAoZXZhbHVhdGluZyAnLi4uJykgbWVzc2FnZXMgYXQgdGhlIGVu
ZAorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5p
dCk6IHJlbW92ZSB0aGUgdXNlbGVzcyBTdHJ1Y3R1cmUgZnJvbSB0aGUgV2ViQXNzZW1ibHkgb2Jq
ZWN0cyAoaXQncyBhbHJlYWR5IGluIHRoaXMgZmlsZSwgbm8gbmVlZCB0byBob2xkIHR3byByZWZl
cmVuY2VzIGFuZCB2aXNpdCB0aGVtIHR3aWNlKQorICAgICAgICAqIHRlc3RXYXNtLmNwcDoKKyAg
ICAgICAgKHJ1bldhc21UZXN0cyk6IHVwZGF0ZSBBUEkKKyAgICAgICAgKiB3YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKTogdXNl
IHVwZGF0ZWQgQVBJCisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcik6IHVzZSB1cGRhdGVkIEFQSQorICAg
ICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9u
KTogdXNlIHVwZGF0ZWQgQVBJCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZSk6IGdlbmVyYXRlIGVycm9y
IG1lc3NhZ2VzCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmg6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6TW9kdWxlUGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlUGFyc2VyOjpmYWlsZWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJz
ZXI6OmVycm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6ZnVu
Y3Rpb25JbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6bWVt
b3J5KToKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuaDogdXNlIHVwZGF0ZSBub24tcHVibGlj
IEFQSQorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVmFyVUludDMyKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVZhclVJbnQ2NCk6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6c291cmNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpsZW5ndGgp
OgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OlBhcnNlcik6CisgICAgICAgIChKU0M6Oldh
c206OlBhcnNlcjo6Y29uc3VtZUNoYXJhY3Rlcik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjo6Y29uc3VtZVN0cmluZyk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VVSW50
MzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVUludDcpOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6flBsYW4pOgorICAgICAgICAqIHdhc20vV2FzbVBsYW4u
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6ZmFpbGVkKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cmVzdWx0
U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJlc3VsdCk6CisgICAgICAgIChKU0M6
Oldhc206OlBsYW46Om1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlV2ViQXNzZW1ibHlDb21waWxlRXJy
b3IpOiBtYWtlcyBpdCBlYXNpZXIgdG8gdGhyb3cgYSBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Ig
ZnJvbSBNb2R1bGUKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Iu
aDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9y
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNZW1vcnlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9k
dWxlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9y
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRp
bWVFcnJvckNvbnN0cnVjdG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0
b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmg6CisKIDIwMTYtMTAtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZWR1Y2Ugc3BlY2lhbCBoYW5kbGluZyBmb3IgdHlwZWQgYXJyYXlzIGlu
IEpTRE9NQ29udmVydC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IDkwNTA5MWEuLmVmMWIyMDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC0xMDEs
NyArMTAxLDcgQEAgc3RhdGljIFN0cmluZyBkZWZhdWx0QXBwcm94aW1hdGVTb3VyY2VFcnJvcihj
b25zdCBTdHJpbmcmIG9yaWdpbmFsTWVzc2FnZSwgY29uc3QKICAgICByZXR1cm4gbWFrZVN0cmlu
ZyhvcmlnaW5hbE1lc3NhZ2UsICIgKG5lYXIgJy4uLiIsIHNvdXJjZVRleHQsICIuLi4nKSIpOwog
fQogCi1zdGF0aWMgU3RyaW5nIGRlZmF1bHRTb3VyY2VBcHBlbmRlcihjb25zdCBTdHJpbmcmIG9y
aWdpbmFsTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VUZXh0LCBSdW50aW1lVHlwZSwgRXJy
b3JJbnN0YW5jZTo6U291cmNlVGV4dFdoZXJlRXJyb3JPY2N1cnJlZCBvY2N1cnJlbmNlKQorU3Ry
aW5nIGRlZmF1bHRTb3VyY2VBcHBlbmRlcihjb25zdCBTdHJpbmcmIG9yaWdpbmFsTWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VUZXh0LCBSdW50aW1lVHlwZSwgRXJyb3JJbnN0YW5jZTo6U291
cmNlVGV4dFdoZXJlRXJyb3JPY2N1cnJlZCBvY2N1cnJlbmNlKQogewogICAgIGlmIChvY2N1cnJl
bmNlID09IEVycm9ySW5zdGFuY2U6OkZvdW5kQXBwcm94aW1hdGVTb3VyY2UpCiAgICAgICAgIHJl
dHVybiBkZWZhdWx0QXBwcm94aW1hdGVTb3VyY2VFcnJvcihvcmlnaW5hbE1lc3NhZ2UsIHNvdXJj
ZVRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5oCmluZGV4IGQ4ZjM5MTIuLmVjMDUyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKQEAgLTM3LDYgKzM3LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiAKK1N0cmlu
ZyBkZWZhdWx0U291cmNlQXBwZW5kZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUnVu
dGltZVR5cGUsIEVycm9ySW5zdGFuY2U6OlNvdXJjZVRleHRXaGVyZUVycm9yT2NjdXJyZWQpOwor
CiBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSopOwogSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oRXhjZXB0
aW9uKik7CiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CmluZGV4IGY0OGNiY2YuLjM4NDA4MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTgzMiw3ICs4MzIsNyBAQCBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+IGpzTmFtZSwgbG93ZXJOYW1l
ICMjIENvbnN0cnVjdAogICAgICAgICBhdXRvKiBiYXNlID0gbV8gIyMgcHJvdG90eXBlQmFzZSAj
IyBQcm90b3R5cGUuZ2V0KCk7IFwKICAgICAgICAgYXV0byogcHJvdG90eXBlID0gUHJvdG90eXBl
OjpjcmVhdGUodm0sIHRoaXMsIFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBi
YXNlKSk7IFwKICAgICAgICAgYXV0byogc3RydWN0dXJlID0gSlNPYmo6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgcHJvdG90eXBlKTsgXAotICAgICAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IENv
bnN0cnVjdG9yOjpjcmVhdGUodm0sIENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRo
aXMsIHRoaXMtPmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBwcm90b3R5cGUsIHN0cnVjdHVyZSk7IFwK
KyAgICAgICAgYXV0byogY29uc3RydWN0b3IgPSBDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB0aGlzLT5mdW5jdGlvblByb3RvdHlw
ZSgpKSwgcHJvdG90eXBlKTsgXAogICAgICAgICBwcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgY29uc3RydWN0b3Is
IERvbnRFbnVtKTsgXAogICAgICAgICBtXyAjIyBsb3dlck5hbWUgIyMgUHJvdG90eXBlLnNldCh2
bSwgdGhpcywgcHJvdG90eXBlKTsgXAogICAgICAgICBtXyAjIyBwcm9wZXJOYW1lICMjIFN0cnVj
dHVyZS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20u
Y3BwCmluZGV4IGE5MWJlMzMuLmJlMjEwNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0V2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNw
cApAQCAtMzUzLDE3ICszNTMsMTcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAg
ICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxh
bi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJlc3VsdFsx
XSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAy
IHx8ICFwbGFuLnJlc3VsdCgwKSB8fCAhcGxhbi5yZXN1bHQoMSkpIHsKICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAg
ICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEyMDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwg
eyBib3goMSkgfSksIDEyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBi
b3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwg
Ym94KDEyKSB9KSwgNzgpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJv
eCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBi
b3goMTAwKSB9KSwgMTY2KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSks
IDEyMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpz
RW50cnlQb2ludCwgeyBib3goMSkgfSksIDEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgz
KSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEw
KSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSwgYm94KDMp
LCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3goMTAp
LCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKICAgICB9CiAKICAgICB7CkBAIC0zODcsMTYg
KzM4NywxNiBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAg
ICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXpl
KCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkg
fHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAg
ICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAg
ICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDIpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0pLCAyNCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSB9KSwgMik7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg0
KSB9KSwgMjQpOwogICAgIH0KIAogICAgIHsKQEAgLTQxNiwxOCArNDE2LDE4IEBAIHN0YXRpYyB2
b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwg
dmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJl
c3VsdFswXSB8fCAhcGxhbi5yZXN1bHRbMV0pIHsKKyAgICAgICAgaWYgKHBsYW4ucmVzdWx0U2l6
ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0KDApIHx8ICFwbGFuLnJlc3VsdCgxKSkgewogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwog
ICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MV0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9KSwgMTYpOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAy
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDApLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDApIH0p
LCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgxNSkgfSksIDE2KTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCkgfSksIDIwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMik7CiAgICAgfQog
CiAgICAgewpAQCAtNDQ3LDE4ICs0NDcsMTggQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkK
ICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBp
ZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJl
c3VsdFsxXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUo
KSAhPSAyIHx8ICFwbGFuLnJlc3VsdCgwKSB8fCAhcGxhbi5yZXN1bHQoMSkpIHsKICAgICAgICAg
ICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAg
ICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
IH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0p
LCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CiAgICAg
fQogCiAgICAgewpAQCAtNDgwLDE1ICs0ODAsMTUgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAg
ICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAg
ICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4u
cmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29t
cGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9
KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKICAgICB9
CiAKICAgICB7CkBAIC01MTAsMTUgKzUxMCwxNSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAg
IGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAg
ICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5y
ZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21w
aWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0p
LCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0K
IAogICAgIHsKQEAgLTU1MCwxNyArNTUwLDE3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygp
CiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAg
aWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAg
ICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJl
c3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBp
bGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQotICAgICAg
ICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9y
eSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzaXpl
b2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3go
bGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQz
Ml90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3go
bGVuZ3RoKSB9KTsKICAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1v
cnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwpAQCAtNTY5LDcgKzU2OSw3IEBAIHN0YXRpYyB2b2lk
IHJ1bldhc21UZXN0cygpCiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9
IDUgKiBzaXplb2YodWludDMyX3QpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7
CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAgICAgb2Zmc2V0IC89IHNp
emVvZih1aW50MzJfdCk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAw
dSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC02
MDUsMTcgKzYwNSwxNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9Owog
CiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3Vs
dC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFp
bGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAg
ICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4i
KTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4u
bWVtb3J5LT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsK
IAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKLSAgICAgICAgdWludDhf
dCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7
Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50OF90KiBt
ZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOwor
ICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBs
ZW5ndGhdLCAwdSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKQEAgLTYyMyw3ICs2MjMsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAg
ICAgIGxlbmd0aCA9IDEwOwogICAgICAgICBvZmZzZXQgPSA1OwotICAgICAgICBpbnZva2U8dm9p
ZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwg
Ym94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtNjQ5LDE2ICs2NDksMTYgQEAgc3RhdGljIHZvaWQgcnVu
V2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBd
KSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWls
ZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJU
KHBsYW4ubWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCks
IGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgxMDApIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBAIC02ODAsMTUgKzY4MCwx
NSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBs
YW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxh
bi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAg
ICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAx
MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTcxMCwxNiArNzEw
LDE2IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAg
UGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAh
PSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBw
bGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAg
ICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0x
MiksIGJveChwbGFuLm1lbW9yeS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSksIC0xMik7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSks
IDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goLTEyKSwgYm94
KHBsYW4ubWVtb3J5KCktPnNpemUoKSAtIHNpemVvZih1aW50NjRfdCkpIH0pLCAtMTIpOwogICAg
IH0KIAogICAgIHsKQEAgLTc0MSwxNSArNzQxLDE1IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0
cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAg
ICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAg
ICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFu
LnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNv
bXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAg
fQogCiAgICAgewpAQCAtNzgxLDE3ICs3ODEsMTcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAg
ICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAg
ICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4u
cmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29t
cGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBsYW4ubWVt
b3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNp
emVvZih1aW50MzJfdCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7Ci0gICAgICAgIGludm9rZTx2b2lkPigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJv
eChsZW5ndGgpIH0pOworICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJv
eChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1l
bW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC04MDAsNyArODAwLDcgQEAgc3RhdGljIHZv
aWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBsZW5ndGggPSAxMDsKICAgICAgICAgb2Zmc2V0
ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9
KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0g
c2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAx
MDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAg
LTgzNiwxNyArODM2LDE3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07
CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVz
dWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5m
YWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewog
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5
LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocGxh
bi5tZW1vcnktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeSgpLT5zaXplKCkp
OwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgogICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwotICAgICAgICB1aW50
OF90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnktPm1lbW9yeSgp
KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIHVpbnQ4X3Qq
IG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7
CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBDSEVDS19FUSht
ZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAr
IGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQpAQCAtODU0LDcgKzg1NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAg
ICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9rZTx2
b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQp
LCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAg
ICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAgICAgICBDSEVDS19F
UShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC04ODAsMTYgKzg4MCwxNiBAQCBzdGF0aWMgdm9pZCBy
dW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRb
MF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5zaXplKCkpOworICAgICAgICBBU1NF
UlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTkxMSwxNSArOTEx
LDE1IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAg
UGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAh
PSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBw
bGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAg
ICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSks
IDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtOTQxLDIwICs5
NDEsMjAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAg
ICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgp
ICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8
IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAg
ICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCksIGJveCg2KSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtOTgyLDIwICs5ODIsMjAg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4u
cmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAg
ICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSks
IDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0p
LCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxKSB9
KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2
KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCg2KSB9KSwgMCk7CiAgICAgfQogCiAKQEAgLTEwMDksMTMgKzEwMDksMTMgQEAgc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZt
LCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4u
cmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6
ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1v
ZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IH0pLCA1KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgfSksIDUpOwogICAgIH0KIAogCkBAIC0xMDMwLDEzICsxMDMwLDEzIEBA
IHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJl
c3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxv
Z0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAg
Q1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNo
LgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyB9KSwgMTEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwogICAgIH0KIAogICAgIHsKQEAgLTEwNTAs
MTMgKzEwNTAsMTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAog
ICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQu
c2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxl
ZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAg
ICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7
CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlz
IGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAg
ICAgewpAQCAtMTA3MCwxMyArMTA3MCwxMyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQog
ICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlm
IChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAg
aWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1
bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxl
IGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDEx
KTsKICAgICB9CiAKICAgICB7CkBAIC0xMDg5LDE2ICsxMDg5LDE2IEBAIHN0YXRpYyB2b2lkIHJ1
bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9y
KTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFsw
XSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAx
IHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFp
bGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCks
IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMSkgfSksIDEwMSk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgtMSksIGJveCgxKX0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMSkgfSksIDEwMSk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgtMSksIGJveCgxKX0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkpOwogICAgIH0KIAogICAgIHsKQEAgLTExMTgsMTQgKzExMTgsMTQgQEAgc3RhdGljIHZvaWQg
cnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0
WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9
IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBm
YWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMCkgfSksIDEwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwKSB9KSwgMTApOwogICAgIH0KIAogICAgIHsKQEAgLTExNTQsMTYgKzExNTQsMTYg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4u
cmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAg
ICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgy
KX0pLCAzKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDUwNTApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMil9KSwgMyk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0p
LCA1MDUwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTk4LDIwICsxMTk4LDIwIEBAIHN0YXRpYyB2
b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwg
dmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJl
c3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUo
KSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1
bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMCksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDIpLCBib3goMSkgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMik7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDIpIH0pLCA0KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEyKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCg2KSB9KSwgNjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxMDApIH0p
LCAxMDAwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMik7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDIpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDQpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJv
eCg2KSB9KSwgMTIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCA2MDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MTAwKSwgYm94KDEwMCkgfSksIDEwMDAwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMjUxLDIwICsx
MjUxLDIwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUo
KSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8
fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAg
ICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vz
bid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goNikgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgyKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDE0MTc3OTIuLmJhNGQ0YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKQEAgLTcxNCwxMyArNzE0LDEzIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRp
b24+IGNyZWF0ZUpTV3JhcHBlcihWTSYgdm0sIGNvbnN0IFNpZ25hdHVyZSogc2lnCiAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIFZl
Y3Rvcjx1aW50OF90PiYgc291cmNlLCBNZW1vcnkqIG1lbW9yeSwgRnVuY3Rpb25JbmZvcm1hdGlv
biBpbmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucywgdW5z
aWduZWQgb3B0TGV2ZWwpCitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFy
c2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90
IGZ1bmN0aW9uTGVuZ3RoLCBNZW1vcnkqIG1lbW9yeSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1
cmUsIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25zLCB1bnNpZ25l
ZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rp
b25Db21waWxhdGlvbj4oKTsKIAogICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7CiAgICAgQjNJUkdl
bmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQtPnVubGlua2VkQ2FsbHMp
OwotICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBzb3Vy
Y2UsIGluZm8sIGZ1bmN0aW9ucyk7CisgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4g
cGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IGZ1bmN0aW9ucyk7CiAgICAgaWYgKCFwYXJzZXIucGFyc2UoKSkKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAtNzMyLDcgKzczMiw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBWZWN0b3I8dWlu
dDhfdD4mIHNvCiAgICAgICAgIGRhdGFMb2coIlBvc3QgU1NBOiAiLCBwcm9jZWR1cmUpOwogCiAg
ICAgcmVzdWx0LT5jb2RlID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2Nl
ZHVyZSwgb3B0TGV2ZWwpOwotICAgIHJlc3VsdC0+anNFbnRyeVBvaW50ID0gY3JlYXRlSlNXcmFw
cGVyKHZtLCBpbmZvLnNpZ25hdHVyZSwgcmVzdWx0LT5jb2RlLT5jb2RlKCksIG1lbW9yeSk7Cisg
ICAgcmVzdWx0LT5qc0VudHJ5UG9pbnQgPSBjcmVhdGVKU1dyYXBwZXIodm0sIHNpZ25hdHVyZSwg
cmVzdWx0LT5jb2RlLT5jb2RlKCksIG1lbW9yeSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXgg
ZjhkODQyMC4uNDNkZGI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5oCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9yeTsKIAotc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29t
cGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYsIFZlY3Rvcjx1aW50OF90PiYsIE1lbW9yeSos
IEZ1bmN0aW9uSW5mb3JtYXRpb24sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYs
IHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxh
dGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgTWVtb3J5
KiwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+Jiwg
dW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAppbmRl
eCBhMGQ1YjNkLi41MWUyZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0
eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwogCi0gICAg
RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVm
ZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5m
b3JtYXRpb24+JiBmdW5jdGlvbnMpOworICAgIEZ1bmN0aW9uUGFyc2VyKENvbnRleHQmLCBjb25z
dCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNp
Z25hdHVyZSosIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25zKTsK
IAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKQEAgLTU5LDIxICs1OSwy
MSBAQCBwcml2YXRlOgogICAgIENvbnRleHQmIG1fY29udGV4dDsKICAgICBWZWN0b3I8RXhwcmVz
c2lvblR5cGUsIDE+IG1fZXhwcmVzc2lvblN0YWNrOwogICAgIFZlY3RvcjxDb250cm9sVHlwZT4g
bV9jb250cm9sU3RhY2s7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKKyAgICBj
b25zdCBTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogICAgIGNvbnN0IFZlY3RvcjxGdW5jdGlvbklu
Zm9ybWF0aW9uPiYgbV9mdW5jdGlvbnM7CiAgICAgdW5zaWduZWQgbV91bnJlYWNoYWJsZUJsb2Nr
cyB7IDAgfTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci1GdW5jdGlvblBhcnNl
cjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIsIGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8s
IGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25zKQotICAgIDogUGFy
c2VyKHNvdXJjZUJ1ZmZlciwgaW5mby5zdGFydCwgaW5mby5lbmQpCitGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYgY29udGV4dCwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNp
Z25hdHVyZSwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpCisg
ICAgOiBQYXJzZXIoZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgpCiAgICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fc2lnbmF0dXJlKCppbmZvLnNpZ25hdHVyZSkKKyAgICAsIG1f
c2lnbmF0dXJlKHNpZ25hdHVyZSkKICAgICAsIG1fZnVuY3Rpb25zKGZ1bmN0aW9ucykKIHsKICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIHN0YXJ0
aW5nIGF0OiAiLCBpbmZvLnN0YXJ0LCAiIGVuZGluZyBhdDogIiwgaW5mby5lbmQpOwotICAgIG1f
Y29udGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUuYXJndW1lbnRzKTsKKyAgICAgICAgZGF0
YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCAodWludHB0cl90KWZ1bmN0
aW9uU3RhcnQsICIgb2YgbGVuZ3RoOiAiLCBmdW5jdGlvbkxlbmd0aCk7CisgICAgbV9jb250ZXh0
LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZS0+YXJndW1lbnRzKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGV4dD4KQEAgLTMwOSw3ICszMDksNyBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogCiAgICAgY2FzZSBPcFR5cGU6OlJl
dHVybjogewogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IHJldHVyblZhbHVlczsK
LSAgICAgICAgaWYgKG1fc2lnbmF0dXJlLnJldHVyblR5cGUgIT0gVm9pZCkKKyAgICAgICAgaWYg
KG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9IFZvaWQpCiAgICAgICAgICAgICByZXR1cm5WYWx1
ZXMuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCkpOwogCiAgICAgICAgIG1fdW5y
ZWFjaGFibGVCbG9ja3MgPSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcAppbmRleCA3ZWUwMWIwLi45NDVhZTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtNDEsMzMgKzQxLDQ1
IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogYm9vbCBNb2R1bGVQYXJz
ZXI6OnBhcnNlKCkKIHsKLSAgICBpZiAobV9zb3VyY2VMZW5ndGggPCA4KQorICAgIGNvbnN0IHNp
emVfdCBtaW5TaXplID0gODsKKyAgICBpZiAobGVuZ3RoKCkgPCBtaW5TaXplKSB7CisgICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gIk1vZHVsZSBpcyAiICsgU3RyaW5nOjpudW1iZXIobGVuZ3RoKCkp
ICsgIiBieXRlcywgZXhwZWN0ZWQgYXQgbGVhc3QgIiArIFN0cmluZzo6bnVtYmVyKG1pblNpemUp
ICsgIiBieXRlcyI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWNvbnN1bWVDaGFy
YWN0ZXIoMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWNvbnN1bWVTdHJpbmco
ImFzbSIpKQorICAgIH0KKyAgICBpZiAoIWNvbnN1bWVDaGFyYWN0ZXIoMCkgfHwgIWNvbnN1bWVT
dHJpbmcoImFzbSIpKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIk1vZHVsZXMgZG9lbnMn
dCBzdGFydCB3aXRoICdcXDBhc20nIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAog
ICAgIC8vIFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2luY2Ugd2UgZG9uJ3QgZG8g
YW55dGhpbmcgd2l0aCBpdC4KICAgICB1aW50MzJfdCB2ZXJzaW9uTnVtYmVyOwotICAgIGlmICgh
cGFyc2VVSW50MzIodmVyc2lvbk51bWJlcikpCisgICAgaWYgKCFwYXJzZVVJbnQzMih2ZXJzaW9u
TnVtYmVyKSkgeworICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQorICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB2ZXJzaW9uIG51bWJlciI7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiAKLSAgICBpZiAodmVyc2lvbk51bWJlciAhPSBtYWdpY051bWJlcikK
KyAgICBpZiAodmVyc2lvbk51bWJlciAhPSBtYWdpY051bWJlcikgeworICAgICAgICAvLyBGSVhN
RSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzkxOQorICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJ1bmV4cGVjdGVkIHZlcnNp
b24gbnVtYmVyIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogCiAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiUGFzc2VkIHByb2Nlc3NpbmcgaGVhZGVyLiIpOwog
CiAgICAgU2VjdGlvbnM6OlNlY3Rpb24gcHJldmlvdXNTZWN0aW9uID0gU2VjdGlvbnM6OlVua25v
d247Ci0gICAgd2hpbGUgKG1fb2Zmc2V0IDwgbV9zb3VyY2VMZW5ndGgpIHsKKyAgICB3aGlsZSAo
bV9vZmZzZXQgPCBsZW5ndGgoKSkgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2dMbigiU3RhcnRpbmcgdG8gcGFyc2UgbmV4dCBzZWN0aW9uIGF0IG9mZnNldDogIiwg
bV9vZmZzZXQpOwogCiAgICAgICAgIHVpbnQ4X3Qgc2VjdGlvbkJ5dGU7Ci0gICAgICAgIGlmICgh
cGFyc2VVSW50NyhzZWN0aW9uQnl0ZSkpCisgICAgICAgIGlmICghcGFyc2VVSW50NyhzZWN0aW9u
Qnl0ZSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAgICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBieXRlIjsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJTZWN0aW9uIGJ5dGU6ICIsIHNlY3Rpb25CeXRlKTsKQEAgLTc4LDI0
ICs5MCwzNiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgIHNl
Y3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0aW9uczo6U2VjdGlvbj4oc2VjdGlvbkJ5dGUpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgdWludDMyX3Qgc2VjdGlvbk5hbWVMZW5ndGg7Ci0g
ICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25OYW1lTGVuZ3RoKSkKKyAgICAg
ICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbk5hbWVMZW5ndGgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVz
c2FnZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBuYW1lIGxlbmd0aCI7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgd2UgY2FuIHJlYWQgdXAgdG8gdGhlIHNlY3Rpb24ncyBzaXplLgotICAgICAgICAgICAgaWYg
KG1fb2Zmc2V0ICsgc2VjdGlvbk5hbWVMZW5ndGggKyBXVEY6OkxFQkRlY29kZXI6Om1heDMyQml0
TEVCQnl0ZUxlbmd0aCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgICAgIGlmIChtX29mZnNl
dCArIHNlY3Rpb25OYW1lTGVuZ3RoICsgV1RGOjpMRUJEZWNvZGVyOjptYXgzMkJpdExFQkJ5dGVM
ZW5ndGggPj0gbGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVy
cm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzkx
OQorICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gInNlY3Rpb24gbGVuZ3RoIGlzIGJp
Z2dlciB0aGFuIGFjdHVhbCBzaXplIjsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgYW55IGN1c3Rv
bSBzZWN0aW9ucyB5ZXQuCiAKICAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHNlY3Rpb25OYW1lTGVu
Z3RoOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFTZWN0aW9uczo6dmFsaWRhdGVPcmRlcihw
cmV2aW91c1NlY3Rpb24sIHNlY3Rpb24pKQorICAgICAgICBpZiAoIVNlY3Rpb25zOjp2YWxpZGF0
ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
IGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzOTE5CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJpbnZhbGlkIHNlY3Rp
b24gb3JkZXIiOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAg
ICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihz
ZWN0aW9uTGVuZ3RoKSkKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3Ro
KSkgeworICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBzZWN0aW9uIGxlbmd0aCI7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX29mZnNl
dCArIHNlY3Rpb25MZW5ndGg7CiAKQEAgLTEwNCwzMiArMTI4LDQ0IEBAIGJvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZSgpCiAgICAgICAgIGNhc2UgU2VjdGlvbnM6Ok1lbW9yeTogewogICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIE1lbW9y
eS4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VNZW1vcnkoKSkKKyAgICAgICAgICAgIGlmICgh
cGFyc2VNZW1vcnkoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3Ig
bWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Cisg
ICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgbWVtb3J5IjsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU2VjdGlvbnM6OkZ1bmN0aW9uVHlw
ZXM6IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigiUGFyc2luZyB0eXBlcy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblR5cGVz
KCkpCisgICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb25UeXBlcygpKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2Fn
ZSA9ICJjb3VsZG4ndCBwYXJzZSB0eXBlcyI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIFNlY3Rpb25zOjpTaWduYXR1cmVzOiB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcy4i
KTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblNpZ25hdHVyZXMoKSkKKyAgICAgICAg
ICAgIGlmICghcGFyc2VGdW5jdGlvblNpZ25hdHVyZXMoKSkgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291
bGRuJ3QgcGFyc2UgZnVuY3Rpb24gc2lnbmF0dXJlcyI7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIFNlY3Rpb25zOjpEZWZpbml0aW9uczogewogICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIGRlZmlu
aXRpb25zLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkK
KyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQorICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gImNvdWxkbid0IHBhcnNlIGZ1bmN0aW9uIGRlZmluaXRpb25zIjsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC0xNDYsMTMgKzE4MiwxNyBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2Uo
KQogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiRmluaXNoZWQg
cGFyc2luZyBzZWN0aW9uLiIpOwogCi0gICAgICAgIGlmIChlbmQgIT0gbV9vZmZzZXQpCisgICAg
ICAgIGlmIChlbmQgIT0gbV9vZmZzZXQpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUg
ZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
OTE5CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJwYXJzaW5nIGVuZGVkIGJlZm9yZSB0
aGUgZW5kIG9mIHRoZSBzZWN0aW9uIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogCiAgICAgICAgIHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgfQogCiAgICAg
Ly8gVE9ETworICAgIG1fZmFpbGVkID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCA1NDBk
NWE2Li5mZTlkYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oCkBAIC0zOSwxNSArMzksMzMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1hZ2ljTnVtYmVyID0gMHhjOwogCisgICAgTW9kdWxlUGFyc2VyKGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKKyAgICAgICAgOiBQYXJz
ZXIoc291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCisgICAgeworICAgIH0KICAgICBNb2R1bGVQ
YXJzZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIpCi0gICAgICAgIDogUGFy
c2VyKHNvdXJjZUJ1ZmZlciwgMCwgc291cmNlQnVmZmVyLnNpemUoKSkKKyAgICAgICAgOiBQYXJz
ZXIoc291cmNlQnVmZmVyLmRhdGEoKSwgc291cmNlQnVmZmVyLnNpemUoKSkKICAgICB7CiAgICAg
fQogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKKyAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQorICAgIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGZhaWxlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOworICAgIH0K
IAotICAgIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25JbmZvcm1h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PE1lbW9yeT4mIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5OyB9CisgICAgY29uc3QgVmVjdG9y
PEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbkluZm9ybWF0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIHJldHVybiBtX2Z1
bmN0aW9uczsKKyAgICB9CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4mIG1lbW9yeSgpCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICByZXR1cm4g
bV9tZW1vcnk7CisgICAgfQogCiBwcml2YXRlOgogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlTWVtb3J5KCk7CkBAIC01OSw2ICs3Nyw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEZ1
bmN0aW9uSW5mb3JtYXRpb24+IG1fZnVuY3Rpb25zOwogICAgIFZlY3RvcjxTaWduYXR1cmU+IG1f
c2lnbmF0dXJlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX21lbW9yeTsKKyAgICBi
b29sIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBh
cnNlci5oCmluZGV4IDc0ODEzNGQuLjQ2YTdiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFyc2VyLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKIAogY2xhc3MgUGFyc2VyIHsKIHByb3RlY3RlZDoKLSAgICBQYXJzZXIoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+Jiwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKTsKKyAgICBQYXJzZXIo
Y29uc3QgdWludDhfdCosIHNpemVfdCk7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBj
b25zdW1lQ2hhcmFjdGVyKGNoYXIpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1
bWVTdHJpbmcoY29uc3QgY2hhciopOwpAQCAtNDYsMzEgKzQ2LDMyIEBAIHByb3RlY3RlZDoKICAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCk7
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQp
OwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDMyKHVpbnQzMl90JiByZXN1
bHQpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDMyKHVpbnQzMl90
JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDMyKG1fc291cmNl
LmRhdGEoKSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9Ci0gICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50NjQodWludDY0X3QmIHJlc3VsdCkgeyByZXR1
cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50NjQobV9zb3VyY2UuZGF0YSgpLCBtX3NvdXJj
ZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7IH0KLQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlVmFyVUludDMyKHVpbnQzMl90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVj
b2Rlcjo6ZGVjb2RlVUludDMyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJl
c3VsdCk7IH0KKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQ2NCh1aW50
NjRfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQ2NChtX3Nv
dXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9CiAKICAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhbHVlVHlwZShUeXBlJiByZXN1bHQpOwogCi0gICAgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBtX3NvdXJjZTsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZUxlbmd0aDsgfQorCisgICAgc2l6ZV90IG1fb2Zmc2V0ID0gMDsKKwor
cHJpdmF0ZToKKyAgICBjb25zdCB1aW50OF90KiBtX3NvdXJjZTsKICAgICBzaXplX3QgbV9zb3Vy
Y2VMZW5ndGg7Ci0gICAgc2l6ZV90IG1fb2Zmc2V0OwogfTsKIAotQUxXQVlTX0lOTElORSBQYXJz
ZXI6OlBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHN0
YXJ0LCBzaXplX3QgZW5kKQorQUxXQVlTX0lOTElORSBQYXJzZXI6OlBhcnNlcihjb25zdCB1aW50
OF90KiBzb3VyY2VCdWZmZXIsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiAgICAgOiBtX3NvdXJjZShz
b3VyY2VCdWZmZXIpCi0gICAgLCBtX3NvdXJjZUxlbmd0aChlbmQpCi0gICAgLCBtX29mZnNldChz
dGFydCkKKyAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKIHsKLSAgICBBU1NFUlQo
ZW5kIDw9IHNvdXJjZUJ1ZmZlci5zaXplKCkpOwotICAgIEFTU0VSVChzdGFydCA8IGVuZCk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIoY2hhciBjKQog
ewotICAgIGlmIChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICBpZiAobV9vZmZzZXQg
Pj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYyA9PSBtX3NvdXJj
ZVttX29mZnNldF0pIHsKKyAgICBpZiAoYyA9PSBzb3VyY2UoKVttX29mZnNldF0pIHsKICAgICAg
ICAgbV9vZmZzZXQrKzsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtODAsOSArODEs
OSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lQ2hhcmFjdGVyKGNoYXIgYykK
IEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciogc3Ry
KQogewogICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9vZmZzZXQ7Ci0gICAgaWYgKG1fb2Zmc2V0ID49
IG1fc291cmNlTGVuZ3RoKQorICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHN0cltpXTsgaSsrKSB7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IHN0cltpXTsgaSsrKSB7CiAgICAgICAgIGlmICghY29uc3Vt
ZUNoYXJhY3RlcihzdHJbaV0pKSB7CiAgICAgICAgICAgICBtX29mZnNldCA9IHN0YXJ0OwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTMsMTggKzk0LDE4IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI6OmNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciogc3RyKQogCiBBTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogewotICAgIGlm
IChtX3NvdXJjZUxlbmd0aCA8IDQgfHwgbV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGggLSA0KQor
ICAgIGlmIChsZW5ndGgoKSA8IDQgfHwgbV9vZmZzZXQgPiBsZW5ndGgoKSAtIDQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KG1fc291cmNlLmRhdGEoKSArIG1fb2Zmc2V0KTsKKyAgICByZXN1bHQgPSAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNvdXJjZSgpICsgbV9vZmZzZXQpOwogICAgIG1f
b2Zmc2V0ICs9IDQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI6OnBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KQogewotICAgIGlmIChtX29mZnNldCA+
PSBtX3NvdXJjZUxlbmd0aCkKKyAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBtX3NvdXJjZVttX29mZnNldCsrXTsKKyAgICBy
ZXN1bHQgPSBzb3VyY2UoKVttX29mZnNldCsrXTsKICAgICByZXR1cm4gcmVzdWx0IDwgMHg4MDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IGJhMGZhM2Yu
LmY5YzhhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTM3
LDE0ICszNywyMCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCisgICAgCiBQbGFuOjpQbGFuKFZNJiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKKyAgICA6IFBsYW4odm0sIHNvdXJjZS5kYXRhKCksIHNv
dXJjZS5zaXplKCkpCit7Cit9CisKK1BsYW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90KiBz
b3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2dMbigiU3RhcnRpbmcgcGxhbi4iKTsKLSAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFy
c2VyKHNvdXJjZSk7CisgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihzb3VyY2UsIHNvdXJj
ZUxlbmd0aCk7CiAgICAgaWYgKCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgewotICAgICAgICBkYXRh
TG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZC4iKTsKKyAgICAgICAgZGF0YUxvZ0xuKCJQYXJz
aW5nIG1vZHVsZSBmYWlsZWQ6ICIsIG1vZHVsZVBhcnNlci5lcnJvck1lc3NhZ2UoKSk7CisgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gbW9kdWxlUGFyc2VyLmVycm9yTWVzc2FnZSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC01NCwxOSArNjAsMjUgQEAgUGxhbjo6UGxhbihWTSYgdm0s
IFZlY3Rvcjx1aW50OF90PiBzb3VyY2UpCiAgICAgZm9yIChjb25zdCBGdW5jdGlvbkluZm9ybWF0
aW9uJiBpbmZvIDogbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkgewogICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jaW9u
IHN0YXJ0aW5nIGF0OiAiLCBpbmZvLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8uZW5k
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwYXJzZUFuZENvbXBpbGUodm0sIHNvdXJjZSwgbW9k
dWxlUGFyc2VyLm1lbW9yeSgpLmdldCgpLCBpbmZvLCBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZv
cm1hdGlvbigpKSk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBzb3Vy
Y2UgKyBpbmZvLnN0YXJ0OworICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBpbmZvLmVu
ZCAtIGluZm8uc3RhcnQ7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBzb3VyY2VM
ZW5ndGgpOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQocGFyc2VBbmRDb21waWxlKHZtLCBmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbW9kdWxlUGFyc2VyLm1lbW9yeSgpLmdldCgpLCBp
bmZvLnNpZ25hdHVyZSwgbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkpOwogICAg
IH0KIAogICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgotICAg
IGZvciAoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlvblB0ciA6
IHJlc3VsdCkgeworICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+
JiBmdW5jdGlvblB0ciA6IG1fcmVzdWx0KSB7CiAgICAgICAgIEZ1bmN0aW9uQ29tcGlsYXRpb24q
IGZ1bmN0aW9uID0gZnVuY3Rpb25QdHIuZ2V0KCk7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6
IGZ1bmN0aW9uLT51bmxpbmtlZENhbGxzKQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChyZXN1bHRbY2Fs
bC5mdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKG1f
cmVzdWx0W2NhbGwuZnVuY3Rpb25JbmRleF0tPmNvZGUtPmNvZGUoKSkpOwogICAgIH0KIAotICAg
IG1lbW9yeSA9IFdURk1vdmUobW9kdWxlUGFyc2VyLm1lbW9yeSgpKTsKKyAgICBtX21lbW9yeSA9
IFdURk1vdmUobW9kdWxlUGFyc2VyLm1lbW9yeSgpKTsKKyAgICBtX2ZhaWxlZCA9IGZhbHNlOwog
fQogCitQbGFuOjp+UGxhbigpIHsgfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmgKaW5kZXggZmVkMTM2YS4uZDYxNWM2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5oCkBAIC0zNiwxMyArMzYsMzkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiBjbGFzcyBNZW1vcnk7CiAKLS8vIFRPRE86IFRoaXMgc2hvdWxkIGNyZWF0ZSBhIFdh
c20gTW9kdWxlIG5vdCBhIGxpc3Qgb2YgZnVuY3Rpb25zLgogY2xhc3MgUGxhbiB7CiBwdWJsaWM6
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90PiBzb3VyY2Up
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4pOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvbXBpbGF0aW9uPj4gcmVzdWx0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1v
cnk+IG1lbW9yeTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7
IHJldHVybiBtX2ZhaWxlZDsgfQorICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhaWxlZCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fZXJyb3JNZXNzYWdlOworICAgIH0KKyAgICBzaXplX3QgcmVzdWx0U2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICByZXR1
cm4gbV9yZXN1bHQuc2l6ZSgpOworICAgIH0KKyAgICBjb25zdCBGdW5jdGlvbkNvbXBpbGF0aW9u
KiByZXN1bHQoc2l6ZV90IG4pIGNvbnN0CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZmFpbGVkKCkpOworICAgICAgICByZXR1cm4gbV9yZXN1bHQuYXQobikuZ2V0KCk7CisgICAgfQor
ICAgIGNvbnN0IE1lbW9yeSogbWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIHJldHVybiBtX21lbW9yeS5nZXQoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0
aW9uPj4gbV9yZXN1bHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbV9tZW1vcnk7Cisg
ICAgYm9vbCBtX2ZhaWxlZCA9IHRydWU7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAKaW5kZXgg
MDJmZjg4NS4uM2JmNTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAKQEAgLTQ3LDYgKzQ3LDE0
IEBAIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Io
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyCiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Db21waWxlRXJyb3IiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IpIH07CiAKKyAgICAKK0pTT2JqZWN0KiBjcmVhdGVXZWJBc3NlbWJseUNvbXBpbGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQo
IW1lc3NhZ2UuaXNFbXB0eSgpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5
Q29tcGlsZUVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwg
VHlwZU5vdGhpbmcsIHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaAppbmRleCA2NTZiOGQwLi5jMTRh
Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oCkBAIC00Nyw2ICs0Nyw4IEBAIHByb3RlY3RlZDoKICAg
ICBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKFZNJiwgU3RydWN0dXJlKik7CiB9OwogCitKU09i
amVjdCogY3JlYXRlV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAppbmRleCA2N2U2ZDk1
Li5jMDAxNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcApAQCAt
NjEsMTAgKzYxLDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKEV4ZWNTdGF0ZSogc3RhCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciIpKTsKIH0KIAotV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHRoaXNT
dHJ1Y3R1cmUpCitXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKiBXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCiB7
CiAgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICBjb25zdHJ1Y3Rvci0+Zmlu
aXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUsIHRoaXNTdHJ1Y3R1cmUpOworICAgIGNvbnN0
cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CiAgICAgcmV0dXJuIGNv
bnN0cnVjdG9yOwogfQogCkBAIC03Myw3ICs3Myw3IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12
b2lkIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSwgU3RydWN0
dXJlKikKK3ZvaWQgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZSogcHJvdG90eXBl
KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBBU0NJSUxpdGVyYWwoIkNvbXBpbGVF
cnJvciIpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaAppbmRleCBkNDg1NmM5Li4z
NGEwZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oCkBAIC0zOSwxMyAr
MzksMTMgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAotICAgIHN0YXRpYyBXZWJBc3NlbWJseUNv
bXBpbGVFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJs
eUNvbXBpbGVFcnJvclByb3RvdHlwZSosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJB
c3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNM
QVJFX0lORk87CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUqKTsKIAog
cHJpdmF0ZToKICAgICBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKFZNJiwgU3Ry
dWN0dXJlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCA4NWNlOWFhLi41
NWJmNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTU3LDEwICs1Nywx
MCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJs
eUluc3RhbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgIldlYkFzc2VtYmx5Lkluc3RhbmNlIikpOwogfQogCi1XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUqIHRo
aXNQcm90b3R5cGUsIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSkKK1dlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZSog
dGhpc1Byb3RvdHlwZSkKIHsKICAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFdl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICBjb25zdHJ1
Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUsIHRoaXNTdHJ1Y3R1cmUpOwor
ICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CiAgICAg
cmV0dXJuIGNvbnN0cnVjdG9yOwogfQogCkBAIC02OSwxMiArNjksMTEgQEAgU3RydWN0dXJlKiBX
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUqIHByb3RvdHlwZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit2b2lkIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlKiBwcm90
b3R5cGUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIEFTQ0lJTGl0ZXJhbCgiSW5z
dGFuY2UiKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRl
KTsKLSAgICBtX0luc3RhbmNlU3RydWN0dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKIH0K
IAogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yOjpXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTk5LDcgKzk4LDYgQEAg
dm9pZCBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmkKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X0luc3RhbmNlU3RydWN0dXJlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3Rvci5oCmluZGV4IGRkZGRmNzEuLjJlODU3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5oCkBAIC0zOSwyMyArMzksMTkgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50
ZXJuYWxGdW5jdGlvbiBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAot
ICAgIHN0YXRpYyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUqLCBTdHJ1Y3R1cmUqKTsKKyAg
ICBzdGF0aWMgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqLCBXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlKik7CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAog
ICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFN0cnVjdHVyZSogSW5zdGFuY2VTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX0luc3RhbmNlU3RydWN0dXJlLmdldCgpOyB9Ci0KIHByb3RlY3RlZDoK
LSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlw
ZSosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJs
eUluc3RhbmNlUHJvdG90eXBlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9JbnN0YW5jZVN0cnVjdHVyZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRleCBhZDUyNWNmLi4xYzU4MmI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtNTcsMTAgKzU3LDEwIEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0
ZSogc3RhdGUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fu
bm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5
Lk1lbW9yeSIpKTsKIH0KIAotV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3RvciogV2ViQXNzZW1i
bHlNZW1vcnlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHRo
aXNTdHJ1Y3R1cmUpCitXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCiB7CiAgICAgYXV0byogY29u
c3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcih2bSwgc3Ry
dWN0dXJlKTsKLSAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5
cGUsIHRoaXNTdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwg
dGhpc1Byb3RvdHlwZSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogfQogCkBAIC02OSwxMiAr
NjksMTEgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlNZW1vcnlDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlw
ZSogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3ZvaWQgV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZSogcHJvdG90eXBlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBBU0NJ
SUxpdGVyYWwoIk1lbW9yeSIpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8
IERvbnREZWxldGUpOwotICAgIG1fTWVtb3J5U3RydWN0dXJlLnNldCh2bSwgdGhpcywgc3RydWN0
dXJlKTsKIH0KIAogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtOTksNyArOTgs
NiBAQCB2b2lkIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaQogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX01lbW9yeVN0cnVjdHVyZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlD
b25zdHJ1Y3Rvci5oCmluZGV4IDM0Y2QxMjAuLjQ2NjA2OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmgKQEAgLTM5LDIzICszOSwxOSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1
bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCi0gICAgc3Rh
dGljIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSos
IFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFdl
YkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5G
TzsKIAotICAgIFN0cnVjdHVyZSogTWVtb3J5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9N
ZW1vcnlTdHJ1Y3R1cmUuZ2V0KCk7IH0KLQogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSosIFN0cnVjdHVyZSopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSopOwog
CiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1
cmUqKTsKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCos
IENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxs
KiwgQ2FsbERhdGEmKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0KLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX01lbW9yeVN0cnVj
dHVyZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNw
cAppbmRleCBlOTdiMDExLi4xZDlmOTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApA
QCAtMjgsOCArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUg
IkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Iu
aCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVBsYW4u
aCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oIgogCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5sdXQuaCIKQEAgLTQ1LDkgKzUxLDMyIEBAIGNv
bnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJG
dW5jdGlvbiIsICZCYXNlOjpzX2luCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUs
IEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSBNb2R1
bGUgY29uc3RydWN0b3IgcHJvcGVydHkiKSkpKTsKKyAgICBKU1ZhbHVlIHZhbCA9IHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPyBzdGF0ZS0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgpOworICAg
IEpTT2JqZWN0KiBvYmogPSB2YWwuZ2V0T2JqZWN0KCk7CisgICAgSlNBcnJheUJ1ZmZlciogYXJy
YXlCdWZmZXIgPSBvYmogPyBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmopIDogbnVs
bHB0cjsKKyAgICBKU0FycmF5QnVmZmVyVmlldyogYXJyYXlCdWZmZXJWaWV3ID0gb2JqID8ganNE
eW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iaikgOiBudWxscHRyOworICAgIGlmICgh
KGFycmF5QnVmZmVyIHx8IGFycmF5QnVmZmVyVmlldykpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3Rh
dGUsIEFTQ0lJTGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuTW9kdWxlIG11
c3QgYmUgYW4gQXJyYXlCdWZmZXJWaWV3IG9yIGFuIEFycmF5QnVmZmVyIiksIGRlZmF1bHRTb3Vy
Y2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2YWwpKSkpOworICAgIAorICAgIGJvb2wg
aXNOZXV0ZXJlZCA9IGFycmF5QnVmZmVyVmlldyA/IGFycmF5QnVmZmVyVmlldy0+aXNOZXV0ZXJl
ZCgpIDogYXJyYXlCdWZmZXItPmltcGwoKS0+aXNOZXV0ZXJlZCgpOworICAgIGlmIChpc05ldXRl
cmVkKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRl
LCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoInVuZGVybHlpbmcg
VHlwZWRBcnJheSBoYXMgYmVlbiBkZXRhdGNoZWQgZnJvbSB0aGUgQXJyYXlCdWZmZXIiKSwgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZhbCkpKSk7CisKKyAgICBz
aXplX3QgYnl0ZU9mZnNldCA9IGFycmF5QnVmZmVyVmlldyA/IGFycmF5QnVmZmVyVmlldy0+Ynl0
ZU9mZnNldCgpIDogMDsKKyAgICBzaXplX3QgYnl0ZVNpemUgPSBhcnJheUJ1ZmZlclZpZXcgPyBh
cnJheUJ1ZmZlclZpZXctPmxlbmd0aCgpIDogYXJyYXlCdWZmZXItPmltcGwoKS0+Ynl0ZUxlbmd0
aCgpOworICAgIGNvbnN0IGF1dG8qIGJhc2UgPSBhcnJheUJ1ZmZlclZpZXcgPyBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oYXJyYXlCdWZmZXJWaWV3LT52ZWN0b3IoKSkgOiBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oYXJyYXlCdWZmZXItPmltcGwoKS0+ZGF0YSgpKTsKKworICAgIFdhc206OlBsYW4gcGxh
bih2bSwgYmFzZSArIGJ5dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICBpZiAocGxhbi5mYWlsZWQo
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwg
c2NvcGUsIGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yKHN0YXRlLCBwbGFuLmVycm9yTWVz
c2FnZSgpKSkpOworCisgICAgLy8gRklYTUUgdGFrZSBjb250ZW50IGZyb20gUGxhbi4KKworICAg
IGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGFzSW50ZXJuYWxGdW5jdGlvbihzdGF0ZS0+
Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0
cnVjdHVyZSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQpAQCAtNTcsMTAgKzg2LDEwIEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TW9k
dWxlKEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0Nv
bnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
IldlYkFzc2VtYmx5Lk1vZHVsZSIpKTsKIH0KIAotV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
ciogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlLCBT
dHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1cmUpCitXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCiB7CiAg
ICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0s
IHRoaXNQcm90b3R5cGUsIHRoaXNTdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hD
cmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogfQog
CkBAIC02OSwxMiArOTgsMTEgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseU1v
ZHVsZVByb3RvdHlwZSogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3ZvaWQgV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3Nl
bWJseU1vZHVsZVByb3RvdHlwZSogcHJvdG90eXBlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtLCBBU0NJSUxpdGVyYWwoIk1vZHVsZSIpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkg
fCBEb250RW51bSB8IERvbnREZWxldGUpOwotICAgIG1fTW9kdWxlU3RydWN0dXJlLnNldCh2bSwg
dGhpcywgc3RydWN0dXJlKTsKIH0KIAogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6V2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpA
QCAtOTksNyArMTI3LDYgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2kKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9Nb2R1bGVTdHJ1Y3R1cmUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaAppbmRleCA1NjA1N2E2Li5lNDVmMWExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvci5oCkBAIC0zOSwyMyArMzksMTkgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJs
ZTsKIAotICAgIHN0YXRpYyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBjcmVhdGUoVk0m
LCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSosIFN0cnVjdHVyZSopOwor
ICAgIHN0YXRpYyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAg
ICBERUNMQVJFX0lORk87CiAKLSAgICBTdHJ1Y3R1cmUqIE1vZHVsZVN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fTW9kdWxlU3RydWN0dXJlLmdldCgpOyB9Ci0KIHByb3RlY3RlZDoKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqLCBTdHJ1
Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlNb2R1bGVQ
cm90b3R5cGUqKTsKIAogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
KFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENh
bGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9Nb2R1bGVTdHJ1Y3R1cmU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNTUyODAyMi4uMDFiMzJmNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHAKQEAgLTYxLDEwICs2MSwxMCBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvcihFeGVjU3RhdGUqIHN0YQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dD
b25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
ICJXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IiKSk7CiB9CiAKLVdlYkFzc2VtYmx5UnVudGltZUVy
cm9yQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclBy
b3RvdHlwZSogdGhpc1Byb3RvdHlwZSwgU3RydWN0dXJlKiB0aGlzU3RydWN0dXJlKQorV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5
UnVudGltZUVycm9yUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQogewogICAgIGF1dG8qIGNvbnN0
cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0
b3Iodm0sIHN0cnVjdHVyZSk7Ci0gICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0
aGlzUHJvdG90eXBlLCB0aGlzU3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3Jl
YXRpb24odm0sIHRoaXNQcm90b3R5cGUpOwogICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKIH0KIApA
QCAtNzMsNyArNzMsNyBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsTwogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5
UnVudGltZUVycm9yUHJvdG90eXBlKiBwcm90b3R5cGUsIFN0cnVjdHVyZSopCit2b2lkIFdlYkFz
c2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSwgQVNDSUlMaXRlcmFsKCJSdW50aW1lRXJyb3IiKSk7CiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
cHJvdG90eXBlLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNv
bnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1
bnRpbWVFcnJvckNvbnN0cnVjdG9yLmgKaW5kZXggYmU0MTlkNy4uNzdmYjZlNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JD
b25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaApAQCAtMzksMTMgKzM5LDEzIEBAIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1By
b3BlcnR5VGFibGU7CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1
Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90
b3R5cGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JD
b25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JQcm90b3R5cGUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCiBwcm90
ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlKiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlKik7CiAKIHByaXZhdGU6CiAgICAgV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNGI2NjA4Yy4uY2FhN2U5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IuY3BwCkBAIC01NywxMCArNTcsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIHN0YXRlKQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5UYWJsZSIpKTsKIH0K
IAotV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0
b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1cmUpCitXZWJB
c3NlbWJseVRhYmxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5
cGUqIHRoaXNQcm90b3R5cGUpCiB7CiAgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBX
ZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7Ci0gICAgY29uc3RydWN0
b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90eXBlLCB0aGlzU3RydWN0dXJlKTsKKyAg
ICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOwogICAgIHJl
dHVybiBjb25zdHJ1Y3RvcjsKIH0KIApAQCAtNjksMTIgKzY5LDExIEBAIFN0cnVjdHVyZSogV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCoKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit2b2lkIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKiBwcm90b3R5cGUpCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIEFTQ0lJTGl0ZXJhbCgiVGFibGUiKSk7CiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
cHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICBtX1RhYmxlU3Ry
dWN0dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKIH0KIAogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yOjpXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKQEAgLTk5LDcgKzk4LDYgQEAgdm9pZCBXZWJBc3NlbWJseVRhYmxlQ29uc3Ry
dWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXQKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX1RhYmxlU3RydWN0dXJlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oCmluZGV4IGUwOGU3MzUuLmE2MWM3YWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oCkBAIC0zOSwyMyArMzksMTkgQEAgcHVibGljOgogICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVy
dHlUYWJsZTsKIAotICAgIHN0YXRpYyBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqLCBTdHJ1Y3R1cmUq
KTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqLCBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKik7CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAog
ICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFN0cnVjdHVyZSogVGFibGVTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX1RhYmxlU3RydWN0dXJlLmdldCgpOyB9Ci0KIHByb3RlY3RlZDoKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSosIFN0cnVj
dHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseVRhYmxlUHJv
dG90eXBlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yKFZN
JiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9U
YWJsZVN0cnVjdHVyZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotLSAKMi4xMC4xCgo=
</data>
<flag name="review"
          id="315705"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="315706"
          type_id="3"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292761</attachid>
            <date>2016-10-25 09:16:55 -0700</date>
            <delta_ts>2016-10-25 09:21:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-Module.patch</filename>
            <type>text/plain</type>
            <size>99871</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA5Njg0ZTlkMGI1ZWUyOGRmMjRkYzYyODUxMGE2NmI1YjA1YjQ4YTg0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDI0IE9jdCAyMDE2IDExOjEwOjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgTW9kdWxlCgpUaGlzIGltcGxlbWVudGF0aW9uIGFsbG93
cyB1cyB0bzoKIC0gU3luY3Job25vdXNseSBjcmVhdGUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgd2l0
aCBhIHR5cGVkIGFycmF5LgogLSBDcmVhdGVzIGEgY29tcGlsYXRpb24gcGxhbi4KIC0gUGFyc2Ug
dGhlIE1vZHVsZSBhbmQgY3JlYXRlcyBjb3JyZXNwb25kaW5nIGNvZGUuCiAtIFRocm93IFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciB3aXRoIG1pbGRseSBoZWxwZnVsIFsqXSBlcnJvciBtZXNzYWdl
cyBvbgogICBmYWlsdXJlLgoKQ29uc3VsdCB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGV4cGVj
dGVkIGJlaGF2aW9yOiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2Iv
bWFzdGVyL0pTLm1kI3dlYmFzc2VtYmx5bW9kdWxlLWNvbnN0cnVjdG9yCgpGb3Igbm93IHRoZSBp
bXBsZW1lbnRhdGlvbiBkaXNjYXJkcyB0aGUgZ2VuZXJhdGVkIGNvZGUuCgpUaGUgbmV4dCBzdGVw
cyB3aWxsIGJlOgogLSBFeHBvc2UgYSBNb2R1bGUncyBleHBvcnRzLgogLSBJbXBsZW1lbnQgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UsIHdoaWNoIGFsbG93cyBpbnN0YW50aWF0aW5nIGFuZCBydW5uaW5n
IGEKICAgY29tcGlsZWQgTW9kdWxlLgogLSBCZWVmIHVwIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0
dXJlIHVuZGVyIEpTVGVzdHMvd2FzbSBzbyB0aGF0IG1vcmUgY29tcGxleAogICBtb2R1bGVzIGNh
biBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgKGluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYml0cyBieSBo
YW5kKS4KClRoaXMgcGF0Y2ggYWxzbzoKIC0gQWRkcyBhc3NlcnQuaW5zdGFuY2VvZiBpbiBhc3Nl
cnQuanMuCiAtIFJlZmFjdG9ycyBXYXNtOjpQYXJzZXIgYW5kIGZyaWVuZHMgdG8gYWNjZXB0IGNv
bnN0IHVpbnQ4X3QqIGFzIHdlbGwgYXMgYQogICBWZWN0b3IsIHRvIGF2b2lkIGNvcHlpbmcgd2hl
biBpbnZva2VkIHN5bmNocm9ub3VzbHkuCiAtIFJlbW92ZSB1c2VsZXNzIFN0cnVjdHVyZSBmcm9t
IHNvbWUgb2YgdGhlIHdhc20gY29uc3RydWN0b3JzOiB0aGV5J3JlIGFscmVhZHkKICAgb24gdGhl
IEpTR2xvYmFsT2JqZWN0LCB2aXNpdGVkIHByb3Blcmx5IGFuZCBhbGwuCiAtIEZpeCBvZmYtYnkt
b25lIGVycm9yIGluIHBhcnNpbmc6IFBhcnNlcjo6cGFyc2VVSW50MzIgZmFpbGVkIGlmIHRoZSBp
bnRlZ2VyCiAgIHdhcyBleGFjdGx5IGF0IGVuZCBvZiBmaWxlLgoKIFsqXSBPbiBlcnJvciBtZXNz
YWdlcyB3aGlsZSBwYXJzaW5nOiBJIGZpbGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM5MTkKLS0tCiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICA0NyArKysrCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAyNiArLQogSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X2Jhc2ljX2FwaS5qcyAgICAgICAgICAgICAgfCAgNDggKysrLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAxMTEgKysrKysrKysKIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwIHwgICAyICstCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmggICB8ICAgMiArCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgICB8ICAgMiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcCAgICAgICAgICAgICAgICAgfCAy
OTQgKysrKysrKysrKy0tLS0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaCAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oICAgIHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8ICA3NCArKysrLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCAgICAgIHwgIDI2ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggICAgICAgICAgICB8ICAzOSArLS0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCAgICAgICAgICAgIHwgIDI2ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oICAgICAgICAgICAgICB8ICAz
NCArKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwICAgICAgICAg
IHwgICA4ICsKIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCAgICAgICAg
ICAgIHwgICAyICsKIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0
b3IuY3BwIHwgICA4ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0
cnVjdG9yLmggICB8ICAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcCAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5oICAgICAgIHwgICA4ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgOCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5oICAgICAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuY3BwICAgICAgIHwgIDM5ICsrLQogLi4uL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pz
L1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwIHwgICA2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmggICB8ICAgNCArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCAgICAgICAgfCAgIDggKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oICAgICAgICAgIHwgICA4
ICstCiAzMCBmaWxlcyBjaGFuZ2VkLCA1OTQgaW5zZXJ0aW9ucygrKSwgMjg4IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggYWQ2MDAzMS4uMGI3MTIxMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxNi0xMC0yNCAgSkYgQmFzdGll
biAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBp
bXBsZW1lbnQgTW9kdWxlCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdXMg
dG86CisgICAgICAgICAtIFN5bmNyaG9ub3VzbHkgY3JlYXRlIGEgV2ViQXNzZW1ibHkuTW9kdWxl
IHdpdGggYSB0eXBlZCBhcnJheS4KKyAgICAgICAgIC0gQ3JlYXRlcyBhIGNvbXBpbGF0aW9uIHBs
YW4uCisgICAgICAgICAtIFBhcnNlIHRoZSBNb2R1bGUgYW5kIGNyZWF0ZXMgY29ycmVzcG9uZGlu
ZyBjb2RlLgorICAgICAgICAgLSBUaHJvdyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Igd2l0aCBt
aWxkbHkgaGVscGZ1bCBbKl0gZXJyb3IgbWVzc2FnZXMgb24KKyAgICAgICAgICAgZmFpbHVyZS4K
KworICAgICAgICBDb25zdWx0IHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZXhwZWN0ZWQgYmVo
YXZpb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNpZ24vYmxvYi9tYXN0ZXIv
SlMubWQjd2ViYXNzZW1ibHltb2R1bGUtY29uc3RydWN0b3IKKworICAgICAgICBGb3Igbm93IHRo
ZSBpbXBsZW1lbnRhdGlvbiBkaXNjYXJkcyB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAg
VGhlIG5leHQgc3RlcHMgd2lsbCBiZToKKyAgICAgICAgIC0gRXhwb3NlIGEgTW9kdWxlJ3MgZXhw
b3J0cy4KKyAgICAgICAgIC0gSW1wbGVtZW50IFdlYkFzc2VtYmx5Lkluc3RhbmNlLCB3aGljaCBh
bGxvd3MgaW5zdGFudGlhdGluZyBhbmQgcnVubmluZyBhCisgICAgICAgICAgIGNvbXBpbGVkIE1v
ZHVsZS4KKyAgICAgICAgIC0gQmVlZiB1cCB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSB1bmRl
ciBKU1Rlc3RzL3dhc20gc28gdGhhdCBtb3JlIGNvbXBsZXgKKyAgICAgICAgICAgbW9kdWxlcyBj
YW4gYmUgY3JlYXRlZCBhbmQgdGVzdGVkIChpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGJpdHMgYnkg
aGFuZCkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvOgorICAgICAgICAgLSBBZGRzIGFzc2Vy
dC5pbnN0YW5jZW9mIGluIGFzc2VydC5qcy4KKyAgICAgICAgIC0gUmVmYWN0b3JzIFdhc206OlBh
cnNlciBhbmQgZnJpZW5kcyB0byBhY2NlcHQgY29uc3QgdWludDhfdCogYXMgd2VsbCBhcyBhCisg
ICAgICAgICAgIFZlY3RvciwgdG8gYXZvaWQgY29weWluZyB3aGVuIGludm9rZWQgc3luY2hyb25v
dXNseS4KKyAgICAgICAgIC0gUmVtb3ZlIHVzZWxlc3MgU3RydWN0dXJlIGZyb20gc29tZSBvZiB0
aGUgd2FzbSBjb25zdHJ1Y3RvcnM6IHRoZXkncmUgYWxyZWFkeQorICAgICAgICAgICBvbiB0aGUg
SlNHbG9iYWxPYmplY3QsIHZpc2l0ZWQgcHJvcGVybHkgYW5kIGFsbC4KKyAgICAgICAgIC0gRml4
IG9mZi1ieS1vbmUgZXJyb3IgaW4gcGFyc2luZzogUGFyc2VyOjpwYXJzZVVJbnQzMiBmYWlsZWQg
aWYgdGhlIGludGVnZXIKKyAgICAgICAgICAgd2FzIGV4YWN0bHkgYXQgZW5kIG9mIGZpbGUuCisK
KyAgICAgICAgIFsqXSBPbiBlcnJvciBtZXNzYWdlcyB3aGlsZSBwYXJzaW5nOiBJIGZpbGVkIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKworICAgICAgICBX
ZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBNb2R1bGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkwMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9hc3NlcnQuanM6IHVzZSB1bmRlcnNj
b3JlIGluIG5hbWUsIGFuZCByZW1vdmUgd2hlbiBleHBvcnRpbmcgdG8gYXZvaWQgY2xhc2luZyB3
aXRoIGJ1aWx0aW4gbmFtZXMKKyAgICAgICAgKGNvbnN0Ll9ub3RVbmRlZik6CisgICAgICAgIChj
b25zdC5faXNVbmRlZik6CisgICAgICAgIChjb25zdC5fZXEpOgorICAgICAgICAoY29uc3QuX2dl
KToKKyAgICAgICAgKGNvbnN0Ll90aHJvd3MpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3Rf
YmFzaWNfYXBpLmpzOiB0ZXN0IHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgQVBJCisgICAgICAgIChj
b25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gpOgorCiAyMDE2LTEwLTI0ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdhc20gc2hv
dWxkIHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucy4KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9hc3NlcnQuanMgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCmluZGV4IDVjNzFjYzQu
LjJlYTVmNzAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKKysrIGIvSlNUZXN0
cy93YXNtL2Fzc2VydC5qcwpAQCAtMjMsMjkgKzIzLDI5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLWV4cG9ydCBjb25zdCBub3RVbmRlZiA9ICh2KSA9PiB7Citjb25zdCBfbm90VW5kZWYgPSAo
dikgPT4gewogICAgIGlmICh0eXBlb2YgdiA9PT0gInVuZGVmaW5lZCIpCiAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiU2hvdWxkbid0IGJlIHVuZGVmaW5lZCIpOwogfTsKIAotZXhwb3J0IGNvbnN0
IGlzVW5kZWYgPSAodikgPT4geworY29uc3QgX2lzVW5kZWYgPSAodikgPT4gewogICAgIGlmICh0
eXBlb2YgdiAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU2hvdWxk
IGJlIHVuZGVmaW5lZCIpOwogfTsKIAotZXhwb3J0IGNvbnN0IGVxID0gKGxocywgcmhzKSA9PiB7
Citjb25zdCBfZXEgPSAobGhzLCByaHMpID0+IHsKICAgICBpZiAobGhzICE9PSByaHMpCiAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgTm90IHRoZSBzYW1lOiAiJHtsaHN9IiBhbmQgIiR7cmhzfSJg
KTsKIH07CiAKLWV4cG9ydCBjb25zdCBnZSA9IChsaHMsIHJocykgPT4gewotICAgIG5vdFVuZGVm
KGxocyk7Ci0gICAgbm90VW5kZWYocmhzKTsKK2NvbnN0IF9nZSA9IChsaHMsIHJocykgPT4gewor
ICAgIF9ub3RVbmRlZihsaHMpOworICAgIF9ub3RVbmRlZihyaHMpOwogICAgIGlmICghKGxocyA+
PSByaHMpKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkOiAiJHtsaHN9IiA8ICIk
e3Joc30iYCk7CiB9OwogCi1leHBvcnQgY29uc3QgdGhyb3dzID0gKGZ1bmMsIHR5cGUsIG1lc3Nh
Z2UsIC4uLmFyZ3MpID0+IHsKK2NvbnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwg
Li4uYXJncykgPT4gewogICAgIHRyeSB7CiAgICAgICAgIGZ1bmMoLi4uYXJncyk7CiAgICAgfSBj
YXRjaCAoZSkgewpAQCAtNTUsMyArNTUsMTUgQEAgZXhwb3J0IGNvbnN0IHRocm93cyA9IChmdW5j
LCB0eXBlLCBtZXNzYWdlLCAuLi5hcmdzKSA9PiB7CiAgICAgfQogICAgIHRocm93IG5ldyBFcnJv
cihgRXhwZWN0ZWQgdG8gdGhyb3cgYSAke3R5cGUubmFtZX0gd2l0aCBtZXNzYWdlICIke21lc3Nh
Z2V9ImApOwogfTsKKworY29uc3QgX2luc3RhbmNlb2YgPSAob2JqLCB0eXBlKSA9PiBvYmogaW5z
dGFuY2VvZiB0eXBlOworCisvLyBVc2UgdW5kZXJzY29yZSBuYW1lcyB0byBhdm9pZCBjbGFzaGlu
ZyB3aXRoIGJ1aWx0aW4gbmFtZXMuCitleHBvcnQgeworICAgIF9ub3RVbmRlZiBhcyBub3RVbmRl
ZiwKKyAgICBfaXNVbmRlZiBhcyBpc1VuZGVmLAorICAgIF9lcSBhcyBlcSwKKyAgICBfZ2UgYXMg
Z2UsCisgICAgX3Rocm93cyBhcyB0aHJvd3MsCisgICAgX2luc3RhbmNlb2YgYXMgaW5zdGFuY2Vv
ZiwKK307CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpz
IGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCBjNGUxOTI3Li40
ZWU4ODUzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpz
CisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKQEAgLTEsNiArMSw5
IEBACiBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIGltcG9ydCAqIGFz
IHV0aWxpdGllcyBmcm9tICcuLi91dGlsaXRpZXMuanMnOwogCitjb25zdCB2ZXJzaW9uID0gMHhD
OworY29uc3QgZW1wdHlNb2R1bGUgPSBVaW50OEFycmF5Lm9mKDB4MCwgMHg2MSwgMHg3MywgMHg2
ZCwgdmVyc2lvbiwgMHgwMCwgMHgwMCwgMHgwMCk7CisKIGNvbnN0IGNoZWNrT3duUHJvcGVydHlE
ZXNjcmlwdG9yID0gKG9iaiwgcHJvcCwgZXhwZWN0KSA9PiB7CiAgICAgY29uc3QgZGVzY3JpcHRv
ciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTsKICAgICBhc3Nl
cnQuZXEodHlwZW9mIGRlc2NyaXB0b3IudmFsdWUsIGV4cGVjdC50eXBlb2Z2YWx1ZSk7CkBAIC0x
NCwxMiArMTcsMTIgQEAgY29uc3QgZnVuY3Rpb25Qcm9wZXJ0aWVzID0gewogICAgICJjb21waWxl
IjogIHsgbGVuZ3RoOiAxIH0sCiB9OwogY29uc3QgY29uc3RydWN0b3JQcm9wZXJ0aWVzID0gewot
ICAgICJNb2R1bGUiOiAgICAgICB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTog
dHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxLCBp
c0Vycm9yOiBmYWxzZSB9LAotICAgICJJbnN0YW5jZSI6ICAgICB7IHR5cGVvZnZhbHVlOiAiZnVu
Y3Rpb24iLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBm
YWxzZSwgbGVuZ3RoOiAxLCBpc0Vycm9yOiBmYWxzZSB9LAotICAgICJNZW1vcnkiOiAgICAgICB7
IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0
cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxLCBpc0Vycm9yOiBmYWxzZSB9LAotICAg
ICJUYWJsZSI6ICAgICAgICB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTogdHJ1
ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxLCBpc0Vy
cm9yOiBmYWxzZSB9LAotICAgICJDb21waWxlRXJyb3IiOiB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rp
b24iLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxz
ZSwgbGVuZ3RoOiAxLCBpc0Vycm9yOiB0cnVlICB9LAotICAgICJSdW50aW1lRXJyb3IiOiB7IHR5
cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVl
LCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxLCBpc0Vycm9yOiB0cnVlICB9LAorICAgICJN
b2R1bGUiOiAgICAgICB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTogdHJ1ZSwg
Y29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxIH0sCisgICAg
Ikluc3RhbmNlIjogICAgIHsgdHlwZW9mdmFsdWU6ICJmdW5jdGlvbiIsIHdyaXRhYmxlOiB0cnVl
LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCBsZW5ndGg6IDEgfSwKKyAg
ICAiTWVtb3J5IjogICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRy
dWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSB9LAor
ICAgICJUYWJsZSI6ICAgICAgICB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTog
dHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxIH0s
CisgICAgIkNvbXBpbGVFcnJvciI6IHsgdHlwZW9mdmFsdWU6ICJmdW5jdGlvbiIsIHdyaXRhYmxl
OiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCBsZW5ndGg6IDEg
fSwKKyAgICAiUnVudGltZUVycm9yIjogeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFi
bGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDog
MSB9LAogfTsKIAogCkBAIC00NCw3ICs0NywzMCBAQCBmb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0
b3JQcm9wZXJ0aWVzKSB7CiAgICAgY2hlY2tPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV2ViQXNzZW1i
bHksIGMsIGNvbnN0cnVjdG9yUHJvcGVydGllc1tjXSk7CiAgICAgY2hlY2tPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoV2ViQXNzZW1ibHlbY10sICJwcm90b3R5cGUiLCB7IHR5cGVvZnZhbHVlOiAib2Jq
ZWN0Iiwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiBm
YWxzZSB9KTsKICAgICBhc3NlcnQudGhyb3dzKCgpID0+IFdlYkFzc2VtYmx5W2NdKCksIFR5cGVF
cnJvciwgYGNhbGxpbmcgV2ViQXNzZW1ibHkuJHtjfSBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBp
cyBpbnZhbGlkYCk7Ci0gICAgaWYgKGNvbnN0cnVjdG9yUHJvcGVydGllc1tjXS5pc0Vycm9yKSB7
CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAiTW9kdWxlIjoKKyAgICAgICAgZm9yIChjb25z
dCBpbnZhbGlkIG9mIFt1bmRlZmluZWQsICIiLCAxLCB7fSwgW11dKQorICAgICAgICAgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oaW52YWxpZCksIFR5cGVFcnJvciwg
YGZpcnN0IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lk1vZHVsZSBtdXN0IGJlIGFuIEFycmF5QnVm
ZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2Nd
KGludmFsaWQpJylgKTsKKyAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgW25ldyBBcnJheUJ1
ZmZlcigpLCBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKCkpLCBuZXcgSW50OEFycmF5KCks
IG5ldyBVaW50OEFycmF5KCksIG5ldyBVaW50OENsYW1wZWRBcnJheSgpLCBuZXcgSW50MTZBcnJh
eSgpLCBuZXcgVWludDE2QXJyYXkoKSwgbmV3IEludDMyQXJyYXkoKSwgbmV3IFVpbnQzMkFycmF5
KCksIG5ldyBGbG9hdDMyQXJyYXkoKSwgbmV3IEZsb2F0NjRBcnJheSgpXSkKKyAgICAgICAgICAg
IC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJv
ci4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzc2OAorICAgICAg
ICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJy
b3IsIGBNb2R1bGUgaXMgMCBieXRlcywgZXhwZWN0ZWQgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciknKWApOworICAgICAgICBhc3NlcnQuaW5z
dGFuY2VvZihuZXcgV2ViQXNzZW1ibHlbY10oZW1wdHlNb2R1bGUpLCBXZWJBc3NlbWJseS5Nb2R1
bGUpOworICAgICAgICAvLyBGSVhNRSB0ZXN0IG5ldXRlcmVkIFR5cGVkQXJyYXkgYW5kIFR5cGVk
QXJyYXlWaWV3LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzODk5
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIkluc3RhbmNlIjoKKyAgICAgICAgLy8gRklYTUUg
SW1wbGVtZW50IGFuZCB0ZXN0IHRoZXNlIEFQSXMgZnVydGhlci4gRm9yIG5vdyB0aGV5IGp1c3Qg
dGhyb3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3NzUKKyAg
ICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oKSwgRXJyb3IsIGBX
ZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29uc3RydWN0b3IgcHJv
cGVydHlgKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiTWVtb3J5IjoKKyAgICAgICAgLy8g
RklYTUUgSW1wbGVtZW50IGFuZCB0ZXN0IHRoZXNlIEFQSXMgZnVydGhlci4gRm9yIG5vdyB0aGV5
IGp1c3QgdGhyb3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3
NzUKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oKSwgRXJy
b3IsIGBXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29uc3RydWN0
b3IgcHJvcGVydHlgKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiVGFibGUiOgorICAgICAg
ICAvLyBGSVhNRSBJbXBsZW1lbnQgYW5kIHRlc3QgdGhlc2UgQVBJcyBmdXJ0aGVyLiBGb3Igbm93
IHRoZXkganVzdCB0aHJvdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1OTc3NQorICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXSgp
LCBFcnJvciwgYFdlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgJHtjfSBjb25z
dHJ1Y3RvciBwcm9wZXJ0eWApOworICAgICAgICBicmVhazsKKyAgICBjYXNlICJDb21waWxlRXJy
b3IiOgorICAgIGNhc2UgIlJ1bnRpbWVFcnJvciI6IHsKICAgICAgICAgY29uc3QgZSA9IG5ldyBX
ZWJBc3NlbWJseVtjXTsKICAgICAgICAgYXNzZXJ0LmVxKGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJs
eVtjXSwgdHJ1ZSk7CiAgICAgICAgIGFzc2VydC5lcShlIGluc3RhbmNlb2YgRXJyb3IsIHRydWUp
OwpAQCAtNTQsMTYgKzgwLDEyIEBAIGZvciAoY29uc3QgYyBpbiBjb25zdHJ1Y3RvclByb3BlcnRp
ZXMpIHsKICAgICAgICAgY29uc3Qgc2lsbHlTdHJpbmcgPSAidWgtb2ghIjsKICAgICAgICAgY29u
c3QgZTIgPSBuZXcgV2ViQXNzZW1ibHlbY10oc2lsbHlTdHJpbmcpOwogICAgICAgICBhc3NlcnQu
ZXEoZTIubWVzc2FnZSwgc2lsbHlTdHJpbmcpOworICAgIH0gYnJlYWs7CisgICAgZGVmYXVsdDog
dGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBlcnJvcjogdW5leHBlY3RlZCBjb25zdHJ1
Y3RvciBwcm9wZXJ0eSAiJHtjfSJgKTsKICAgICB9CiB9CiAKIC8vIEZJWE1FIEltcGxlbWVudCBh
bmQgdGVzdCB0aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBqdXN0IHRocm93LiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1Ci0KIGZvciAoY29uc3Qg
ZiBpbiBmdW5jdGlvblByb3BlcnRpZXMpIHsKICAgICBhc3NlcnQudGhyb3dzKCgpID0+IFdlYkFz
c2VtYmx5W2ZdKCksIEVycm9yLCBgV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRo
ZSAke2Z9IGZ1bmN0aW9uIHByb3BlcnR5YCk7CiB9Ci0KLWZvciAoY29uc3QgYyBpbiBjb25zdHJ1
Y3RvclByb3BlcnRpZXMpIHsKLSAgICBpZiAoIWNvbnN0cnVjdG9yUHJvcGVydGllc1tjXS5pc0Vy
cm9yKQotICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXSgpLCBF
cnJvciwgYFdlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgJHtjfSBjb25zdHJ1
Y3RvciBwcm9wZXJ0eWApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNjZjNjBlNC4u
M2FmNjJkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE0IEBACisyMDE2
LTEwLTI0ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJB
c3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBNb2R1bGUKKworICAgICAgICBUaGlzIGltcGxlbWVu
dGF0aW9uIGFsbG93cyB1cyB0bzoKKyAgICAgICAgIC0gU3luY3Job25vdXNseSBjcmVhdGUgYSBX
ZWJBc3NlbWJseS5Nb2R1bGUgd2l0aCBhIHR5cGVkIGFycmF5LgorICAgICAgICAgLSBDcmVhdGVz
IGEgY29tcGlsYXRpb24gcGxhbi4KKyAgICAgICAgIC0gUGFyc2UgdGhlIE1vZHVsZSBhbmQgY3Jl
YXRlcyBjb3JyZXNwb25kaW5nIGNvZGUuCisgICAgICAgICAtIFRocm93IFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciB3aXRoIG1pbGRseSBoZWxwZnVsIFsqXSBlcnJvciBtZXNzYWdlcyBvbgorICAg
ICAgICAgICBmYWlsdXJlLgorCisgICAgICAgIENvbnN1bHQgdGhlIEFQSSBkb2N1bWVudGF0aW9u
IGZvciBleHBlY3RlZCBiZWhhdmlvcjogaHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2VtYmx5L2Rl
c2lnbi9ibG9iL21hc3Rlci9KUy5tZCN3ZWJhc3NlbWJseW1vZHVsZS1jb25zdHJ1Y3RvcgorCisg
ICAgICAgIEZvciBub3cgdGhlIGltcGxlbWVudGF0aW9uIGRpc2NhcmRzIHRoZSBnZW5lcmF0ZWQg
Y29kZS4KKworICAgICAgICBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlOgorICAgICAgICAgLSBFeHBv
c2UgYSBNb2R1bGUncyBleHBvcnRzLgorICAgICAgICAgLSBJbXBsZW1lbnQgV2ViQXNzZW1ibHku
SW5zdGFuY2UsIHdoaWNoIGFsbG93cyBpbnN0YW50aWF0aW5nIGFuZCBydW5uaW5nIGEKKyAgICAg
ICAgICAgY29tcGlsZWQgTW9kdWxlLgorICAgICAgICAgLSBCZWVmIHVwIHRoZSB0ZXN0aW5nIGlu
ZnJhc3RydWN0dXJlIHVuZGVyIEpTVGVzdHMvd2FzbSBzbyB0aGF0IG1vcmUgY29tcGxleAorICAg
ICAgICAgICBtb2R1bGVzIGNhbiBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgKGluc3RlYWQgb2Ygd3Jp
dGluZyB0aGUgYml0cyBieSBoYW5kKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc286CisgICAg
ICAgICAtIEFkZHMgYXNzZXJ0Lmluc3RhbmNlb2YgaW4gYXNzZXJ0LmpzLgorICAgICAgICAgLSBS
ZWZhY3RvcnMgV2FzbTo6UGFyc2VyIGFuZCBmcmllbmRzIHRvIGFjY2VwdCBjb25zdCB1aW50OF90
KiBhcyB3ZWxsIGFzIGEKKyAgICAgICAgICAgVmVjdG9yLCB0byBhdm9pZCBjb3B5aW5nIHdoZW4g
aW52b2tlZCBzeW5jaHJvbm91c2x5LgorICAgICAgICAgLSBSZW1vdmUgdXNlbGVzcyBTdHJ1Y3R1
cmUgZnJvbSBzb21lIG9mIHRoZSB3YXNtIGNvbnN0cnVjdG9yczogdGhleSdyZSBhbHJlYWR5Cisg
ICAgICAgICAgIG9uIHRoZSBKU0dsb2JhbE9iamVjdCwgdmlzaXRlZCBwcm9wZXJseSBhbmQgYWxs
LgorICAgICAgICAgLSBGaXggb2ZmLWJ5LW9uZSBlcnJvciBpbiBwYXJzaW5nOiBQYXJzZXI6OnBh
cnNlVUludDMyIGZhaWxlZCBpZiB0aGUgaW50ZWdlcgorICAgICAgICAgICB3YXMgZXhhY3RseSBh
dCBlbmQgb2YgZmlsZS4KKworICAgICAgICAgWypdIE9uIGVycm9yIG1lc3NhZ2VzIHdoaWxlIHBh
cnNpbmc6IEkgZmlsZWQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzkxOQorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IE1vZHVsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpkZWZhdWx0U291cmNlQXBwZW5kZXIp
OiBtYWtlIHRoaXMgcHVibGljIHNvIHRoYXQgV2ViQXNzZW1ibHkgY2FuIHVzZSBpdDogaXQgZ2Vu
ZXJhdGVzIHRob3NlIGZhbmN5IChldmFsdWF0aW5nICcuLi4nKSBtZXNzYWdlcyBhdCB0aGUgZW5k
CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KTogcmVtb3ZlIHRoZSB1c2VsZXNzIFN0cnVjdHVyZSBmcm9tIHRoZSBXZWJBc3NlbWJseSBvYmpl
Y3RzIChpdCdzIGFscmVhZHkgaW4gdGhpcyBmaWxlLCBubyBuZWVkIHRvIGhvbGQgdHdvIHJlZmVy
ZW5jZXMgYW5kIHZpc2l0IHRoZW0gdHdpY2UpCisgICAgICAgICogdGVzdFdhc20uY3BwOgorICAg
ICAgICAocnVuV2FzbVRlc3RzKTogdXBkYXRlIEFQSQorICAgICAgICAqIHdhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOiB1c2Ug
dXBkYXRlZCBBUEkKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAg
ICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKTogdXNlIHVwZGF0ZWQgQVBJCisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24p
OiB1c2UgdXBkYXRlZCBBUEkKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlKTogZ2VuZXJhdGUgZXJyb3Ig
bWVzc2FnZXMKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpNb2R1bGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OmZhaWxlZCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNl
cjo6ZXJyb3JNZXNzYWdlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpmdW5j
dGlvbkluZm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjptZW1v
cnkpOgorICAgICAgICAqIHdhc20vV2FzbVBhcnNlci5oOiB1c2UgdXBkYXRlIG5vbi1wdWJsaWMg
QVBJCisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VWYXJVSW50MzIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVmFyVUludDY0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGFyc2VyOjpzb3VyY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxlbmd0aCk6
CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGFyc2VyOjpjb25zdW1lQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2Vy
Ojpjb25zdW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVVJbnQz
Mik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VVSW50Nyk6CisgICAgICAgICog
d2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlBsYW4pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjp+UGxhbik6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5o
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpmYWlsZWQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjplcnJvck1lc3NhZ2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpyZXN1bHRT
aXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6cmVzdWx0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6bWVtb3J5KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVXZWJBc3NlbWJseUNvbXBpbGVFcnJv
cik6IG1ha2VzIGl0IGVhc2llciB0byB0aHJvdyBhIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciBm
cm9tIE1vZHVsZQorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5o
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3I6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVy
cm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1
bGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IuaDoKKwogMjAxNi0xMC0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlZHVjZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0eXBlZCBhcnJheXMgaW4g
SlNET01Db252ZXJ0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4Y2VwdGlvbkhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uSGVscGVycy5jcHAKaW5kZXggOTA1MDkxYS4uZWYxYjIwNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTEwMSw3
ICsxMDEsNyBAQCBzdGF0aWMgU3RyaW5nIGRlZmF1bHRBcHByb3hpbWF0ZVNvdXJjZUVycm9yKGNv
bnN0IFN0cmluZyYgb3JpZ2luYWxNZXNzYWdlLCBjb25zdAogICAgIHJldHVybiBtYWtlU3RyaW5n
KG9yaWdpbmFsTWVzc2FnZSwgIiAobmVhciAnLi4uIiwgc291cmNlVGV4dCwgIi4uLicpIik7CiB9
CiAKLXN0YXRpYyBTdHJpbmcgZGVmYXVsdFNvdXJjZUFwcGVuZGVyKGNvbnN0IFN0cmluZyYgb3Jp
Z2luYWxNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVRleHQsIFJ1bnRpbWVUeXBlLCBFcnJv
ckluc3RhbmNlOjpTb3VyY2VUZXh0V2hlcmVFcnJvck9jY3VycmVkIG9jY3VycmVuY2UpCitTdHJp
bmcgZGVmYXVsdFNvdXJjZUFwcGVuZGVyKGNvbnN0IFN0cmluZyYgb3JpZ2luYWxNZXNzYWdlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVRleHQsIFJ1bnRpbWVUeXBlLCBFcnJvckluc3RhbmNlOjpTb3Vy
Y2VUZXh0V2hlcmVFcnJvck9jY3VycmVkIG9jY3VycmVuY2UpCiB7CiAgICAgaWYgKG9jY3VycmVu
Y2UgPT0gRXJyb3JJbnN0YW5jZTo6Rm91bmRBcHByb3hpbWF0ZVNvdXJjZSkKICAgICAgICAgcmV0
dXJuIGRlZmF1bHRBcHByb3hpbWF0ZVNvdXJjZUVycm9yKG9yaWdpbmFsTWVzc2FnZSwgc291cmNl
VGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmgKaW5kZXggZDhmMzkxMi4uZWMwNTI5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaApAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogdHlwZWRlZiBKU09iamVjdCogKCpFcnJvckZhY3RvcnkpKEV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKIAorU3RyaW5n
IGRlZmF1bHRTb3VyY2VBcHBlbmRlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBSdW50
aW1lVHlwZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlVGV4dFdoZXJlRXJyb3JPY2N1cnJlZCk7CisK
IEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7CiBKU19F
WFBPUlRfUFJJVkFURSBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihFeGNlcHRp
b24qKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
aW5kZXggZjQ4Y2JjZi4uMzg0MDgyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtODMyLDcgKzgzMiw3IEBAIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT4ganNOYW1lLCBsb3dlck5hbWUg
IyMgQ29uc3RydWN0CiAgICAgICAgIGF1dG8qIGJhc2UgPSBtXyAjIyBwcm90b3R5cGVCYXNlICMj
IFByb3RvdHlwZS5nZXQoKTsgXAogICAgICAgICBhdXRvKiBwcm90b3R5cGUgPSBQcm90b3R5cGU6
OmNyZWF0ZSh2bSwgdGhpcywgUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGJh
c2UpKTsgXAogICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBKU09iajo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCBwcm90b3R5cGUpOyBcCi0gICAgICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gQ29u
c3RydWN0b3I6OmNyZWF0ZSh2bSwgQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhp
cywgdGhpcy0+ZnVuY3Rpb25Qcm90b3R5cGUoKSksIHByb3RvdHlwZSwgc3RydWN0dXJlKTsgXAor
ICAgICAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yOjpjcmVhdGUodm0sIENvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHRoaXMtPmZ1bmN0aW9uUHJvdG90eXBl
KCkpLCBwcm90b3R5cGUpOyBcCiAgICAgICAgIHByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3Rvciwg
RG9udEVudW0pOyBcCiAgICAgICAgIG1fICMjIGxvd2VyTmFtZSAjIyBQcm90b3R5cGUuc2V0KHZt
LCB0aGlzLCBwcm90b3R5cGUpOyBcCiAgICAgICAgIG1fICMjIHByb3Blck5hbWUgIyMgU3RydWN0
dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RXYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5j
cHAKaW5kZXggYTkxYmUzMy4uMzRhZWE4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RXYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3Bw
CkBAIC0yOTAsMTYgKzI5MCwxNiBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAg
ICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFu
LnJlc3VsdC5zaXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFd
KSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDIg
fHwgIXBsYW4ucmVzdWx0KDApIHx8ICFwbGFuLnJlc3VsdCgxKSkgewogICAgICAgICAgICAgZGF0
YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAg
ICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3Vs
dFsxXS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41ZikpOwot
ICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdFsxXS0+
anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0Zikp
OwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41ZikpOwotICAg
ICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0ZikpOwor
ICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgxKS0+
anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41ZikpOworICAgICAg
ICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRy
eVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0ZikpOworICAg
ICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41ZikpOworICAgICAgICBD
SEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0ZikpOwogICAgIH0K
IAogICAgIHsKQEAgLTMxOSwxNiArMzE5LDE2IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygp
CiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAg
aWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3VsdFswXSB8fCAhcGxhbi5y
ZXN1bHRbMV0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXpl
KCkgIT0gMiB8fCAhcGxhbi5yZXN1bHQoMCkgfHwgIXBsYW4ucmVzdWx0KDEpKSB7CiAgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAg
ICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBs
YW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEu
NWYpKTsKLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1
bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEy
LjYyMzRmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEuNWYp
KTsKLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYy
MzRmKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVz
dWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEuNWYpKTsK
KyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSkt
PmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYyMzRm
KSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEuNWYpKTsKKyAg
ICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYyMzRmKSk7
CiAgICAgfQogCiAgICAgewpAQCAtMzUzLDE3ICszNTMsMTcgQEAgc3RhdGljIHZvaWQgcnVuV2Fz
bVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwot
ICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8
ICFwbGFuLnJlc3VsdFsxXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJl
c3VsdFNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3VsdCgwKSB8fCAhcGxhbi5yZXN1bHQoMSkpIHsK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3Rs
eS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkg
fSksIDEyMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0t
PmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJv
eCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94
KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSwgYm94
KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3go
MTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCkgfSksIDEyMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEyKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCks
IGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwg
Ym94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKICAgICB9CiAKICAg
ICB7CkBAIC0zODcsMTYgKzM4NywxNiBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAg
ICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYg
KHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQo
MCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNv
cnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAxKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0pLCAyNCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSB9KSwg
Mik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCg0KSB9KSwgMjQpOwogICAgIH0KIAogICAgIHsKQEAgLTQxNiwxOCArNDE2
LDE4IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAg
UGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAh
PSAyIHx8ICFwbGFuLnJlc3VsdFswXSB8fCAhcGxhbi5yZXN1bHRbMV0pIHsKKyAgICAgICAgaWYg
KHBsYW4ucmVzdWx0U2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0KDApIHx8ICFwbGFuLnJlc3Vs
dCgxKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUg
Y29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9
KSwgMTYpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMCkgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3go
MTAwKSwgYm94KDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxNSkgfSksIDE2KTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDIwMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9
KSwgMik7CiAgICAgfQogCiAgICAgewpAQCAtNDQ3LDE4ICs0NDcsMTggQEAgc3RhdGljIHZvaWQg
cnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0
WzBdIHx8ICFwbGFuLnJlc3VsdFsxXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBw
bGFuLnJlc3VsdFNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3VsdCgwKSB8fCAhcGxhbi5yZXN1bHQo
MSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNv
cnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3go
MCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNDgwLDE1ICs0ODAsMTUgQEAgc3RhdGljIHZv
aWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2
ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVz
dWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgp
ICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVs
ZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDAp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDAp
IH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBAIC01MTAsMTUgKzUxMCwxNSBAQCBzdGF0aWMgdm9p
ZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZl
Y3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1
bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkg
IT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxl
IGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkg
fSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTU1MCwxNyArNTUwLDE3IEBAIHN0YXRpYyB2b2lk
IHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVj
dG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3Vs
dFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAh
PSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUg
ZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAg
ICAgICAgfQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7CisgICAgICAgIEFT
U0VSVChwbGFuLm1lbW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vz
bid0IGNyYXNoLgogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0g
c3RhdGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeS0+bWVtb3J5KCkpOwotICAgICAgICBp
bnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0
YXRpY19jYXN0PHVpbnQzMl90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBp
bnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50
MzJfdCk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwpAQCAtNTY5LDcgKzU2OSw3
IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAg
ICAgICAgIG9mZnNldCA9IDUgKiBzaXplb2YodWludDMyX3QpOwotICAgICAgICBpbnZva2U8dm9p
ZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwg
Ym94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAg
ICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtv
ZmZzZXQgLSAxXSwgMTAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5n
dGhdLCAwdSk7CkBAIC02MDUsMTcgKzYwNSwxNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAg
IGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAg
ICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5y
ZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21w
aWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5tZW1v
cnkoKS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsK
LSAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVt
b3J5LT5tZW1vcnkoKSk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAg
ICAgICB1aW50OF90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnko
KS0+bWVtb3J5KCkpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1l
bW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKQEAgLTYyMyw3ICs2MjMsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNt
VGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgICAgICBvZmZzZXQgPSA1OwotICAg
ICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUp
LCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVu
Z3RoKSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKICAg
ICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtNjQ5LDE2ICs2NDksMTYgQEAg
c3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBs
YW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwg
IXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVz
dWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9n
TG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBD
UkFTSCgpOwogICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsK
KyAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0p
LCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBA
IC02ODAsMTUgKzY4MCwxNSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9
OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJl
c3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4u
ZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3Rs
eS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkg
fSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwogICAgIH0KIAogICAgIHsK
QEAgLTcxMCwxNiArNzEwLDE2IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAg
IH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4u
cmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxh
bi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkg
ewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAx
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KC0xMiksIGJveChwbGFuLm1lbW9yeS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2
NF90KSkgfSksIC0xMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goLTEyKSwgYm94KHBsYW4ubWVtb3J5KCktPnNpemUoKSAtIHNpemVvZih1aW50NjRfdCkp
IH0pLCAtMTIpOwogICAgIH0KIAogICAgIHsKQEAgLTc0MSwxNSArNzQxLDE1IEBAIHN0YXRpYyB2
b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwg
dmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJl
c3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUo
KSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1
bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAw
KSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNzgxLDE3ICs3ODEsMTcgQEAgc3RhdGljIHZv
aWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2
ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVz
dWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgp
ICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVs
ZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwog
ICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAg
QVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7Ci0gICAgICAg
IGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0g
c3RhdGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7CisgICAgICAg
IGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVp
bnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAg
ICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC04MDAsNyArODAw
LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBsZW5ndGggPSAxMDsK
ICAgICAgICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2
b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQp
LCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAg
ICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5
W29mZnNldCAtIDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxl
bmd0aF0sIDB1KTsKQEAgLTgzNiwxNyArODM2LDE3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0
cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAg
ICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAg
ICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFu
LnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNv
bXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQotICAg
ICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLm1l
bW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgog
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAx
OwotICAgICAgICB1aW50OF90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5t
ZW1vcnktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7Cisg
ICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9y
eSgpLT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAg
ICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtODU0LDcgKzg1NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0g
ICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
NSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChs
ZW5ndGgpIH0pOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwog
ICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC04ODAsMTYgKzg4MCwxNiBA
QCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4g
cGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8
fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5y
ZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFM
b2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAg
IENSQVNIKCk7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5zaXplKCkp
OworICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBU
ZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikg
fSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsK
QEAgLTkxMSwxNSArOTExLDE1IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAg
IH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4u
cmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxh
bi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkg
ewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CiAgICAgfQogCiAgICAg
ewpAQCAtOTQxLDIwICs5NDEsMjAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAg
ICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxh
bi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChw
bGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDAp
KSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3Jy
ZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSks
IDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0p
LCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAt
OTgyLDIwICs5ODIsMjAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsK
IAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1
bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZh
aWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0
aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCksIGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CiAgICAgfQogCiAKQEAgLTEwMDksMTMgKzEw
MDksMTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAg
ICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgp
ICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8
IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAg
ICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IH0pLCA1KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDUpOwogICAgIH0KIAogCkBAIC0xMDMw
LDEzICsxMDMwLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAK
ICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0
LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWls
ZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIp
OwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhp
cyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwogICAgIH0KIAog
ICAgIHsKQEAgLTEwNTAsMTMgKzEwNTAsMTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkK
ICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBp
ZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAg
IGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVz
dWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGls
ZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAx
MSk7CiAgICAgfQogCiAgICAgewpAQCAtMTA3MCwxMyArMTA3MCwxMyBAQCBzdGF0aWMgdm9pZCBy
dW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRb
MF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgfSksIDEx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgfSksIDExKTsKICAgICB9CiAKICAgICB7CkBAIC0xMDg5LDE2ICsxMDg5LDE2IEBA
IHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJl
c3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxv
Z0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAg
Q1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNo
LgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQ
b2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMSkgfSks
IDEwMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNF
bnRyeVBvaW50LCB7IGJveCgtMSksIGJveCgxKX0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWluKCkpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBi
b3goMSkgfSksIDEwMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgtMSksIGJveCgxKX0pLCAwKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWluKCkpOwogICAgIH0KIAogICAgIHsKQEAgLTExMTgsMTQgKzExMTgsMTQg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4u
cmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAg
ICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMCkgfSksIDEwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwKSB9KSwgMTApOwogICAgIH0KIAogICAgIHsKQEAgLTEx
NTQsMTYgKzExNTQsMTYgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsK
IAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1
bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZh
aWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0
aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwg
MSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgyKX0pLCAzKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDUwNTApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMil9KSwgMyk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApIH0pLCA1MDUwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTk4LDIwICsxMTk4
LDIwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAg
UGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAh
PSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBw
bGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAg
ICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDAp
IH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDIpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgy
KSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCA0KTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
NikgfSksIDEyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgNjAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCgxMDApIH0pLCAxMDAwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMik7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDIpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDQpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMiksIGJveCg2KSB9KSwgMTIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCA2
MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDEwMCkgfSksIDEwMDAwKTsKICAgICB9CiAKICAgICB7
CkBAIC0xMjUxLDIwICsxMjUxLDIwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAg
ICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBs
YW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAo
cGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgw
KSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29y
cmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSks
IDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0p
LCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9
KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDE0
MTc3OTIuLmJhNGQ0YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKQEAgLTcxNCwxMyArNzE0LDEzIEBAIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWF0ZUpTV3JhcHBlcihWTSYgdm0sIGNvbnN0IFNpZ25hdHVy
ZSogc2lnCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9j
KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29t
cGlsZShWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiYgc291cmNlLCBNZW1vcnkqIG1lbW9yeSwgRnVu
Y3Rpb25JbmZvcm1hdGlvbiBpbmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4m
IGZ1bmN0aW9ucywgdW5zaWduZWQgb3B0TGV2ZWwpCitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25D
b21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3QgdWludDhfdCogZnVuY3Rp
b25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBNZW1vcnkqIG1lbW9yeSwgY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVu
Y3Rpb25zLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFr
ZV91bmlxdWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKIAogICAgIFByb2NlZHVyZSBwcm9jZWR1
cmU7CiAgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQt
PnVubGlua2VkQ2FsbHMpOwotICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNl
cihjb250ZXh0LCBzb3VyY2UsIGluZm8sIGZ1bmN0aW9ucyk7CisgICAgRnVuY3Rpb25QYXJzZXI8
QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVu
Z3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9ucyk7CiAgICAgaWYgKCFwYXJzZXIucGFyc2UoKSkKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAtNzMyLDcgKzczMiw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0m
IHZtLCBWZWN0b3I8dWludDhfdD4mIHNvCiAgICAgICAgIGRhdGFMb2coIlBvc3QgU1NBOiAiLCBw
cm9jZWR1cmUpOwogCiAgICAgcmVzdWx0LT5jb2RlID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxh
dGlvbj4odm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpOwotICAgIHJlc3VsdC0+anNFbnRyeVBvaW50
ID0gY3JlYXRlSlNXcmFwcGVyKHZtLCBpbmZvLnNpZ25hdHVyZSwgcmVzdWx0LT5jb2RlLT5jb2Rl
KCksIG1lbW9yeSk7CisgICAgcmVzdWx0LT5qc0VudHJ5UG9pbnQgPSBjcmVhdGVKU1dyYXBwZXIo
dm0sIHNpZ25hdHVyZSwgcmVzdWx0LT5jb2RlLT5jb2RlKCksIG1lbW9yeSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmgKaW5kZXggZjhkODQyMC4uNDNkZGI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIE1lbW9yeTsKIAotc3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYsIFZlY3Rvcjx1aW50
OF90PiYsIE1lbW9yeSosIEZ1bmN0aW9uSW5mb3JtYXRpb24sIGNvbnN0IFZlY3RvcjxGdW5jdGlv
bkluZm9ybWF0aW9uPiYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitzdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiwgY29uc3QgdWludDhfdCos
IHNpemVfdCwgTWVtb3J5KiwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9u
SW5mb3JtYXRpb24+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaAppbmRleCBhMGQ1YjNkLi41MWUyZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJs
aWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHByZXNz
aW9uVHlwZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRy
b2xUeXBlOwogCi0gICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgY29uc3QgVmVj
dG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOworICAgIEZ1bmN0aW9uUGFyc2Vy
KENvbnRleHQmLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9u
PiYgZnVuY3Rpb25zKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAK
QEAgLTU5LDIxICs1OSwyMSBAQCBwcml2YXRlOgogICAgIENvbnRleHQmIG1fY29udGV4dDsKICAg
ICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhwcmVzc2lvblN0YWNrOwogICAgIFZlY3Rv
cjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBtX3Np
Z25hdHVyZTsKKyAgICBjb25zdCBTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogICAgIGNvbnN0IFZl
Y3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgbV9mdW5jdGlvbnM7CiAgICAgdW5zaWduZWQgbV91
bnJlYWNoYWJsZUJsb2NrcyB7IDAgfTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+
Ci1GdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIsIGNvbnN0IEZ1bmN0aW9uSW5m
b3JtYXRpb24mIGluZm8sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rp
b25zKQotICAgIDogUGFyc2VyKHNvdXJjZUJ1ZmZlciwgaW5mby5zdGFydCwgaW5mby5lbmQpCitG
dW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIoQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+
JiBmdW5jdGlvbnMpCisgICAgOiBQYXJzZXIoZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgp
CiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2lnbmF0dXJlKCppbmZvLnNpZ25h
dHVyZSkKKyAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKICAgICAsIG1fZnVuY3Rpb25zKGZ1
bmN0aW9ucykKIHsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5n
IGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBpbmZvLnN0YXJ0LCAiIGVuZGluZyBhdDogIiwgaW5m
by5lbmQpOwotICAgIG1fY29udGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUuYXJndW1lbnRz
KTsKKyAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCAo
dWludHB0cl90KWZ1bmN0aW9uU3RhcnQsICIgb2YgbGVuZ3RoOiAiLCBmdW5jdGlvbkxlbmd0aCk7
CisgICAgbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZS0+YXJndW1lbnRzKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KQEAgLTMwOSw3ICszMDksNyBAQCBib29sIEZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBlIG9wKQogCiAgICAg
Y2FzZSBPcFR5cGU6OlJldHVybjogewogICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+
IHJldHVyblZhbHVlczsKLSAgICAgICAgaWYgKG1fc2lnbmF0dXJlLnJldHVyblR5cGUgIT0gVm9p
ZCkKKyAgICAgICAgaWYgKG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlICE9IFZvaWQpCiAgICAgICAg
ICAgICByZXR1cm5WYWx1ZXMuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCkpOwog
CiAgICAgICAgIG1fdW5yZWFjaGFibGVCbG9ja3MgPSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA3ZWUwMWIwLi4yNzZkODk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApA
QCAtNDEsMzMgKzQxLDQ1IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAog
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKIHsKLSAgICBpZiAobV9zb3VyY2VMZW5ndGggPCA4
KQorICAgIGNvbnN0IHNpemVfdCBtaW5TaXplID0gODsKKyAgICBpZiAobGVuZ3RoKCkgPCBtaW5T
aXplKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIk1vZHVsZSBpcyAiICsgU3RyaW5nOjpu
dW1iZXIobGVuZ3RoKCkpICsgIiBieXRlcywgZXhwZWN0ZWQgYXQgbGVhc3QgIiArIFN0cmluZzo6
bnVtYmVyKG1pblNpemUpICsgIiBieXRlcyI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWNvbnN1bWVDaGFyYWN0ZXIoMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IWNvbnN1bWVTdHJpbmcoImFzbSIpKQorICAgIH0KKyAgICBpZiAoIWNvbnN1bWVDaGFyYWN0ZXIo
MCkgfHwgIWNvbnN1bWVTdHJpbmcoImFzbSIpKSB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0g
Ik1vZHVsZXMgZG9lc24ndCBzdGFydCB3aXRoICdcXDBhc20nIjsKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAogICAgIC8vIFNraXAgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBub3cgc2lu
Y2Ugd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdC4KICAgICB1aW50MzJfdCB2ZXJzaW9uTnVt
YmVyOwotICAgIGlmICghcGFyc2VVSW50MzIodmVyc2lvbk51bWJlcikpCisgICAgaWYgKCFwYXJz
ZVVJbnQzMih2ZXJzaW9uTnVtYmVyKSkgeworICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9y
IG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQor
ICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB2ZXJzaW9uIG51bWJlciI7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBpZiAodmVyc2lvbk51bWJlciAh
PSBtYWdpY051bWJlcikKKyAgICBpZiAodmVyc2lvbk51bWJlciAhPSBtYWdpY051bWJlcikgewor
ICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQorICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJ1
bmV4cGVjdGVkIHZlcnNpb24gbnVtYmVyIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IAogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiUGFzc2VkIHByb2Nlc3Np
bmcgaGVhZGVyLiIpOwogCiAgICAgU2VjdGlvbnM6OlNlY3Rpb24gcHJldmlvdXNTZWN0aW9uID0g
U2VjdGlvbnM6OlVua25vd247Ci0gICAgd2hpbGUgKG1fb2Zmc2V0IDwgbV9zb3VyY2VMZW5ndGgp
IHsKKyAgICB3aGlsZSAobV9vZmZzZXQgPCBsZW5ndGgoKSkgewogICAgICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiU3RhcnRpbmcgdG8gcGFyc2UgbmV4dCBzZWN0aW9u
IGF0IG9mZnNldDogIiwgbV9vZmZzZXQpOwogCiAgICAgICAgIHVpbnQ4X3Qgc2VjdGlvbkJ5dGU7
Ci0gICAgICAgIGlmICghcGFyc2VVSW50NyhzZWN0aW9uQnl0ZSkpCisgICAgICAgIGlmICghcGFy
c2VVSW50NyhzZWN0aW9uQnl0ZSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJy
b3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5
CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBieXRl
IjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICh2
ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWN0aW9uIGJ5dGU6ICIsIHNlY3Rpb25C
eXRlKTsKQEAgLTc4LDI0ICs5MCwzNiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQogICAg
ICAgICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWN0aW9uczo6U2VjdGlvbj4oc2Vj
dGlvbkJ5dGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdWludDMyX3Qgc2VjdGlv
bk5hbWVMZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNlY3Rpb25OYW1l
TGVuZ3RoKSkKKyAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbk5hbWVMZW5n
dGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBnZXQgc2VjdGlvbiBuYW1lIGxlbmd0aCI7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIHJlYWQgdXAgdG8gdGhlIHNlY3Rpb24ncyBzaXplLgot
ICAgICAgICAgICAgaWYgKG1fb2Zmc2V0ICsgc2VjdGlvbk5hbWVMZW5ndGggKyBXVEY6OkxFQkRl
Y29kZXI6Om1heDMyQml0TEVCQnl0ZUxlbmd0aCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAg
ICAgIGlmIChtX29mZnNldCArIHNlY3Rpb25OYW1lTGVuZ3RoICsgV1RGOjpMRUJEZWNvZGVyOjpt
YXgzMkJpdExFQkJ5dGVMZW5ndGggPj0gbGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzkxOQorICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gInNlY3Rp
b24gbGVuZ3RoIGlzIGJpZ2dlciB0aGFuIGFjdHVhbCBzaXplIjsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgYW55IGN1c3RvbSBzZWN0aW9ucyB5ZXQuCiAKICAgICAgICAgICAgIG1fb2Zmc2V0ICs9
IHNlY3Rpb25OYW1lTGVuZ3RoOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFTZWN0aW9uczo6
dmFsaWRhdGVPcmRlcihwcmV2aW91c1NlY3Rpb24sIHNlY3Rpb24pKQorICAgICAgICBpZiAoIVNl
Y3Rpb25zOjp2YWxpZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
ICJpbnZhbGlkIHNlY3Rpb24gb3JkZXIiOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CiAKICAgICAgICAgdWludDMyX3Qgc2VjdGlvbkxlbmd0aDsKLSAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihzZWN0aW9uTGVuZ3RoKSkKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQz
MihzZWN0aW9uTGVuZ3RoKSkgeworICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBt
ZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBzZWN0aW9uIGxlbmd0aCI7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25l
ZCBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25MZW5ndGg7CiAKQEAgLTEwNCwzMiArMTI4LDQ0IEBA
IGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIGNhc2UgU2VjdGlvbnM6Ok1lbW9y
eTogewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJQYXJzaW5nIE1lbW9yeS4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VNZW1vcnkoKSkKKyAg
ICAgICAgICAgIGlmICghcGFyc2VNZW1vcnkoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
IGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzOTE5CisgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3Qg
cGFyc2UgbWVtb3J5IjsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU2VjdGlv
bnM6OkZ1bmN0aW9uVHlwZXM6IHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyB0eXBlcy4iKTsKLSAgICAgICAgICAgIGlmICghcGFy
c2VGdW5jdGlvblR5cGVzKCkpCisgICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb25UeXBlcygp
KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB0eXBlcyI7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIFNlY3Rpb25zOjpTaWduYXR1cmVzOiB7CiAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgZnVuY3Rp
b24gc2lnbmF0dXJlcy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblNpZ25hdHVy
ZXMoKSkKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblNpZ25hdHVyZXMoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAgICAgICAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgZnVuY3Rpb24gc2lnbmF0dXJlcyI7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFNlY3Rpb25zOjpEZWZpbml0aW9uczogewogICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5n
IGZ1bmN0aW9uIGRlZmluaXRpb25zLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9u
RGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25z
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQorICAgICAgICAgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIGZ1bmN0aW9uIGRlZmluaXRpb25z
IjsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xNDYsMTMgKzE4MiwxNyBAQCBib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2dMbigiRmluaXNoZWQgcGFyc2luZyBzZWN0aW9uLiIpOwogCi0gICAgICAgIGlmIChlbmQgIT0g
bV9vZmZzZXQpCisgICAgICAgIGlmIChlbmQgIT0gbV9vZmZzZXQpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJwYXJzaW5n
IGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzZWN0aW9uIjsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQogCiAgICAgICAgIHByZXZpb3VzU2VjdGlvbiA9IHNlY3Rpb247
CiAgICAgfQogCiAgICAgLy8gVE9ETworICAgIG1fZmFpbGVkID0gZmFsc2U7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAppbmRleCA1NDBkNWE2Li4zODI5M2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC0zOSwxNSArMzksMzMgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hZ2ljTnVtYmVyID0gMHhjOwogCisgICAgTW9kdWxl
UGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
KyAgICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCBzb3VyY2VMZW5ndGgpCisgICAgeworICAg
IH0KICAgICBNb2R1bGVQYXJzZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIp
Ci0gICAgICAgIDogUGFyc2VyKHNvdXJjZUJ1ZmZlciwgMCwgc291cmNlQnVmZmVyLnNpemUoKSkK
KyAgICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLmRhdGEoKSwgc291cmNlQnVmZmVyLnNpemUo
KSkKICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsK
KyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2Zh
aWxlZDsgfQorICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhaWxlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZXJyb3JN
ZXNzYWdlOworICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYg
ZnVuY3Rpb25JbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4mIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5OyB9Cisg
ICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbkluZm9ybWF0aW9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAg
ICAgIHJldHVybiBtX2Z1bmN0aW9uczsKKyAgICB9CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9y
eT4mIG1lbW9yeSgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwor
ICAgICAgICByZXR1cm4gbV9tZW1vcnk7CisgICAgfQogCiBwcml2YXRlOgogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5KCk7CkBAIC01OSw2ICs3Nyw4IEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+IG1fZnVuY3Rpb25zOwogICAgIFZlY3Rv
cjxTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBt
X21lbW9yeTsKKyAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OworICAgIFN0cmluZyBtX2Vycm9y
TWVzc2FnZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggNzQ4MTM0ZC4uNDZhN2IzOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBQYXJzZXIgewogcHJvdGVjdGVkOgot
ICAgIFBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBl
bmQpOworICAgIFBhcnNlcihjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKIAogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGNvbnN1bWVDaGFyYWN0ZXIoY2hhcik7CiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gY29uc3VtZVN0cmluZyhjb25zdCBjaGFyKik7CkBAIC00NiwzMSArNDYsMzIg
QEAgcHJvdGVjdGVkOgogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDEo
dWludDhfdCYgcmVzdWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQ3
KHVpbnQ4X3QmIHJlc3VsdCk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50
MzIodWludDMyX3QmIHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VW
YXJVSW50MzIodWludDMyX3QmIHJlc3VsdCkgeyByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVVSW50MzIobV9zb3VyY2UuZGF0YSgpLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3Vs
dCk7IH0KLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQ2NCh1aW50NjRf
dCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQ2NChtX3NvdXJj
ZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQotCisgICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MzIodWludDMyX3QmIHJlc3VsdCkgeyBy
ZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9zb3VyY2UsIG1fc291cmNlTGVu
Z3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6
ZGVjb2RlVUludDY0KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7
IH0KIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJl
c3VsdCk7CiAKLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1fc291cmNlOworICAgIGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgc2l6ZV90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CisKKyAgICBzaXplX3Qg
bV9vZmZzZXQgPSAwOworCitwcml2YXRlOgorICAgIGNvbnN0IHVpbnQ4X3QqIG1fc291cmNlOwog
ICAgIHNpemVfdCBtX3NvdXJjZUxlbmd0aDsKLSAgICBzaXplX3QgbV9vZmZzZXQ7CiB9OwogCi1B
TFdBWVNfSU5MSU5FIFBhcnNlcjo6UGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNl
QnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCitBTFdBWVNfSU5MSU5FIFBhcnNlcjo6
UGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
ICAgICA6IG1fc291cmNlKHNvdXJjZUJ1ZmZlcikKLSAgICAsIG1fc291cmNlTGVuZ3RoKGVuZCkK
LSAgICAsIG1fb2Zmc2V0KHN0YXJ0KQorICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3Ro
KQogewotICAgIEFTU0VSVChlbmQgPD0gc291cmNlQnVmZmVyLnNpemUoKSk7Ci0gICAgQVNTRVJU
KHN0YXJ0IDwgZW5kKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZUNo
YXJhY3RlcihjaGFyIGMpCiB7Ci0gICAgaWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVuZ3RoKQor
ICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChjID09IG1fc291cmNlW21fb2Zmc2V0XSkgeworICAgIGlmIChjID09IHNvdXJjZSgpW21f
b2Zmc2V0XSkgewogICAgICAgICBtX29mZnNldCsrOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC04MCw5ICs4MSw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVD
aGFyYWN0ZXIoY2hhciBjKQogQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVN0cmlu
Zyhjb25zdCBjaGFyKiBzdHIpCiB7CiAgICAgdW5zaWduZWQgc3RhcnQgPSBtX29mZnNldDsKLSAg
ICBpZiAobV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGgpCisgICAgaWYgKG1fb2Zmc2V0ID49IGxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
c3RyW2ldOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgc3RyW2ldOyBpKyspIHsKICAg
ICAgICAgaWYgKCFjb25zdW1lQ2hhcmFjdGVyKHN0cltpXSkpIHsKICAgICAgICAgICAgIG1fb2Zm
c2V0ID0gc3RhcnQ7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MywxOCArOTQsMTgg
QEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVN0cmluZyhjb25zdCBjaGFyKiBz
dHIpCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDMyKHVpbnQzMl90JiBy
ZXN1bHQpCiB7Ci0gICAgaWYgKG1fc291cmNlTGVuZ3RoIDwgNCB8fCBtX29mZnNldCA+PSBtX3Nv
dXJjZUxlbmd0aCAtIDQpCisgICAgaWYgKGxlbmd0aCgpIDwgNCB8fCBtX29mZnNldCA+IGxlbmd0
aCgpIC0gNCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9ICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4obV9zb3VyY2UuZGF0YSgpICsgbV9vZmZzZXQpOworICAg
IHJlc3VsdCA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlKCkgKyBt
X29mZnNldCk7CiAgICAgbV9vZmZzZXQgKz0gNDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQpCiB7Ci0g
ICAgaWYgKG1fb2Zmc2V0ID49IG1fc291cmNlTGVuZ3RoKQorICAgIGlmIChtX29mZnNldCA+PSBs
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IG1fc291cmNlW21f
b2Zmc2V0KytdOworICAgIHJlc3VsdCA9IHNvdXJjZSgpW21fb2Zmc2V0KytdOwogICAgIHJldHVy
biByZXN1bHQgPCAweDgwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAKaW5kZXggYmEwZmEzZi4uZjljOGE1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcApAQCAtMzcsMTQgKzM3LDIwIEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KKyAgICAKIFBs
YW46OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhfdD4gc291cmNlKQorICAgIDogUGxhbih2bSwg
c291cmNlLmRhdGEoKSwgc291cmNlLnNpemUoKSkKK3sKK30KKworUGxhbjo6UGxhbihWTSYgdm0s
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKIHsKICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOwotICAgIE1vZHVs
ZVBhcnNlciBtb2R1bGVQYXJzZXIoc291cmNlKTsKKyAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFy
c2VyKHNvdXJjZSwgc291cmNlTGVuZ3RoKTsKICAgICBpZiAoIW1vZHVsZVBhcnNlci5wYXJzZSgp
KSB7Ci0gICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkLiIpOworICAgICAg
ICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZDogIiwgbW9kdWxlUGFyc2VyLmVycm9y
TWVzc2FnZSgpKTsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtb2R1bGVQYXJzZXIuZXJyb3JN
ZXNzYWdlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU0LDE5ICs2MCwyNSBAQCBQ
bGFuOjpQbGFuKFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSkKICAgICBmb3IgKGNvbnN0
IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8gOiBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1h
dGlvbigpKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJQ
cm9jZXNzaW5nIGZ1bmNpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIgYW5kIGVuZGlu
ZyBhdDogIiwgaW5mby5lbmQpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHBhcnNlQW5kQ29tcGls
ZSh2bSwgc291cmNlLCBtb2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCksIGluZm8sIG1vZHVsZVBh
cnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogZnVu
Y3Rpb25TdGFydCA9IHNvdXJjZSArIGluZm8uc3RhcnQ7CisgICAgICAgIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCA9IGluZm8uZW5kIC0gaW5mby5zdGFydDsKKyAgICAgICAgQVNTRVJUKGZ1bmN0aW9u
TGVuZ3RoIDw9IHNvdXJjZUxlbmd0aCk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChwYXJzZUFu
ZENvbXBpbGUodm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBtb2R1bGVQYXJzZXIu
bWVtb3J5KCkuZ2V0KCksIGluZm8uc2lnbmF0dXJlLCBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZv
cm1hdGlvbigpKSk7CiAgICAgfQogCiAgICAgLy8gUGF0Y2ggdGhlIGNhbGwgc2l0ZXMgZm9yIGVh
Y2ggZnVuY3Rpb24uCi0gICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlv
bj4mIGZ1bmN0aW9uUHRyIDogcmVzdWx0KSB7CisgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8RnVu
Y3Rpb25Db21waWxhdGlvbj4mIGZ1bmN0aW9uUHRyIDogbV9yZXN1bHQpIHsKICAgICAgICAgRnVu
Y3Rpb25Db21waWxhdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblB0ci5nZXQoKTsKICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogZnVuY3Rpb24tPnVubGlua2VkQ2FsbHMpCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHJlc3VsdFtjYWxsLmZ1bmN0aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwobV9yZXN1bHRbY2FsbC5mdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgp
KSk7CiAgICAgfQogCi0gICAgbWVtb3J5ID0gV1RGTW92ZShtb2R1bGVQYXJzZXIubWVtb3J5KCkp
OworICAgIG1fbWVtb3J5ID0gV1RGTW92ZShtb2R1bGVQYXJzZXIubWVtb3J5KCkpOworICAgIG1f
ZmFpbGVkID0gZmFsc2U7CiB9CiAKK1BsYW46On5QbGFuKCkgeyB9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCBmZWQxMzZhLi5iNzk0ZjFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTM2LDEzICszNiwzOSBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIE1lbW9yeTsKIAotLy8gVE9ETzogVGhpcyBz
aG91bGQgY3JlYXRlIGEgV2FzbSBNb2R1bGUgbm90IGEgbGlzdCBvZiBmdW5jdGlvbnMuCiBjbGFz
cyBQbGFuIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9y
PHVpbnQ4X3Q+IHNvdXJjZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rv
cjx1aW50OF90Pik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5QbGFuKCk7CiAKLSAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+PiByZXN1bHQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CisgICAgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFpbGVk
KCkpOworICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7CisgICAgfQorICAgIHNpemVfdCBy
ZXN1bHRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQo
KSk7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdC5zaXplKCk7CisgICAgfQorICAgIGNvbnN0IEZ1
bmN0aW9uQ29tcGlsYXRpb24qIHJlc3VsdChzaXplX3QgbikgY29uc3QKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdC5hdChu
KS5nZXQoKTsKKyAgICB9CisgICAgY29uc3QgTWVtb3J5KiBtZW1vcnkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbWVt
b3J5LmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEZ1bmN0aW9uQ29tcGlsYXRpb24+PiBtX3Jlc3VsdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVt
b3J5PiBtX21lbW9yeTsKKyAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OworICAgIFN0cmluZyBt
X2Vycm9yTWVzc2FnZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVy
cm9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3IuY3BwCmluZGV4IDAyZmY4ODUuLjNiZjU3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Iu
Y3BwCkBAIC00Nyw2ICs0NywxNCBAQCBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpKU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cgogCiBjb25zdCBD
bGFzc0luZm8gSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcjo6c19pbmZvID0geyAiV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKSB9OwogCisgICAgCitKU09iamVjdCogY3JlYXRlV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1
cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFs
T2JqZWN0LT5XZWJBc3NlbWJseUNvbXBpbGVFcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBkZWZh
dWx0U291cmNlQXBwZW5kZXIsIFR5cGVOb3RoaW5nLCB0cnVlKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgK
aW5kZXggNjU2YjhkMC4uYzE0YTM3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaApAQCAtNDcsNiArNDcs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihWTSYsIFN0cnVj
dHVyZSopOwogfTsKIAorSlNPYmplY3QqIGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yKEV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggNjdlNmQ5NS4uZjRlMTEyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JD
b25zdHJ1Y3Rvci5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihFeGVjU3RhdGUK
IHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBzdGF0ZS0+YXJndW1lbnRD
b3VudCgpID8gc3RhdGUtPmFyZ3VtZW50KDApIDoganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVl
IG1lc3NhZ2UgPSBzdGF0ZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byogc3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdU
YXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKHN0YXRlLT5jYWxsZWUoKSktPmdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseUNvbXBpbGVFcnJvclN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShzdGF0ZSwgc3RydWN0dXJl
LCBtZXNzYWdlLCBmYWxzZSkpOwpAQCAtNjEsMTAgKzYxLDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKEV4ZWNTdGF0
ZSogc3RhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90
QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciIpKTsKIH0KIAotV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvciog
V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlKiB0aGlzUHJv
dG90eXBlLCBTdHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1cmUpCitXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUqIHRoaXNQcm90b3R5cGUpCiB7CiAgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yPih2
bS5oZWFwKSkgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJl
KTsKLSAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUsIHRo
aXNTdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1By
b3RvdHlwZSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogfQogCkBAIC03Myw3ICs3Myw3IEBA
IFN0cnVjdHVyZSogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUqIHByb3RvdHlwZSwgU3RydWN0dXJlKikKK3ZvaWQgV2ViQXNzZW1ibHlDb21waWxlRXJy
b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZSogcHJvdG90eXBlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
LCBBU0NJSUxpdGVyYWwoIkNvbXBpbGVFcnJvciIpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIFJlYWRP
bmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3Ry
dWN0b3IuaAppbmRleCBkNDg1NmM5Li4zNGEwZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JD
b25zdHJ1Y3Rvci5oCkBAIC0zOSwxMyArMzksMTMgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50
ZXJuYWxGdW5jdGlvbiBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAot
ICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0m
LCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZSosIFN0cnVjdHVy
ZSopOworICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZSopOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKIHByb3RlY3RlZDoKLSAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUqLCBT
dHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUqKTsKIAogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvckNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmNwcAppbmRleCA4NWNlOWFhLi41NWJmNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAKQEAgLTU3LDEwICs1NywxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1
bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lkluc3RhbmNlIikpOwog
fQogCi1XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2Vt
Ymx5SW5zdGFuY2VQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUsIFN0cnVjdHVyZSogdGhpc1N0cnVj
dHVyZSkKK1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNz
ZW1ibHlJbnN0YW5jZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKIHsKICAgICBhdXRvKiBjb25z
dHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcih2bSwg
c3RydWN0dXJlKTsKLSAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90
b3R5cGUsIHRoaXNTdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2
bSwgdGhpc1Byb3RvdHlwZSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogfQogCkBAIC02OSwx
MiArNjksMTEgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWMKICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5SW5zdGFuY2VQ
cm90b3R5cGUqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit2b2lkIFdlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJs
eUluc3RhbmNlUHJvdG90eXBlKiBwcm90b3R5cGUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0sIEFTQ0lJTGl0ZXJhbCgiSW5zdGFuY2UiKSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5
IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICBtX0luc3RhbmNlU3RydWN0dXJlLnNldCh2
bSwgdGhpcywgc3RydWN0dXJlKTsKIH0KIAogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
OjpXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTk5LDcgKzk4LDYgQEAgdm9pZCBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmkKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX0luc3RhbmNlU3RydWN0dXJlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oCmluZGV4IGRkZGRmNzEuLjJl
ODU3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oCkBAIC0zOSwyMyArMzksMTkgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZTsKIAotICAgIHN0YXRpYyBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90
b3R5cGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90
eXBlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFN0cnVjdHVy
ZSogSW5zdGFuY2VTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX0luc3RhbmNlU3RydWN0dXJl
LmdldCgpOyB9Ci0KIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2Vi
QXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZSosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlKik7CiAKIHByaXZhdGU6
CiAgICAgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwotCi0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9JbnN0YW5jZVN0cnVjdHVyZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAppbmRl
eCBhZDUyNWNmLi4xYzU4MmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApAQCAtNTcs
MTAgKzU3LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dl
YkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1lbW9yeSIpKTsKIH0KIAotV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiB0aGlz
UHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1cmUpCitXZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90
b3R5cGUpCiB7CiAgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICBjb25zdHJ1Y3Rvci0+ZmluaXNo
Q3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUsIHRoaXNTdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVj
dG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CiAgICAgcmV0dXJuIGNvbnN0
cnVjdG9yOwogfQogCkBAIC02OSwxMiArNjksMTEgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoK
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZv
aWQgV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBX
ZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3ZvaWQgV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSogcHJvdG90eXBlKQogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSIpKTsKICAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90
b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigx
KSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwotICAgIG1fTWVtb3J5U3RydWN0
dXJlLnNldCh2bSwgdGhpcywgc3RydWN0dXJlKTsKIH0KIAogV2ViQXNzZW1ibHlNZW1vcnlDb25z
dHJ1Y3Rvcjo6V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQpAQCAtOTksNyArOTgsNiBAQCB2b2lkIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3Ry
dWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaQogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX01lbW9yeVN0cnVjdHVyZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oCmluZGV4IDM0Y2QxMjAuLjQ2NjA2
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgKQEAgLTM5LDIzICszOSwxOSBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFN0cnVjdHVyZSogTWVtb3J5U3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9NZW1vcnlTdHJ1Y3R1cmUuZ2V0KCk7IH0KLQogcHJvdGVj
dGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZSosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHlwZSopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX01lbW9yeVN0cnVjdHVyZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCBlOTdiMDExLi5lOTAzZWVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtMjgsOCArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJG
dW5jdGlvblByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCisjaW5jbHVkZSAiV2FzbVBsYW4uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZVBy
b3RvdHlwZS5oIgogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5sdXQu
aCIKQEAgLTQ1LDkgKzUxLDMwIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luCiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRv
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBz
Y29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24n
dCB5ZXQgaW1wbGVtZW50IHRoZSBNb2R1bGUgY29uc3RydWN0b3IgcHJvcGVydHkiKSkpKTsKKyAg
ICBKU1ZhbHVlIHZhbCA9IHN0YXRlLT5hcmd1bWVudCgwKTsKKyAgICBKU0FycmF5QnVmZmVyKiBh
cnJheUJ1ZmZlciA9IHZhbC5nZXRPYmplY3QoKSA/IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZl
cio+KHZhbC5nZXRPYmplY3QoKSkgOiBudWxscHRyOworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiBh
cnJheUJ1ZmZlclZpZXcgPSB2YWwuZ2V0T2JqZWN0KCkgPyBqc0R5bmFtaWNDYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4odmFsLmdldE9iamVjdCgpKSA6IG51bGxwdHI7CisgICAgaWYgKCEoYXJyYXlC
dWZmZXIgfHwgYXJyYXlCdWZmZXJWaWV3KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVND
SUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5Nb2R1bGUgbXVzdCBiZSBh
biBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIiKSwgZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZhbCkpKSk7CisKKyAgICBpZiAoYXJyYXlCdWZmZXJW
aWV3ID8gYXJyYXlCdWZmZXJWaWV3LT5pc05ldXRlcmVkKCkgOiBhcnJheUJ1ZmZlci0+aW1wbCgp
LT5pc05ldXRlcmVkKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgi
dW5kZXJseWluZyBUeXBlZEFycmF5IGhhcyBiZWVuIGRldGF0Y2hlZCBmcm9tIHRoZSBBcnJheUJ1
ZmZlciIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsKSkp
KTsKKworICAgIHNpemVfdCBieXRlT2Zmc2V0ID0gYXJyYXlCdWZmZXJWaWV3ID8gYXJyYXlCdWZm
ZXJWaWV3LT5ieXRlT2Zmc2V0KCkgOiAwOworICAgIHNpemVfdCBieXRlU2l6ZSA9IGFycmF5QnVm
ZmVyVmlldyA/IGFycmF5QnVmZmVyVmlldy0+bGVuZ3RoKCkgOiBhcnJheUJ1ZmZlci0+aW1wbCgp
LT5ieXRlTGVuZ3RoKCk7CisgICAgY29uc3QgYXV0byogYmFzZSA9IGFycmF5QnVmZmVyVmlldyA/
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlclZpZXctPnZlY3RvcigpKSA6IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCkpOworCisgICAgV2Fz
bTo6UGxhbiBwbGFuKHZtLCBiYXNlICsgYnl0ZU9mZnNldCwgYnl0ZVNpemUpOworICAgIGlmIChw
bGFuLmZhaWxlZCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlV2ViQXNzZW1ibHlDb21waWxlRXJyb3Ioc3RhdGUsIHBs
YW4uZXJyb3JNZXNzYWdlKCkpKSk7CisKKyAgICAvLyBGSVhNRSB0YWtlIGNvbnRlbnQgZnJvbSBQ
bGFuLgorCisgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0
aW9uKHN0YXRlLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0
cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNy
ZWF0ZSh2bSwgc3RydWN0dXJlKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogc3RhdGUpCkBAIC01Nywx
MCArODQsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2Vi
QXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuTW9kdWxlIikpOwogfQogCi1XZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQ
cm90b3R5cGUsIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSkKK1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhpc1Byb3Rv
dHlwZSkKIHsKICAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwotICAgIGNvbnN0cnVjdG9yLT5maW5pc2hD
cmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSwgdGhpc1N0cnVjdHVyZSk7CisgICAgY29uc3RydWN0
b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90eXBlKTsKICAgICByZXR1cm4gY29uc3Ry
dWN0b3I7CiB9CiAKQEAgLTY5LDEyICs5NiwxMSBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kgog
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9p
ZCBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdl
YkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiBwcm90b3R5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQordm9pZCBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiBwcm90b3R5cGUpCiB7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIEFTQ0lJTGl0ZXJhbCgiTW9kdWxlIikpOwogICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3Rv
dHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEp
LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7Ci0gICAgbV9Nb2R1bGVTdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yOjpXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkBAIC05OSw3ICsxMjUsNiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaQogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX01vZHVsZVN0cnVjdHVyZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oCmluZGV4IDU2MDU3YTYuLmU0NWYx
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKQEAgLTM5LDIzICszOSwxOSBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOwogCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3Iq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFN0cnVjdHVyZSogTW9kdWxlU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9Nb2R1bGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KLQogcHJvdGVj
dGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseU1vZHVsZVByb3Rv
dHlwZSosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3Nl
bWJseU1vZHVsZVByb3RvdHlwZSopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX01vZHVsZVN0cnVjdHVyZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3JDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcAppbmRleCA1NTI4MDIyLi4wMWIz
MmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcApAQCAtNjEsMTAg
KzYxLDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yKEV4ZWNTdGF0ZSogc3RhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIpKTsKIH0KIAotV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5UnVu
dGltZUVycm9yUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHRoaXNTdHJ1Y3R1
cmUpCitXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCiB7CiAgICAg
YXV0byogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3Jl
YXRpb24odm0sIHRoaXNQcm90b3R5cGUsIHRoaXNTdHJ1Y3R1cmUpOworICAgIGNvbnN0cnVjdG9y
LT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSk7CiAgICAgcmV0dXJuIGNvbnN0cnVj
dG9yOwogfQogCkBAIC03Myw3ICs3Myw3IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdl
YkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSwgU3RydWN0dXJlKikK
K3ZvaWQgV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBBU0NJSUxpdGVyYWwoIlJ1bnRpbWVFcnJvciIp
KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBwcm90b3R5cGUsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuaAppbmRleCBiZTQxOWQ3Li43N2ZiNmU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1
bnRpbWVFcnJvckNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5oCkBAIC0zOSwxMyArMzksMTMg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SGFzU3RhdGljUHJvcGVydHlUYWJsZTsKIAotICAgIHN0YXRpYyBXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvclByb3RvdHlwZSosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvclByb3RvdHlwZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lO
Rk87CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3JQcm90b3R5cGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlSdW50aW1lRXJyb3JQcm90b3R5cGUqKTsKIAogcHJpdmF0
ZToKICAgICBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJl
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAppbmRleCA0YjY2MDhjLi5jYWE3ZTllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTU3LDEwICs1NywxMCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNTdGF0ZSog
c3RhdGUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90
QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5LlRh
YmxlIikpOwogfQogCi1XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUsIFN0cnVjdHVyZSogdGhpc1N0cnVj
dHVyZSkKK1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlUYWJsZUNvbnN0
cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKIHsKICAgICBhdXRvKiBjb25zdHJ1Y3RvciA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKLSAg
ICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUsIHRoaXNTdHJ1
Y3R1cmUpOworICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlw
ZSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogfQogCkBAIC02OSwxMiArNjksMTEgQEAgU3Ry
dWN0dXJlKiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSogcHJvdG90eXBlLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3ZvaWQgV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqIHByb3RvdHlw
ZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSIp
KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
ICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwotICAg
IG1fVGFibGVTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBXZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3I6OldlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3RvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtOTksNyArOTgsNiBAQCB2b2lkIFdlYkFzc2VtYmx5
VGFibGVDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fVGFibGVTdHJ1Y3R1cmUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgKaW5kZXggZTA4ZTcz
NS4uYTYxYzdhYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmgKQEAgLTM5LDIzICszOSwxOSBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1
Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSos
IFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqKTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgU3RydWN0dXJlKiBUYWJsZVN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fVGFibGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KLQogcHJvdGVj
dGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseVRhYmxlUHJvdG90
eXBlKiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2Vt
Ymx5VGFibGVQcm90b3R5cGUqKTsKIAogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5
cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX1RhYmxlU3RydWN0dXJlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0tIAoy
LjEwLjEKCg==
</data>
<flag name="commit-queue"
          id="315752"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292762</attachid>
            <date>2016-10-25 09:21:12 -0700</date>
            <delta_ts>2016-10-25 10:26:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-Module.patch</filename>
            <type>text/plain</type>
            <size>99867</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBhNDA3YTE1YTNhM2YzNDU1NjEwZWY4NWI5N2ZkMTNkN2ViNTlkNDlkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDI0IE9jdCAyMDE2IDExOjEwOjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgTW9kdWxlCgpUaGlzIGltcGxlbWVudGF0aW9uIGFsbG93
cyB1cyB0bzoKIC0gU3luY3Job25vdXNseSBjcmVhdGUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgd2l0
aCBhIHR5cGVkIGFycmF5LgogLSBDcmVhdGVzIGEgY29tcGlsYXRpb24gcGxhbi4KIC0gUGFyc2Ug
dGhlIE1vZHVsZSBhbmQgY3JlYXRlcyBjb3JyZXNwb25kaW5nIGNvZGUuCiAtIFRocm93IFdlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciB3aXRoIG1pbGRseSBoZWxwZnVsIFsqXSBlcnJvciBtZXNzYWdl
cyBvbgogICBmYWlsdXJlLgoKQ29uc3VsdCB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGV4cGVj
dGVkIGJlaGF2aW9yOiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2Iv
bWFzdGVyL0pTLm1kI3dlYmFzc2VtYmx5bW9kdWxlLWNvbnN0cnVjdG9yCgpGb3Igbm93IHRoZSBp
bXBsZW1lbnRhdGlvbiBkaXNjYXJkcyB0aGUgZ2VuZXJhdGVkIGNvZGUuCgpUaGUgbmV4dCBzdGVw
cyB3aWxsIGJlOgogLSBFeHBvc2UgYSBNb2R1bGUncyBleHBvcnRzLgogLSBJbXBsZW1lbnQgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UsIHdoaWNoIGFsbG93cyBpbnN0YW50aWF0aW5nIGFuZCBydW5uaW5n
IGEKICAgY29tcGlsZWQgTW9kdWxlLgogLSBCZWVmIHVwIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0
dXJlIHVuZGVyIEpTVGVzdHMvd2FzbSBzbyB0aGF0IG1vcmUgY29tcGxleAogICBtb2R1bGVzIGNh
biBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgKGluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYml0cyBieSBo
YW5kKS4KClRoaXMgcGF0Y2ggYWxzbzoKIC0gQWRkcyBhc3NlcnQuaW5zdGFuY2VvZiBpbiBhc3Nl
cnQuanMuCiAtIFJlZmFjdG9ycyBXYXNtOjpQYXJzZXIgYW5kIGZyaWVuZHMgdG8gYWNjZXB0IGNv
bnN0IHVpbnQ4X3QqIGFzIHdlbGwgYXMgYQogICBWZWN0b3IsIHRvIGF2b2lkIGNvcHlpbmcgd2hl
biBpbnZva2VkIHN5bmNocm9ub3VzbHkuCiAtIFJlbW92ZSB1c2VsZXNzIFN0cnVjdHVyZSBmcm9t
IHNvbWUgb2YgdGhlIHdhc20gY29uc3RydWN0b3JzOiB0aGV5J3JlIGFscmVhZHkKICAgb24gdGhl
IEpTR2xvYmFsT2JqZWN0LCB2aXNpdGVkIHByb3Blcmx5IGFuZCBhbGwuCiAtIEZpeCBvZmYtYnkt
b25lIGVycm9yIGluIHBhcnNpbmc6IFBhcnNlcjo6cGFyc2VVSW50MzIgZmFpbGVkIGlmIHRoZSBp
bnRlZ2VyCiAgIHdhcyBleGFjdGx5IGF0IGVuZCBvZiBmaWxlLgoKIFsqXSBPbiBlcnJvciBtZXNz
YWdlcyB3aGlsZSBwYXJzaW5nOiBJIGZpbGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM5MTkKLS0tCiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICA0NyArKysrCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAyNiArLQogSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X2Jhc2ljX2FwaS5qcyAgICAgICAgICAgICAgfCAgNDggKysrLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAxMTEgKysrKysrKysKIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwIHwgICAyICstCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmggICB8ICAgMiArCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgICB8ICAgMiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcCAgICAgICAgICAgICAgICAgfCAy
OTQgKysrKysrKysrKy0tLS0tLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaCAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oICAgIHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8ICA3NCArKysrLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCAgICAgIHwgIDI2ICstCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggICAgICAgICAgICB8ICAzOSArLS0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCAgICAgICAgICAgIHwgIDI2ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oICAgICAgICAgICAgICB8ICAz
NCArKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwICAgICAgICAg
IHwgICA4ICsKIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCAgICAgICAg
ICAgIHwgICAyICsKIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0
b3IuY3BwIHwgICA4ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0
cnVjdG9yLmggICB8ICAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcCAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5oICAgICAgIHwgICA4ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgOCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5oICAgICAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuY3BwICAgICAgIHwgIDM5ICsrLQogLi4uL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oICAgICAgICAgfCAgIDggKy0KIC4uLi93YXNtL2pz
L1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwIHwgICA2ICstCiAuLi4vd2Fz
bS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmggICB8ICAgNCArLQogLi4u
L3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCAgICAgICAgfCAgIDggKy0K
IC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5oICAgICAgICAgIHwgICA4
ICstCiAzMCBmaWxlcyBjaGFuZ2VkLCA1OTQgaW5zZXJ0aW9ucygrKSwgMjg4IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggYWQ2MDAzMS4uYzIyYmZiOCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxNi0xMC0yNCAgSkYgQmFzdGll
biAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBp
bXBsZW1lbnQgTW9kdWxlCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdXMg
dG86CisgICAgICAgICAtIFN5bmNyaG9ub3VzbHkgY3JlYXRlIGEgV2ViQXNzZW1ibHkuTW9kdWxl
IHdpdGggYSB0eXBlZCBhcnJheS4KKyAgICAgICAgIC0gQ3JlYXRlcyBhIGNvbXBpbGF0aW9uIHBs
YW4uCisgICAgICAgICAtIFBhcnNlIHRoZSBNb2R1bGUgYW5kIGNyZWF0ZXMgY29ycmVzcG9uZGlu
ZyBjb2RlLgorICAgICAgICAgLSBUaHJvdyBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Igd2l0aCBt
aWxkbHkgaGVscGZ1bCBbKl0gZXJyb3IgbWVzc2FnZXMgb24KKyAgICAgICAgICAgZmFpbHVyZS4K
KworICAgICAgICBDb25zdWx0IHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZXhwZWN0ZWQgYmVo
YXZpb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNpZ24vYmxvYi9tYXN0ZXIv
SlMubWQjd2ViYXNzZW1ibHltb2R1bGUtY29uc3RydWN0b3IKKworICAgICAgICBGb3Igbm93IHRo
ZSBpbXBsZW1lbnRhdGlvbiBkaXNjYXJkcyB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgICAg
VGhlIG5leHQgc3RlcHMgd2lsbCBiZToKKyAgICAgICAgIC0gRXhwb3NlIGEgTW9kdWxlJ3MgZXhw
b3J0cy4KKyAgICAgICAgIC0gSW1wbGVtZW50IFdlYkFzc2VtYmx5Lkluc3RhbmNlLCB3aGljaCBh
bGxvd3MgaW5zdGFudGlhdGluZyBhbmQgcnVubmluZyBhCisgICAgICAgICAgIGNvbXBpbGVkIE1v
ZHVsZS4KKyAgICAgICAgIC0gQmVlZiB1cCB0aGUgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSB1bmRl
ciBKU1Rlc3RzL3dhc20gc28gdGhhdCBtb3JlIGNvbXBsZXgKKyAgICAgICAgICAgbW9kdWxlcyBj
YW4gYmUgY3JlYXRlZCBhbmQgdGVzdGVkIChpbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGJpdHMgYnkg
aGFuZCkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvOgorICAgICAgICAgLSBBZGRzIGFzc2Vy
dC5pbnN0YW5jZW9mIGluIGFzc2VydC5qcy4KKyAgICAgICAgIC0gUmVmYWN0b3JzIFdhc206OlBh
cnNlciBhbmQgZnJpZW5kcyB0byBhY2NlcHQgY29uc3QgdWludDhfdCogYXMgd2VsbCBhcyBhCisg
ICAgICAgICAgIFZlY3RvciwgdG8gYXZvaWQgY29weWluZyB3aGVuIGludm9rZWQgc3luY2hyb25v
dXNseS4KKyAgICAgICAgIC0gUmVtb3ZlIHVzZWxlc3MgU3RydWN0dXJlIGZyb20gc29tZSBvZiB0
aGUgd2FzbSBjb25zdHJ1Y3RvcnM6IHRoZXkncmUgYWxyZWFkeQorICAgICAgICAgICBvbiB0aGUg
SlNHbG9iYWxPYmplY3QsIHZpc2l0ZWQgcHJvcGVybHkgYW5kIGFsbC4KKyAgICAgICAgIC0gRml4
IG9mZi1ieS1vbmUgZXJyb3IgaW4gcGFyc2luZzogUGFyc2VyOjpwYXJzZVVJbnQzMiBmYWlsZWQg
aWYgdGhlIGludGVnZXIKKyAgICAgICAgICAgd2FzIGV4YWN0bHkgYXQgZW5kIG9mIGZpbGUuCisK
KyAgICAgICAgIFsqXSBPbiBlcnJvciBtZXNzYWdlcyB3aGlsZSBwYXJzaW5nOiBJIGZpbGVkIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKworICAgICAgICBX
ZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBNb2R1bGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkwMworCisgICAgICAgIFJldmlld2VkIGJ5
IEtlaXRoIE1pbGxlci4KKworICAgICAgICAqIHdhc20vYXNzZXJ0LmpzOiB1c2UgdW5kZXJzY29y
ZSBpbiBuYW1lLCBhbmQgcmVtb3ZlIHdoZW4gZXhwb3J0aW5nIHRvIGF2b2lkIGNsYXNpbmcgd2l0
aCBidWlsdGluIG5hbWVzCisgICAgICAgIChjb25zdC5fbm90VW5kZWYpOgorICAgICAgICAoY29u
c3QuX2lzVW5kZWYpOgorICAgICAgICAoY29uc3QuX2VxKToKKyAgICAgICAgKGNvbnN0Ll9nZSk6
CisgICAgICAgIChjb25zdC5fdGhyb3dzKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X2Jh
c2ljX2FwaS5qczogdGVzdCB0aGUgV2ViQXNzZW1ibHkuTW9kdWxlIEFQSQorICAgICAgICAoY29u
c3QuYy5pbi5jb25zdHJ1Y3RvclByb3BlcnRpZXMuc3dpdGNoKToKKwogMjAxNi0xMC0yNCAgS2Vp
dGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXYXNtIHNob3Vs
ZCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vYXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwppbmRleCA1YzcxY2M0Li4y
ZWE1ZjcwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCisrKyBiL0pTVGVzdHMv
d2FzbS9hc3NlcnQuanMKQEAgLTIzLDI5ICsyMywyOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci1leHBvcnQgY29uc3Qgbm90VW5kZWYgPSAodikgPT4geworY29uc3QgX25vdFVuZGVmID0gKHYp
ID0+IHsKICAgICBpZiAodHlwZW9mIHYgPT09ICJ1bmRlZmluZWQiKQogICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlNob3VsZG4ndCBiZSB1bmRlZmluZWQiKTsKIH07CiAKLWV4cG9ydCBjb25zdCBp
c1VuZGVmID0gKHYpID0+IHsKK2NvbnN0IF9pc1VuZGVmID0gKHYpID0+IHsKICAgICBpZiAodHlw
ZW9mIHYgIT09ICJ1bmRlZmluZWQiKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3VsZCBi
ZSB1bmRlZmluZWQiKTsKIH07CiAKLWV4cG9ydCBjb25zdCBlcSA9IChsaHMsIHJocykgPT4gewor
Y29uc3QgX2VxID0gKGxocywgcmhzKSA9PiB7CiAgICAgaWYgKGxocyAhPT0gcmhzKQogICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYE5vdCB0aGUgc2FtZTogIiR7bGhzfSIgYW5kICIke3Joc30iYCk7
CiB9OwogCi1leHBvcnQgY29uc3QgZ2UgPSAobGhzLCByaHMpID0+IHsKLSAgICBub3RVbmRlZihs
aHMpOwotICAgIG5vdFVuZGVmKHJocyk7Citjb25zdCBfZ2UgPSAobGhzLCByaHMpID0+IHsKKyAg
ICBfbm90VW5kZWYobGhzKTsKKyAgICBfbm90VW5kZWYocmhzKTsKICAgICBpZiAoIShsaHMgPj0g
cmhzKSkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZDogIiR7bGhzfSIgPCAiJHty
aHN9ImApOwogfTsKIAotZXhwb3J0IGNvbnN0IHRocm93cyA9IChmdW5jLCB0eXBlLCBtZXNzYWdl
LCAuLi5hcmdzKSA9PiB7Citjb25zdCBfdGhyb3dzID0gKGZ1bmMsIHR5cGUsIG1lc3NhZ2UsIC4u
LmFyZ3MpID0+IHsKICAgICB0cnkgewogICAgICAgICBmdW5jKC4uLmFyZ3MpOwogICAgIH0gY2F0
Y2ggKGUpIHsKQEAgLTU1LDMgKzU1LDE1IEBAIGV4cG9ydCBjb25zdCB0aHJvd3MgPSAoZnVuYywg
dHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewogICAgIH0KICAgICB0aHJvdyBuZXcgRXJyb3Io
YEV4cGVjdGVkIHRvIHRocm93IGEgJHt0eXBlLm5hbWV9IHdpdGggbWVzc2FnZSAiJHttZXNzYWdl
fSJgKTsKIH07CisKK2NvbnN0IF9pbnN0YW5jZW9mID0gKG9iaiwgdHlwZSkgPT4gb2JqIGluc3Rh
bmNlb2YgdHlwZTsKKworLy8gVXNlIHVuZGVyc2NvcmUgbmFtZXMgdG8gYXZvaWQgY2xhc2hpbmcg
d2l0aCBidWlsdGluIG5hbWVzLgorZXhwb3J0IHsKKyAgICBfbm90VW5kZWYgYXMgbm90VW5kZWYs
CisgICAgX2lzVW5kZWYgYXMgaXNVbmRlZiwKKyAgICBfZXEgYXMgZXEsCisgICAgX2dlIGFzIGdl
LAorICAgIF90aHJvd3MgYXMgdGhyb3dzLAorICAgIF9pbnN0YW5jZW9mIGFzIGluc3RhbmNlb2Ys
Cit9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKaW5kZXggYzRlMTkyNy4uNGVl
ODg1MyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwor
KysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCkBAIC0xLDYgKzEsOSBA
QAogaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgKiBhcyB1
dGlsaXRpZXMgZnJvbSAnLi4vdXRpbGl0aWVzLmpzJzsKIAorY29uc3QgdmVyc2lvbiA9IDB4QzsK
K2NvbnN0IGVtcHR5TW9kdWxlID0gVWludDhBcnJheS5vZigweDAsIDB4NjEsIDB4NzMsIDB4NmQs
IHZlcnNpb24sIDB4MDAsIDB4MDAsIDB4MDApOworCiBjb25zdCBjaGVja093blByb3BlcnR5RGVz
Y3JpcHRvciA9IChvYmosIHByb3AsIGV4cGVjdCkgPT4gewogICAgIGNvbnN0IGRlc2NyaXB0b3Ig
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7CiAgICAgYXNzZXJ0
LmVxKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlLCBleHBlY3QudHlwZW9mdmFsdWUpOwpAQCAtMTQs
MTIgKzE3LDEyIEBAIGNvbnN0IGZ1bmN0aW9uUHJvcGVydGllcyA9IHsKICAgICAiY29tcGlsZSI6
ICB7IGxlbmd0aDogMSB9LAogfTsKIGNvbnN0IGNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHsKLSAg
ICAiTW9kdWxlIjogICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRy
dWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwgaXNF
cnJvcjogZmFsc2UgfSwKLSAgICAiSW5zdGFuY2UiOiAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0
aW9uIiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFs
c2UsIGxlbmd0aDogMSwgaXNFcnJvcjogZmFsc2UgfSwKLSAgICAiTWVtb3J5IjogICAgICAgeyB0
eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1
ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwgaXNFcnJvcjogZmFsc2UgfSwKLSAgICAi
VGFibGUiOiAgICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRydWUs
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwgaXNFcnJv
cjogZmFsc2UgfSwKLSAgICAiQ29tcGlsZUVycm9yIjogeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9u
Iiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2Us
IGxlbmd0aDogMSwgaXNFcnJvcjogdHJ1ZSAgfSwKLSAgICAiUnVudGltZUVycm9yIjogeyB0eXBl
b2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwg
ZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSwgaXNFcnJvcjogdHJ1ZSAgfSwKKyAgICAiTW9k
dWxlIjogICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRydWUsIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSB9LAorICAgICJJ
bnN0YW5jZSI6ICAgICB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTogdHJ1ZSwg
Y29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxIH0sCisgICAg
Ik1lbW9yeSI6ICAgICAgIHsgdHlwZW9mdmFsdWU6ICJmdW5jdGlvbiIsIHdyaXRhYmxlOiB0cnVl
LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCBsZW5ndGg6IDEgfSwKKyAg
ICAiVGFibGUiOiAgICAgICAgeyB0eXBlb2Z2YWx1ZTogImZ1bmN0aW9uIiwgd3JpdGFibGU6IHRy
dWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGxlbmd0aDogMSB9LAor
ICAgICJDb21waWxlRXJyb3IiOiB7IHR5cGVvZnZhbHVlOiAiZnVuY3Rpb24iLCB3cml0YWJsZTog
dHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgbGVuZ3RoOiAxIH0s
CisgICAgIlJ1bnRpbWVFcnJvciI6IHsgdHlwZW9mdmFsdWU6ICJmdW5jdGlvbiIsIHdyaXRhYmxl
OiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlLCBsZW5ndGg6IDEg
fSwKIH07CiAKIApAQCAtNDQsNyArNDcsMzAgQEAgZm9yIChjb25zdCBjIGluIGNvbnN0cnVjdG9y
UHJvcGVydGllcykgewogICAgIGNoZWNrT3duUHJvcGVydHlEZXNjcmlwdG9yKFdlYkFzc2VtYmx5
LCBjLCBjb25zdHJ1Y3RvclByb3BlcnRpZXNbY10pOwogICAgIGNoZWNrT3duUHJvcGVydHlEZXNj
cmlwdG9yKFdlYkFzc2VtYmx5W2NdLCAicHJvdG90eXBlIiwgeyB0eXBlb2Z2YWx1ZTogIm9iamVj
dCIsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogZmFs
c2UgfSk7CiAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBXZWJBc3NlbWJseVtjXSgpLCBUeXBlRXJy
b3IsIGBjYWxsaW5nIFdlYkFzc2VtYmx5LiR7Y30gY29uc3RydWN0b3Igd2l0aG91dCBuZXcgaXMg
aW52YWxpZGApOwotICAgIGlmIChjb25zdHJ1Y3RvclByb3BlcnRpZXNbY10uaXNFcnJvcikgewor
ICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgIk1vZHVsZSI6CisgICAgICAgIGZvciAoY29uc3Qg
aW52YWxpZCBvZiBbdW5kZWZpbmVkLCAiIiwgMSwge30sIFtdXSkKKyAgICAgICAgICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpLCBUeXBlRXJyb3IsIGBm
aXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5Nb2R1bGUgbXVzdCBiZSBhbiBBcnJheUJ1ZmZl
clZpZXcgb3IgYW4gQXJyYXlCdWZmZXIgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShp
bnZhbGlkKScpYCk7CisgICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIFtuZXcgQXJyYXlCdWZm
ZXIoKSwgbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigpKSwgbmV3IEludDhBcnJheSgpLCBu
ZXcgVWludDhBcnJheSgpLCBuZXcgVWludDhDbGFtcGVkQXJyYXkoKSwgbmV3IEludDE2QXJyYXko
KSwgbmV3IFVpbnQxNkFycmF5KCksIG5ldyBJbnQzMkFycmF5KCksIG5ldyBVaW50MzJBcnJheSgp
LCBuZXcgRmxvYXQzMkFycmF5KCksIG5ldyBGbG9hdDY0QXJyYXkoKV0pCisgICAgICAgICAgICAv
LyBGSVhNRSB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBXZWJBc3NlbWJseS5Db21waWxlRXJyb3Iu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM3NjgKKyAgICAgICAg
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKGJ1ZmZlciksIEVycm9y
LCBgTW9kdWxlIGlzIDAgYnl0ZXMsIGV4cGVjdGVkIGF0IGxlYXN0IDggYnl0ZXMgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpJylgKTsKKyAgICAgICAgYXNzZXJ0Lmluc3Rh
bmNlb2YobmV3IFdlYkFzc2VtYmx5W2NdKGVtcHR5TW9kdWxlKSwgV2ViQXNzZW1ibHkuTW9kdWxl
KTsKKyAgICAgICAgLy8gRklYTUUgdGVzdCBuZXV0ZXJlZCBUeXBlZEFycmF5IGFuZCBUeXBlZEFy
cmF5Vmlldy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzg5OQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbnN0YW5jZSI6CisgICAgICAgIC8vIEZJWE1FIElt
cGxlbWVudCBhbmQgdGVzdCB0aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBqdXN0IHRo
cm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1CisgICAg
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKCksIEVycm9yLCBgV2Vi
QXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSAke2N9IGNvbnN0cnVjdG9yIHByb3Bl
cnR5YCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIk1lbW9yeSI6CisgICAgICAgIC8vIEZJ
WE1FIEltcGxlbWVudCBhbmQgdGVzdCB0aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBq
dXN0IHRocm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1
CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKCksIEVycm9y
LCBgV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSAke2N9IGNvbnN0cnVjdG9y
IHByb3BlcnR5YCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIlRhYmxlIjoKKyAgICAgICAg
Ly8gRklYTUUgSW1wbGVtZW50IGFuZCB0ZXN0IHRoZXNlIEFQSXMgZnVydGhlci4gRm9yIG5vdyB0
aGV5IGp1c3QgdGhyb3cuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTk3NzUKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oKSwg
RXJyb3IsIGBXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29uc3Ry
dWN0b3IgcHJvcGVydHlgKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiQ29tcGlsZUVycm9y
IjoKKyAgICBjYXNlICJSdW50aW1lRXJyb3IiOiB7CiAgICAgICAgIGNvbnN0IGUgPSBuZXcgV2Vi
QXNzZW1ibHlbY107CiAgICAgICAgIGFzc2VydC5lcShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHlb
Y10sIHRydWUpOwogICAgICAgICBhc3NlcnQuZXEoZSBpbnN0YW5jZW9mIEVycm9yLCB0cnVlKTsK
QEAgLTU0LDE2ICs4MCwxMiBAQCBmb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0b3JQcm9wZXJ0aWVz
KSB7CiAgICAgICAgIGNvbnN0IHNpbGx5U3RyaW5nID0gInVoLW9oISI7CiAgICAgICAgIGNvbnN0
IGUyID0gbmV3IFdlYkFzc2VtYmx5W2NdKHNpbGx5U3RyaW5nKTsKICAgICAgICAgYXNzZXJ0LmVx
KGUyLm1lc3NhZ2UsIHNpbGx5U3RyaW5nKTsKKyAgICB9IGJyZWFrOworICAgIGRlZmF1bHQ6IHRo
cm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gZXJyb3I6IHVuZXhwZWN0ZWQgY29uc3RydWN0
b3IgcHJvcGVydHkgIiR7Y30iYCk7CiAgICAgfQogfQogCiAvLyBGSVhNRSBJbXBsZW1lbnQgYW5k
IHRlc3QgdGhlc2UgQVBJcyBmdXJ0aGVyLiBGb3Igbm93IHRoZXkganVzdCB0aHJvdy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTc3NQotCiBmb3IgKGNvbnN0IGYg
aW4gZnVuY3Rpb25Qcm9wZXJ0aWVzKSB7CiAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBXZWJBc3Nl
bWJseVtmXSgpLCBFcnJvciwgYFdlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUg
JHtmfSBmdW5jdGlvbiBwcm9wZXJ0eWApOwogfQotCi1mb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0
b3JQcm9wZXJ0aWVzKSB7Ci0gICAgaWYgKCFjb25zdHJ1Y3RvclByb3BlcnRpZXNbY10uaXNFcnJv
cikKLSAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oKSwgRXJy
b3IsIGBXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlICR7Y30gY29uc3RydWN0
b3IgcHJvcGVydHlgKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDY2YzYwZTQuLmIz
MzE0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAxNi0x
MC0yNCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgTW9kdWxlCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRh
dGlvbiBhbGxvd3MgdXMgdG86CisgICAgICAgICAtIFN5bmNyaG9ub3VzbHkgY3JlYXRlIGEgV2Vi
QXNzZW1ibHkuTW9kdWxlIHdpdGggYSB0eXBlZCBhcnJheS4KKyAgICAgICAgIC0gQ3JlYXRlcyBh
IGNvbXBpbGF0aW9uIHBsYW4uCisgICAgICAgICAtIFBhcnNlIHRoZSBNb2R1bGUgYW5kIGNyZWF0
ZXMgY29ycmVzcG9uZGluZyBjb2RlLgorICAgICAgICAgLSBUaHJvdyBXZWJBc3NlbWJseS5Db21w
aWxlRXJyb3Igd2l0aCBtaWxkbHkgaGVscGZ1bCBbKl0gZXJyb3IgbWVzc2FnZXMgb24KKyAgICAg
ICAgICAgZmFpbHVyZS4KKworICAgICAgICBDb25zdWx0IHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBm
b3IgZXhwZWN0ZWQgYmVoYXZpb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNp
Z24vYmxvYi9tYXN0ZXIvSlMubWQjd2ViYXNzZW1ibHltb2R1bGUtY29uc3RydWN0b3IKKworICAg
ICAgICBGb3Igbm93IHRoZSBpbXBsZW1lbnRhdGlvbiBkaXNjYXJkcyB0aGUgZ2VuZXJhdGVkIGNv
ZGUuCisKKyAgICAgICAgVGhlIG5leHQgc3RlcHMgd2lsbCBiZToKKyAgICAgICAgIC0gRXhwb3Nl
IGEgTW9kdWxlJ3MgZXhwb3J0cy4KKyAgICAgICAgIC0gSW1wbGVtZW50IFdlYkFzc2VtYmx5Lklu
c3RhbmNlLCB3aGljaCBhbGxvd3MgaW5zdGFudGlhdGluZyBhbmQgcnVubmluZyBhCisgICAgICAg
ICAgIGNvbXBpbGVkIE1vZHVsZS4KKyAgICAgICAgIC0gQmVlZiB1cCB0aGUgdGVzdGluZyBpbmZy
YXN0cnVjdHVyZSB1bmRlciBKU1Rlc3RzL3dhc20gc28gdGhhdCBtb3JlIGNvbXBsZXgKKyAgICAg
ICAgICAgbW9kdWxlcyBjYW4gYmUgY3JlYXRlZCBhbmQgdGVzdGVkIChpbnN0ZWFkIG9mIHdyaXRp
bmcgdGhlIGJpdHMgYnkgaGFuZCkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvOgorICAgICAg
ICAgLSBBZGRzIGFzc2VydC5pbnN0YW5jZW9mIGluIGFzc2VydC5qcy4KKyAgICAgICAgIC0gUmVm
YWN0b3JzIFdhc206OlBhcnNlciBhbmQgZnJpZW5kcyB0byBhY2NlcHQgY29uc3QgdWludDhfdCog
YXMgd2VsbCBhcyBhCisgICAgICAgICAgIFZlY3RvciwgdG8gYXZvaWQgY29weWluZyB3aGVuIGlu
dm9rZWQgc3luY2hyb25vdXNseS4KKyAgICAgICAgIC0gUmVtb3ZlIHVzZWxlc3MgU3RydWN0dXJl
IGZyb20gc29tZSBvZiB0aGUgd2FzbSBjb25zdHJ1Y3RvcnM6IHRoZXkncmUgYWxyZWFkeQorICAg
ICAgICAgICBvbiB0aGUgSlNHbG9iYWxPYmplY3QsIHZpc2l0ZWQgcHJvcGVybHkgYW5kIGFsbC4K
KyAgICAgICAgIC0gRml4IG9mZi1ieS1vbmUgZXJyb3IgaW4gcGFyc2luZzogUGFyc2VyOjpwYXJz
ZVVJbnQzMiBmYWlsZWQgaWYgdGhlIGludGVnZXIKKyAgICAgICAgICAgd2FzIGV4YWN0bHkgYXQg
ZW5kIG9mIGZpbGUuCisKKyAgICAgICAgIFsqXSBPbiBlcnJvciBtZXNzYWdlcyB3aGlsZSBwYXJz
aW5nOiBJIGZpbGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5
MTkKKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBNb2R1bGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkwMworCisgICAg
ICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OmRlZmF1bHRTb3VyY2VBcHBlbmRlcik6IG1h
a2UgdGhpcyBwdWJsaWMgc28gdGhhdCBXZWJBc3NlbWJseSBjYW4gdXNlIGl0OiBpdCBnZW5lcmF0
ZXMgdGhvc2UgZmFuY3kgKGV2YWx1YXRpbmcgJy4uLicpIG1lc3NhZ2VzIGF0IHRoZSBlbmQKKyAg
ICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOiBy
ZW1vdmUgdGhlIHVzZWxlc3MgU3RydWN0dXJlIGZyb20gdGhlIFdlYkFzc2VtYmx5IG9iamVjdHMg
KGl0J3MgYWxyZWFkeSBpbiB0aGlzIGZpbGUsIG5vIG5lZWQgdG8gaG9sZCB0d28gcmVmZXJlbmNl
cyBhbmQgdmlzaXQgdGhlbSB0d2ljZSkKKyAgICAgICAgKiB0ZXN0V2FzbS5jcHA6CisgICAgICAg
IChydW5XYXNtVGVzdHMpOiB1cGRhdGUgQVBJCisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6IHVzZSB1cGRh
dGVkIEFQSQorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBh
cnNlcjxDb250ZXh0Pjo6RnVuY3Rpb25QYXJzZXIpOiB1c2UgdXBkYXRlZCBBUEkKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbik6IHVz
ZSB1cGRhdGVkIEFQSQorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2UpOiBnZW5lcmF0ZSBlcnJvciBtZXNz
YWdlcworICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6Ok1vZHVsZVBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6ZmFpbGVkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpl
cnJvck1lc3NhZ2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OmZ1bmN0aW9u
SW5mb3JtYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Om1lbW9yeSk6
CisgICAgICAgICogd2FzbS9XYXNtUGFyc2VyLmg6IHVzZSB1cGRhdGUgbm9uLXB1YmxpYyBBUEkK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVZhclVJbnQzMik6CisgICAgICAgIChK
U0M6Oldhc206OlBhcnNlcjo6cGFyc2VWYXJVSW50NjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQ
YXJzZXI6OnNvdXJjZSk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6bGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpQYXJzZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQ
YXJzZXI6OmNvbnN1bWVDaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OmNv
bnN1bWVTdHJpbmcpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlVUludDMyKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVVJbnQ3KToKKyAgICAgICAgKiB3YXNt
L1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6UGxhbik6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46On5QbGFuKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OlBsYW46OmZhaWxlZCk6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OmVycm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OnJlc3VsdFNpemUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpyZXN1bHQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpQbGFuOjptZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yKTog
bWFrZXMgaXQgZWFzaWVyIHRvIHRocm93IGEgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGZyb20g
TW9kdWxlCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmg6Cisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JD
b25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3I6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1
Y3Rvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZSk6
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1
Y3Rvci5oOgorCiAyMDE2LTEwLTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVkdWNlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHR5cGVkIGFycmF5cyBpbiBKU0RP
TUNvbnZlcnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uSGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmNwcAppbmRleCA5MDUwOTFhLi5lZjFiMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcApAQCAtMTAxLDcgKzEw
MSw3IEBAIHN0YXRpYyBTdHJpbmcgZGVmYXVsdEFwcHJveGltYXRlU291cmNlRXJyb3IoY29uc3Qg
U3RyaW5nJiBvcmlnaW5hbE1lc3NhZ2UsIGNvbnN0CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcob3Jp
Z2luYWxNZXNzYWdlLCAiIChuZWFyICcuLi4iLCBzb3VyY2VUZXh0LCAiLi4uJykiKTsKIH0KIAot
c3RhdGljIFN0cmluZyBkZWZhdWx0U291cmNlQXBwZW5kZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5h
bE1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVGV4dCwgUnVudGltZVR5cGUsIEVycm9ySW5z
dGFuY2U6OlNvdXJjZVRleHRXaGVyZUVycm9yT2NjdXJyZWQgb2NjdXJyZW5jZSkKK1N0cmluZyBk
ZWZhdWx0U291cmNlQXBwZW5kZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgc291cmNlVGV4dCwgUnVudGltZVR5cGUsIEVycm9ySW5zdGFuY2U6OlNvdXJjZVRl
eHRXaGVyZUVycm9yT2NjdXJyZWQgb2NjdXJyZW5jZSkKIHsKICAgICBpZiAob2NjdXJyZW5jZSA9
PSBFcnJvckluc3RhbmNlOjpGb3VuZEFwcHJveGltYXRlU291cmNlKQogICAgICAgICByZXR1cm4g
ZGVmYXVsdEFwcHJveGltYXRlU291cmNlRXJyb3Iob3JpZ2luYWxNZXNzYWdlLCBzb3VyY2VUZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
aAppbmRleCBkOGYzOTEyLi5lYzA1Mjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCkBAIC0zNyw2ICszNyw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiB0eXBlZGVmIEpTT2JqZWN0KiAoKkVycm9yRmFjdG9yeSkoRXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwogCitTdHJpbmcgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFJ1bnRpbWVU
eXBlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VUZXh0V2hlcmVFcnJvck9jY3VycmVkKTsKKwogSlNP
YmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0qKTsKIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEV4Y2VwdGlvbiop
OwogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRl
eCBmNDhjYmNmLi4zODQwODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC04MzIsNyArODMyLDcgQEAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPiBqc05hbWUsIGxvd2VyTmFtZSAjIyBD
b25zdHJ1Y3QKICAgICAgICAgYXV0byogYmFzZSA9IG1fICMjIHByb3RvdHlwZUJhc2UgIyMgUHJv
dG90eXBlLmdldCgpOyBcCiAgICAgICAgIGF1dG8qIHByb3RvdHlwZSA9IFByb3RvdHlwZTo6Y3Jl
YXRlKHZtLCB0aGlzLCBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgYmFzZSkp
OyBcCiAgICAgICAgIGF1dG8qIHN0cnVjdHVyZSA9IEpTT2JqOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IHRoaXMsIHByb3RvdHlwZSk7IFwKLSAgICAgICAgYXV0byogY29uc3RydWN0b3IgPSBDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKHZtLCBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCB0
aGlzLT5mdW5jdGlvblByb3RvdHlwZSgpKSwgcHJvdG90eXBlLCBzdHJ1Y3R1cmUpOyBcCisgICAg
ICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgdGhpcy0+ZnVuY3Rpb25Qcm90b3R5cGUoKSks
IHByb3RvdHlwZSk7IFwKICAgICAgICAgcHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9yLCBEb250
RW51bSk7IFwKICAgICAgICAgbV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZS5zZXQodm0sIHRo
aXMsIHByb3RvdHlwZSk7IFwKICAgICAgICAgbV8gIyMgcHJvcGVyTmFtZSAjIyBTdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdFdhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcApp
bmRleCBhOTFiZTMzLi4zNGFlYTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdFdhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKQEAg
LTI5MCwxNiArMjkwLDE2IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07
CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVz
dWx0LnNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3VsdFswXSB8fCAhcGxhbi5yZXN1bHRbMV0pIHsK
KyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMiB8fCAh
cGxhbi5yZXN1bHQoMCkgfHwgIXBsYW4ucmVzdWx0KDEpKSB7CiAgICAgICAgICAgICBkYXRhTG9n
TG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBD
UkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0WzFd
LT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0WzFdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7Ci0g
ICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7CisgICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7CisgICAgICAgIENI
RUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9p
bnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7CisgICAgICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7CisgICAgICAgIENIRUNL
KGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7CiAgICAgfQogCiAg
ICAgewpAQCAtMzE5LDE2ICszMTksMTYgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAg
ICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAo
cGxhbi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJlc3Vs
dFsxXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAh
PSAyIHx8ICFwbGFuLnJlc3VsdCgwKSB8fCAhcGxhbi5yZXN1bHQoMSkpIHsKICAgICAgICAgICAg
IGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAg
ICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5y
ZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41Zikp
OwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdFsx
XS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIz
NGYpKTsKLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOwot
ICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdFswXS0+
anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYp
KTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQo
MSktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOworICAg
ICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgxKS0+anNF
bnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYpKTsK
KyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOworICAgICAg
ICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYpKTsKICAg
ICB9CiAKICAgICB7CkBAIC0zNTMsMTcgKzM1MywxNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVz
dHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAg
ICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBs
YW4ucmVzdWx0WzFdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0
U2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0KDApIHx8ICFwbGFuLnJlc3VsdCgxKSkgewogICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIp
OwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhp
cyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwg
MTIwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMTIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSwgYm94KDMp
LCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3goMTAp
LCBib3goMTEpLCBib3goMTIpIH0pLCA3OCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyks
IGJveCg0KSwgYm94KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgxMCks
IGJveCgxMSksIGJveCgxMDApIH0pLCAxNjYpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSB9KSwgMTIwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMTIpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94
KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTIpIH0pLCA3OCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgpLCBib3go
OSksIGJveCgxMCksIGJveCgxMSksIGJveCgxMDApIH0pLCAxNjYpOwogICAgIH0KIAogICAgIHsK
QEAgLTM4NywxNiArMzg3LDE2IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAg
IH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4u
cmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxh
bi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkg
ewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSkg
fSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNCkgfSksIDI0KTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDQpIH0pLCAyNCk7CiAgICAgfQogCiAgICAgewpAQCAtNDE2LDE4ICs0MTYsMTgg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDIg
fHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJlc3VsdFsxXSkgeworICAgICAgICBpZiAocGxh
bi5yZXN1bHRTaXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1bHQoMCkgfHwgIXBsYW4ucmVzdWx0KDEp
KSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3Jy
ZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCgwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTUpIH0pLCAx
Nik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAyMDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSkgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MSktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9KSwgMTYpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAy
KTsKICAgICB9CiAKICAgICB7CkBAIC00NDcsMTggKzQ0NywxOCBAQCBzdGF0aWMgdm9pZCBydW5X
YXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7
Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0g
fHwgIXBsYW4ucmVzdWx0WzFdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4u
cmVzdWx0U2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0KDApIHx8ICFwbGFuLnJlc3VsdCgxKSkg
ewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVj
dGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9
KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0p
LCAxKTsKICAgICB9CiAKICAgICB7CkBAIC00ODAsMTUgKzQ4MCwxNSBAQCBzdGF0aWMgdm9pZCBy
dW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRb
MF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
LCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSks
IDEpOwogICAgIH0KIAogICAgIHsKQEAgLTUxMCwxNSArNTEwLDE1IEBAIHN0YXRpYyB2b2lkIHJ1
bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9y
KTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFsw
XSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAx
IHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFp
bGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCks
IGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwg
MSk7CiAgICAgfQogCiAgICAgewpAQCAtNTUwLDE3ICs1NTAsMTcgQEAgc3RhdGljIHZvaWQgcnVu
V2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBd
KSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWls
ZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJU
KHBsYW4ubWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5LT5tZW1vcnkoKSk7Ci0gICAgICAgIGludm9r
ZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9m
ZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGlj
X2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7CisgICAgICAgIGludm9r
ZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9m
ZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90
KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAgICAgIENI
RUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC01NjksNyArNTY5LDcgQEAg
c3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBsZW5ndGggPSAxMDsKICAgICAg
ICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2b2lkPigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3go
bGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBv
ZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNl
dCAtIDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0s
IDB1KTsKQEAgLTYwNSwxNyArNjA1LDE3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAg
ICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYg
KHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBp
ZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3Vs
dCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUg
Y29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQotICAgICAgICBB
U1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeSgp
LT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgogICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwotICAg
ICAgICB1aW50OF90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnkt
Pm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAg
IHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeSgpLT5t
ZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBD
SEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5
W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQpAQCAtNjIzLDcgKzYyMyw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0
cygpCiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAg
IGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJv
eChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgp
IH0pOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC02NDksMTYgKzY0OSwxNiBAQCBzdGF0
aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigq
dm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxh
bi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRT
aXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigi
TW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNI
KCk7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5zaXplKCkpOworICAg
ICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEw
MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTY4
MCwxNSArNjgwLDE1IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAK
ICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0
LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWls
ZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIp
OwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhp
cyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwg
MTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAt
NzEwLDE2ICs3MTAsMTYgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsK
IAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1
bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZh
aWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0
aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2lu
dCwgeyBib3goLTEyKSwgYm94KHBsYW4ubWVtb3J5LT5zaXplKCkgLSBzaXplb2YodWludDY0X3Qp
KSB9KSwgLTEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgtMTIpLCBib3gocGxhbi5tZW1vcnkoKS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSks
IC0xMik7CiAgICAgfQogCiAgICAgewpAQCAtNzQxLDE1ICs3NDEsMTUgQEAgc3RhdGljIHZvaWQg
cnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0
WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9
IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBm
YWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0p
LCAxKTsKICAgICB9CiAKICAgICB7CkBAIC03ODEsMTcgKzc4MSwxNyBAQCBzdGF0aWMgdm9pZCBy
dW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRb
MF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5LT5zaXplKCkpOworICAgICAgICBBU1NF
UlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0
YXRpY19jYXN0PHVpbnQzMl90Kj4ocGxhbi5tZW1vcnktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52
b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
b2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKKyAgICAgICAgaW52
b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
b2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMy
X3QpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAg
Q0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAgLTgwMCw3ICs4MDAsNyBA
QCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAg
ICAgICBvZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+
KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJv
eChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAg
IG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zm
c2V0IC0gMV0sIDEwMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3Ro
XSwgMHUpOwpAQCAtODM2LDE3ICs4MzYsMTcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkK
ICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBp
ZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAg
IGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVz
dWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGls
ZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChwbGFuLm1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5
KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCiAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7Ci0g
ICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9y
eS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAg
ICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5KCkt
Pm1lbW9yeSgpKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1v
cnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCkBAIC04NTQsNyArODU0LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRl
c3RzKCkKIAogICAgICAgICBsZW5ndGggPSAxMDsKICAgICAgICAgb2Zmc2V0ID0gNTsKLSAgICAg
ICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwg
Ym94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0
aCkgfSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7CiAgICAg
ICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKQEAgLTg4MCwxNiArODgwLDE2IEBAIHN0
YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFu
KCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFw
bGFuLnJlc3VsdFswXSkgeworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3Vs
dFNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xu
KCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JB
U0goKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnktPnNpemUoKSk7Cisg
ICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwg
MTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAt
OTExLDE1ICs5MTEsMTUgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsK
IAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1
bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZh
aWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHku
Iik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0
aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0p
LCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBA
IC05NDEsMjAgKzk0MSwyMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9
OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJl
c3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4u
ZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3Rs
eS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgwKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDYpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBAIC05ODIs
MjAgKzk4MiwyMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAg
ICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5z
aXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVk
KCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsK
ICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMg
ZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MTAwKSwgYm94KDYpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKICAgICB9CiAKIApAQCAtMTAwOSwxMyArMTAwOSwx
MyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBs
YW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxh
bi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAg
ICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgfSksIDUpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyB9KSwgNSk7CiAgICAgfQogCiAKQEAgLTEwMzAsMTMg
KzEwMzAsMTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAg
ICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6
ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgp
IHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAg
ICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsw
XS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAgICAg
ewpAQCAtMTA1MCwxMyArMTA1MCwxMyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAg
ICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChw
bGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYg
KHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQo
MCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNv
cnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsK
ICAgICB9CiAKICAgICB7CkBAIC0xMDcwLDEzICsxMDcwLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsK
LSAgICAgICAgaWYgKHBsYW4ucmVzdWx0LnNpemUoKSAhPSAxIHx8ICFwbGFuLnJlc3VsdFswXSkg
eworICAgICAgICBpZiAocGxhbi5mYWlsZWQoKSB8fCBwbGFuLnJlc3VsdFNpemUoKSAhPSAxIHx8
ICFwbGFuLnJlc3VsdCgwKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVk
IHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyB9KSwgMTEpOwogICAgIH0KIAogICAgIHsKQEAgLTEwODksMTYgKzEwODksMTYgQEAgc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4o
KnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBs
YW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0
U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4o
Ik1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFT
SCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9KSwgMTAx
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KC0xKSwgYm94KDEpfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
aW4oKSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgx
KSB9KSwgMTAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KC0xKSwgYm94KDEpfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKSk7CiAgICAgfQogCiAgICAgewpAQCAtMTExOCwxNCArMTExOCwxNCBAQCBz
dGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxh
bigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8fCAh
cGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVkKCkgfHwgcGxhbi5yZXN1
bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAgICAgICAgIGRhdGFMb2dM
bigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENS
QVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwKSB9KSwgMTApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkg
fSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTApIH0pLCAxMCk7CiAgICAgfQogCiAgICAgewpAQCAtMTE1NCwx
NiArMTE1NCwxNiBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAg
ICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdC5z
aXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgaWYgKHBsYW4uZmFpbGVk
KCkgfHwgcGxhbi5yZXN1bHRTaXplKCkgIT0gMSB8fCAhcGxhbi5yZXN1bHQoMCkpIHsKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsK
ICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMg
ZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDIpfSksIDMpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgNTA1MCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAzKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCkgfSksIDUwNTApOwogICAgIH0KIAogICAgIHsKQEAgLTExOTgsMjAgKzExOTgsMjAg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFu
IHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDEg
fHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFuLmZhaWxlZCgpIHx8IHBsYW4u
cmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7CiAgICAgICAgICAgICBkYXRh
TG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAgICAgICAgICAg
ICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSks
IDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50
cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0p
LCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDQpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9
KSwgMTIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCA2MDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KDEwMCkgfSksIDEwMDAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAyKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMikgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgNCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDYpIH0pLCAxMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDYwMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAwMDApOwogICAgIH0KIAogICAgIHsKQEAg
LTEyNTEsMjAgKzEyNTEsMjAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAg
fTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5y
ZXN1bHQuc2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0WzBdKSB7CisgICAgICAgIGlmIChwbGFu
LmZhaWxlZCgpIHx8IHBsYW4ucmVzdWx0U2l6ZSgpICE9IDEgfHwgIXBsYW4ucmVzdWx0KDApKSB7
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0
bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDAp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggMTQxNzc5
Mi4uYmE0ZDRhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcApAQCAtNzE0LDEzICs3MTQsMTMgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxDb21waWxhdGlvbj4gY3JlYXRlSlNXcmFwcGVyKFZNJiB2bSwgY29uc3QgU2lnbmF0dXJlKiBz
aWcKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2MpOwog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxl
KFZNJiB2bSwgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIE1lbW9yeSogbWVtb3J5LCBGdW5jdGlv
bkluZm9ybWF0aW9uIGluZm8sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVu
Y3Rpb25zLCB1bnNpZ25lZCBvcHRMZXZlbCkKK3N0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBp
bGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0
YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIE1lbW9yeSogbWVtb3J5LCBjb25zdCBTaWduYXR1
cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlv
bnMsIHVuc2lnbmVkIG9wdExldmVsKQogewogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxGdW5jdGlvbkNvbXBpbGF0aW9uPigpOwogCiAgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsK
ICAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC0+dW5s
aW5rZWRDYWxscyk7Ci0gICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNv
bnRleHQsIHNvdXJjZSwgaW5mbywgZnVuY3Rpb25zKTsKKyAgICBGdW5jdGlvblBhcnNlcjxCM0lS
R2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgZnVuY3Rpb25zKTsKICAgICBpZiAoIXBhcnNlci5wYXJzZSgpKQogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC03MzIsNyArNzMyLDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0s
IFZlY3Rvcjx1aW50OF90PiYgc28KICAgICAgICAgZGF0YUxvZygiUG9zdCBTU0E6ICIsIHByb2Nl
ZHVyZSk7CiAKICAgICByZXN1bHQtPmNvZGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9u
Pih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7Ci0gICAgcmVzdWx0LT5qc0VudHJ5UG9pbnQgPSBj
cmVhdGVKU1dyYXBwZXIodm0sIGluZm8uc2lnbmF0dXJlLCByZXN1bHQtPmNvZGUtPmNvZGUoKSwg
bWVtb3J5KTsKKyAgICByZXN1bHQtPmpzRW50cnlQb2ludCA9IGNyZWF0ZUpTV3JhcHBlcih2bSwg
c2lnbmF0dXJlLCByZXN1bHQtPmNvZGUtPmNvZGUoKSwgbWVtb3J5KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaAppbmRleCBmOGQ4NDIwLi40M2RkYjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgTWVtb3J5OwogCi1zdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+
JiwgTWVtb3J5KiwgRnVuY3Rpb25JbmZvcm1hdGlvbiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5m
b3JtYXRpb24+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK3N0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBNZW1vcnkqLCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZv
cm1hdGlvbj4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oCmluZGV4IGEwZDViM2QuLjUxZTJmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb25UeXBlIEV4cHJlc3Npb25U
eXBlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGV4dDo6Q29udHJvbFR5cGUgQ29udHJvbFR5
cGU7CiAKLSAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBzb3VyY2VCdWZmZXIsIGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mLCBjb25zdCBWZWN0b3I8
RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucyk7CisgICAgRnVuY3Rpb25QYXJzZXIoQ29u
dGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0
aCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBm
dW5jdGlvbnMpOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIApAQCAt
NTksMjEgKzU5LDIxIEBAIHByaXZhdGU6CiAgICAgQ29udGV4dCYgbV9jb250ZXh0OwogICAgIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gbV9leHByZXNzaW9uU3RhY2s7CiAgICAgVmVjdG9yPENv
bnRyb2xUeXBlPiBtX2NvbnRyb2xTdGFjazsKLSAgICBjb25zdCBTaWduYXR1cmUmIG1fc2lnbmF0
dXJlOworICAgIGNvbnN0IFNpZ25hdHVyZSogbV9zaWduYXR1cmU7CiAgICAgY29uc3QgVmVjdG9y
PEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBtX2Z1bmN0aW9uczsKICAgICB1bnNpZ25lZCBtX3VucmVh
Y2hhYmxlQmxvY2tzIHsgMCB9OwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLUZ1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlciwgY29uc3QgRnVuY3Rpb25JbmZvcm1h
dGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMp
Ci0gICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCBpbmZvLnN0YXJ0LCBpbmZvLmVuZCkKK0Z1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBjb25z
dCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNp
Z25hdHVyZSogc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1
bmN0aW9ucykKKyAgICA6IFBhcnNlcihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCkKICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9zaWduYXR1cmUoKmluZm8uc2lnbmF0dXJl
KQorICAgICwgbV9zaWduYXR1cmUoc2lnbmF0dXJlKQogICAgICwgbV9mdW5jdGlvbnMoZnVuY3Rp
b25zKQogewogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgZnVu
Y3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIgZW5kaW5nIGF0OiAiLCBpbmZvLmVu
ZCk7Ci0gICAgbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZS5hcmd1bWVudHMpOwor
ICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsICh1aW50
cHRyX3QpZnVuY3Rpb25TdGFydCwgIiBvZiBsZW5ndGg6ICIsIGZ1bmN0aW9uTGVuZ3RoKTsKKyAg
ICBtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJlLT5hcmd1bWVudHMpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgpAQCAtMzA5LDcgKzMwOSw3IEBAIGJvb2wgRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAKICAgICBjYXNl
IE9wVHlwZTo6UmV0dXJuOiB7CiAgICAgICAgIFZlY3RvcjxFeHByZXNzaW9uVHlwZSwgMT4gcmV0
dXJuVmFsdWVzOwotICAgICAgICBpZiAobV9zaWduYXR1cmUucmV0dXJuVHlwZSAhPSBWb2lkKQor
ICAgICAgICBpZiAobV9zaWduYXR1cmUtPnJldHVyblR5cGUgIT0gVm9pZCkKICAgICAgICAgICAg
IHJldHVyblZhbHVlcy5hcHBlbmQobV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKSk7CiAKICAg
ICAgICAgbV91bnJlYWNoYWJsZUJsb2NrcyA9IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDdlZTAxYjAuLjI3NmQ4OTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC00
MSwzMyArNDEsNDUgQEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiBib29s
IE1vZHVsZVBhcnNlcjo6cGFyc2UoKQogewotICAgIGlmIChtX3NvdXJjZUxlbmd0aCA8IDgpCisg
ICAgY29uc3Qgc2l6ZV90IG1pblNpemUgPSA4OworICAgIGlmIChsZW5ndGgoKSA8IG1pblNpemUp
IHsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiTW9kdWxlIGlzICIgKyBTdHJpbmc6Om51bWJl
cihsZW5ndGgoKSkgKyAiIGJ5dGVzLCBleHBlY3RlZCBhdCBsZWFzdCAiICsgU3RyaW5nOjpudW1i
ZXIobWluU2l6ZSkgKyAiIGJ5dGVzIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
Y29uc3VtZUNoYXJhY3RlcigwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghY29u
c3VtZVN0cmluZygiYXNtIikpCisgICAgfQorICAgIGlmICghY29uc3VtZUNoYXJhY3RlcigwKSB8
fCAhY29uc3VtZVN0cmluZygiYXNtIikpIHsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiTW9k
dWxlcyBkb2Vzbid0IHN0YXJ0IHdpdGggJ1xcMGFzbSciOwogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCiAgICAgLy8gU2tpcCB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIG5vdyBzaW5jZSB3
ZSBkb24ndCBkbyBhbnl0aGluZyB3aXRoIGl0LgogICAgIHVpbnQzMl90IHZlcnNpb25OdW1iZXI7
Ci0gICAgaWYgKCFwYXJzZVVJbnQzMih2ZXJzaW9uTnVtYmVyKSkKKyAgICBpZiAoIXBhcnNlVUlu
dDMyKHZlcnNpb25OdW1iZXIpKSB7CisgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVz
c2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIHZlcnNpb24gbnVtYmVyIjsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9IG1h
Z2ljTnVtYmVyKQorICAgIGlmICh2ZXJzaW9uTnVtYmVyICE9IG1hZ2ljTnVtYmVyKSB7CisgICAg
ICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gInVuZXhw
ZWN0ZWQgdmVyc2lvbiBudW1iZXIiOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAK
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0xuKCJQYXNzZWQgcHJvY2Vzc2luZyBo
ZWFkZXIuIik7CiAKICAgICBTZWN0aW9uczo6U2VjdGlvbiBwcmV2aW91c1NlY3Rpb24gPSBTZWN0
aW9uczo6VW5rbm93bjsKLSAgICB3aGlsZSAobV9vZmZzZXQgPCBtX3NvdXJjZUxlbmd0aCkgewor
ICAgIHdoaWxlIChtX29mZnNldCA8IGxlbmd0aCgpKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyB0byBwYXJzZSBuZXh0IHNlY3Rpb24gYXQg
b2Zmc2V0OiAiLCBtX29mZnNldCk7CiAKICAgICAgICAgdWludDhfdCBzZWN0aW9uQnl0ZTsKLSAg
ICAgICAgaWYgKCFwYXJzZVVJbnQ3KHNlY3Rpb25CeXRlKSkKKyAgICAgICAgaWYgKCFwYXJzZVVJ
bnQ3KHNlY3Rpb25CeXRlKSkgeworICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBt
ZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBzZWN0aW9uIGJ5dGUiOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIlNlY3Rpb24gYnl0ZTogIiwgc2VjdGlvbkJ5dGUp
OwpAQCAtNzgsMjQgKzkwLDM2IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAg
ICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PFNlY3Rpb25zOjpTZWN0aW9uPihzZWN0aW9u
Qnl0ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1aW50MzJfdCBzZWN0aW9uTmFt
ZUxlbmd0aDsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2VjdGlvbk5hbWVMZW5n
dGgpKQorICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzZWN0aW9uTmFtZUxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQorICAgICAgICAgICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IGdldCBzZWN0aW9uIG5hbWUgbGVuZ3RoIjsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUgc2VjdGlvbidzIHNpemUuCi0gICAg
ICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCArIFdURjo6TEVCRGVjb2Rl
cjo6bWF4MzJCaXRMRUJCeXRlTGVuZ3RoID49IG1fc291cmNlTGVuZ3RoKQorICAgICAgICAgICAg
aWYgKG1fb2Zmc2V0ICsgc2VjdGlvbk5hbWVMZW5ndGggKyBXVEY6OkxFQkRlY29kZXI6Om1heDMy
Qml0TEVCQnl0ZUxlbmd0aCA+PSBsZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
IGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzOTE5CisgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAic2VjdGlvbiBs
ZW5ndGggaXMgYmlnZ2VyIHRoYW4gYWN0dWFsIHNpemUiOwogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCBhbnkgY3VzdG9tIHNlY3Rpb25zIHlldC4KIAogICAgICAgICAgICAgbV9vZmZzZXQgKz0gc2Vj
dGlvbk5hbWVMZW5ndGg7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIVNlY3Rpb25zOjp2YWxp
ZGF0ZU9yZGVyKHByZXZpb3VzU2VjdGlvbiwgc2VjdGlvbikpCisgICAgICAgIGlmICghU2VjdGlv
bnM6OnZhbGlkYXRlT3JkZXIocHJldmlvdXNTZWN0aW9uLCBzZWN0aW9uKSkgeworICAgICAgICAg
ICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImlu
dmFsaWQgc2VjdGlvbiBvcmRlciI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KIAogICAgICAgICB1aW50MzJfdCBzZWN0aW9uTGVuZ3RoOwotICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKHNlY3Rpb25MZW5ndGgpKQorICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNl
Y3Rpb25MZW5ndGgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3Nh
Z2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQorICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgZ2V0IHNlY3Rpb24gbGVuZ3RoIjsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIGVu
ZCA9IG1fb2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKIApAQCAtMTA0LDMyICsxMjgsNDQgQEAgYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgY2FzZSBTZWN0aW9uczo6TWVtb3J5OiB7
CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBh
cnNpbmcgTWVtb3J5LiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeSgpKQorICAgICAg
ICAgICAgaWYgKCFwYXJzZU1lbW9yeSgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1w
cm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjM5MTkKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJz
ZSBtZW1vcnkiOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTZWN0aW9uczo6
RnVuY3Rpb25UeXBlczogewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJQYXJzaW5nIHR5cGVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1
bmN0aW9uVHlwZXMoKSkKKyAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblR5cGVzKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQorICAgICAgICAgICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIHR5cGVzIjsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgU2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBz
aWduYXR1cmVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygp
KQorICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpKSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVz
c2FnZSA9ICJjb3VsZG4ndCBwYXJzZSBmdW5jdGlvbiBzaWduYXR1cmVzIjsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgU2VjdGlvbnM6OkRlZmluaXRpb25zOiB7CiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgZnVu
Y3Rpb24gZGVmaW5pdGlvbnMuIik7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rpb25EZWZp
bml0aW9ucygpKQorICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkg
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisgICAgICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMiOwog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE0NiwxMyArMTgyLDE3IEBAIGJvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZSgpCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xu
KCJGaW5pc2hlZCBwYXJzaW5nIHNlY3Rpb24uIik7CiAKLSAgICAgICAgaWYgKGVuZCAhPSBtX29m
ZnNldCkKKyAgICAgICAgaWYgKGVuZCAhPSBtX29mZnNldCkgeworICAgICAgICAgICAgLy8gRklY
TUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjM5MTkKKyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gInBhcnNpbmcgZW5k
ZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNlY3Rpb24iOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CiAKICAgICAgICAgcHJldmlvdXNTZWN0aW9uID0gc2VjdGlvbjsKICAg
ICB9CiAKICAgICAvLyBUT0RPCisgICAgbV9mYWlsZWQgPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5o
CmluZGV4IDU0MGQ1YTYuLjM4MjkzYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTM5LDE1ICszOSwzMyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWFnaWNOdW1iZXIgPSAweGM7CiAKKyAgICBNb2R1bGVQYXJz
ZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoKQorICAg
ICAgICA6IFBhcnNlcihzb3VyY2VCdWZmZXIsIHNvdXJjZUxlbmd0aCkKKyAgICB7CisgICAgfQog
ICAgIE1vZHVsZVBhcnNlcihjb25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlcikKLSAg
ICAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCAwLCBzb3VyY2VCdWZmZXIuc2l6ZSgpKQorICAg
ICAgICA6IFBhcnNlcihzb3VyY2VCdWZmZXIuZGF0YSgpLCBzb3VyY2VCdWZmZXIuc2l6ZSgpKQog
ICAgIHsKICAgICB9CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOworICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVk
OyB9CisgICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZmFpbGVkKCkpOworICAgICAgICByZXR1cm4gbV9lcnJvck1lc3Nh
Z2U7CisgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5j
dGlvbkluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWVtb3J5PiYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnk7IH0KKyAgICBj
b25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9uSW5mb3JtYXRpb24oKSBj
b25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fZnVuY3Rpb25zOworICAgIH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiYg
bWVtb3J5KCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAg
ICAgIHJldHVybiBtX21lbW9yeTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VNZW1vcnkoKTsKQEAgLTU5LDYgKzc3LDggQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4gbV9mdW5jdGlvbnM7CiAgICAgVmVjdG9yPFNp
Z25hdHVyZT4gbV9zaWduYXR1cmVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1fbWVt
b3J5OworICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07CisgICAgU3RyaW5nIG1fZXJyb3JNZXNz
YWdlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QYXJzZXIuaAppbmRleCA3NDgxMzRkLi40NmE3YjM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIFBhcnNlciB7CiBwcm90ZWN0ZWQ6Ci0gICAg
UGFyc2VyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCk7
CisgICAgUGFyc2VyKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gY29uc3VtZUNoYXJhY3RlcihjaGFyKTsKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqKTsKQEAgLTQ2LDMxICs0NiwzMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50
OF90JiByZXN1bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDcodWlu
dDhfdCYgcmVzdWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1
aW50MzJfdCYgcmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJ
bnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJ
bnQzMihtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsg
fQotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiBy
ZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLmRh
dGEoKSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9Ci0KKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVy
biBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgs
IG1fb2Zmc2V0LCByZXN1bHQpOyB9CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VW
YXJVSW50NjQodWludDY0X3QmIHJlc3VsdCkgeyByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNv
ZGVVSW50NjQobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQog
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUoVHlwZSYgcmVzdWx0
KTsKIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbV9zb3VyY2U7CisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBzaXplX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKworICAgIHNpemVfdCBtX29m
ZnNldCA9IDA7CisKK3ByaXZhdGU6CisgICAgY29uc3QgdWludDhfdCogbV9zb3VyY2U7CiAgICAg
c2l6ZV90IG1fc291cmNlTGVuZ3RoOwotICAgIHNpemVfdCBtX29mZnNldDsKIH07CiAKLUFMV0FZ
U19JTkxJTkUgUGFyc2VyOjpQYXJzZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZm
ZXIsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkKK0FMV0FZU19JTkxJTkUgUGFyc2VyOjpQYXJz
ZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoKQogICAg
IDogbV9zb3VyY2Uoc291cmNlQnVmZmVyKQotICAgICwgbV9zb3VyY2VMZW5ndGgoZW5kKQotICAg
ICwgbV9vZmZzZXQoc3RhcnQpCisgICAgLCBtX3NvdXJjZUxlbmd0aChzb3VyY2VMZW5ndGgpCiB7
Ci0gICAgQVNTRVJUKGVuZCA8PSBzb3VyY2VCdWZmZXIuc2l6ZSgpKTsKLSAgICBBU1NFUlQoc3Rh
cnQgPCBlbmQpOwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lQ2hhcmFj
dGVyKGNoYXIgYykKIHsKLSAgICBpZiAobV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGgpCisgICAg
aWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KGMgPT0gbV9zb3VyY2VbbV9vZmZzZXRdKSB7CisgICAgaWYgKGMgPT0gc291cmNlKClbbV9vZmZz
ZXRdKSB7CiAgICAgICAgIG1fb2Zmc2V0Kys7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTgwLDkgKzgxLDkgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZUNoYXJh
Y3RlcihjaGFyIGMpCiBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNv
bnN0IGNoYXIqIHN0cikKIHsKICAgICB1bnNpZ25lZCBzdGFydCA9IG1fb2Zmc2V0OwotICAgIGlm
IChtX29mZnNldCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBzdHJb
aV07IGkrKykgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBzdHJbaV07IGkrKykgewogICAgICAg
ICBpZiAoIWNvbnN1bWVDaGFyYWN0ZXIoc3RyW2ldKSkgewogICAgICAgICAgICAgbV9vZmZzZXQg
PSBzdGFydDsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkzLDE4ICs5NCwxOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikK
IAogQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50MzIodWludDMyX3QmIHJlc3Vs
dCkKIHsKLSAgICBpZiAobV9zb3VyY2VMZW5ndGggPCA0IHx8IG1fb2Zmc2V0ID49IG1fc291cmNl
TGVuZ3RoIC0gNCkKKyAgICBpZiAobGVuZ3RoKCkgPCA0IHx8IG1fb2Zmc2V0ID4gbGVuZ3RoKCkg
LSA0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihtX3NvdXJjZS5kYXRhKCkgKyBtX29mZnNldCk7CisgICAgcmVz
dWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2UoKSArIG1fb2Zm
c2V0KTsKICAgICBtX29mZnNldCArPSA0OwogICAgIHJldHVybiB0cnVlOwogfQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJlc3VsdCkKIHsKLSAgICBp
ZiAobV9vZmZzZXQgPj0gbV9zb3VyY2VMZW5ndGgpCisgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0
aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gbV9zb3VyY2VbbV9vZmZz
ZXQrK107CisgICAgcmVzdWx0ID0gc291cmNlKClbbV9vZmZzZXQrK107CiAgICAgcmV0dXJuIHJl
c3VsdCA8IDB4ODA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApp
bmRleCBiYTBmYTNmLi5mOWM4YTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCkBAIC0zNywxNCArMzcsMjAgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQorICAgIAogUGxhbjo6
UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UpCisgICAgOiBQbGFuKHZtLCBzb3Vy
Y2UuZGF0YSgpLCBzb3VyY2Uuc2l6ZSgpKQoreworfQorCitQbGFuOjpQbGFuKFZNJiB2bSwgY29u
c3QgdWludDhfdCogc291cmNlLCBzaXplX3Qgc291cmNlTGVuZ3RoKQogewogICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nTG4oIlN0YXJ0aW5nIHBsYW4uIik7Ci0gICAgTW9kdWxlUGFy
c2VyIG1vZHVsZVBhcnNlcihzb3VyY2UpOworICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIo
c291cmNlLCBzb3VyY2VMZW5ndGgpOwogICAgIGlmICghbW9kdWxlUGFyc2VyLnBhcnNlKCkpIHsK
LSAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIG1vZHVsZSBmYWlsZWQuIik7CisgICAgICAgIGRh
dGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkOiAiLCBtb2R1bGVQYXJzZXIuZXJyb3JNZXNz
YWdlKCkpOworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1vZHVsZVBhcnNlci5lcnJvck1lc3Nh
Z2UoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTQsMTkgKzYwLDI1IEBAIFBsYW46
OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhfdD4gc291cmNlKQogICAgIGZvciAoY29uc3QgRnVu
Y3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6IG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9u
KCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nl
c3NpbmcgZnVuY2lvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBhbmQgZW5kaW5nIGF0
OiAiLCBpbmZvLmVuZCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocGFyc2VBbmRDb21waWxlKHZt
LCBzb3VyY2UsIG1vZHVsZVBhcnNlci5tZW1vcnkoKS5nZXQoKSwgaW5mbywgbW9kdWxlUGFyc2Vy
LmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkpOworICAgICAgICBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0ID0gc291cmNlICsgaW5mby5zdGFydDsKKyAgICAgICAgc2l6ZV90IGZ1bmN0aW9uTGVu
Z3RoID0gaW5mby5lbmQgLSBpbmZvLnN0YXJ0OworICAgICAgICBBU1NFUlQoZnVuY3Rpb25MZW5n
dGggPD0gc291cmNlTGVuZ3RoKTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKHBhcnNlQW5kQ29t
cGlsZSh2bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIG1vZHVsZVBhcnNlci5tZW1v
cnkoKS5nZXQoKSwgaW5mby5zaWduYXR1cmUsIG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0
aW9uKCkpKTsKICAgICB9CiAKICAgICAvLyBQYXRjaCB0aGUgY2FsbCBzaXRlcyBmb3IgZWFjaCBm
dW5jdGlvbi4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiYg
ZnVuY3Rpb25QdHIgOiByZXN1bHQpIHsKKyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlv
bkNvbXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIgOiBtX3Jlc3VsdCkgewogICAgICAgICBGdW5jdGlv
bkNvbXBpbGF0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUHRyLmdldCgpOwogICAgICAgICBmb3Ig
KGF1dG8mIGNhbGwgOiBmdW5jdGlvbi0+dW5saW5rZWRDYWxscykKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWwocmVzdWx0W2NhbGwuZnVuY3Rpb25JbmRleF0tPmNvZGUtPmNvZGUoKSkpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbChtX3Jlc3VsdFtjYWxsLmZ1bmN0aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsK
ICAgICB9CiAKLSAgICBtZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7Cisg
ICAgbV9tZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7CisgICAgbV9mYWls
ZWQgPSBmYWxzZTsKIH0KIAorUGxhbjo6flBsYW4oKSB7IH0KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IGZlZDEzNmEuLmI3OTRmMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMzYsMTMgKzM2LDM5IEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogY2xhc3MgTWVtb3J5OwogCi0vLyBUT0RPOiBUaGlzIHNob3Vs
ZCBjcmVhdGUgYSBXYXNtIE1vZHVsZSBub3QgYSBsaXN0IG9mIGZ1bmN0aW9ucy4KIGNsYXNzIFBs
YW4gewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWlu
dDhfdD4gc291cmNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVp
bnQ4X3Q+KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgY29uc3QgdWludDhfdCos
IHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAotICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4+IHJlc3VsdDsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVtb3J5PiBtZW1vcnk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFp
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSgpIGNvbnN0CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7
CisgICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsKKyAgICB9CisgICAgc2l6ZV90IHJlc3Vs
dFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fcmVzdWx0LnNpemUoKTsKKyAgICB9CisgICAgY29uc3QgRnVuY3Rp
b25Db21waWxhdGlvbiogcmVzdWx0KHNpemVfdCBuKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0LmF0KG4pLmdl
dCgpOworICAgIH0KKyAgICBjb25zdCBNZW1vcnkqIG1lbW9yeSgpIGNvbnN0CisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICByZXR1cm4gbV9tZW1vcnku
Z2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RnVu
Y3Rpb25Db21waWxhdGlvbj4+IG1fcmVzdWx0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+
IG1fbWVtb3J5OworICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07CisgICAgU3RyaW5nIG1fZXJy
b3JNZXNzYWdlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5jcHAKaW5kZXggMDJmZjg4NS4uM2JmNTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAK
QEAgLTQ3LDYgKzQ3LDE0IEBAIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OkpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyCiAKIGNvbnN0IENsYXNz
SW5mbyBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5D
b21waWxlRXJyb3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3IpIH07CiAKKyAgICAKK0pTT2JqZWN0KiBjcmVhdGVXZWJBc3Nl
bWJseUNvbXBpbGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBF
cnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmpl
Y3QtPldlYkFzc2VtYmx5Q29tcGlsZUVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGRlZmF1bHRT
b3VyY2VBcHBlbmRlciwgVHlwZU5vdGhpbmcsIHRydWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaAppbmRl
eCA2NTZiOGQwLi5jMTRhMzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oCkBAIC00Nyw2ICs0Nyw4IEBA
IHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKFZNJiwgU3RydWN0dXJl
Kik7CiB9OwogCitKU09iamVjdCogY3JlYXRlV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0
YXRlKiwgY29uc3QgU3RyaW5nJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNw
cAppbmRleCA2N2U2ZDk1Li5mNGUxMTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0
cnVjdG9yLmNwcApAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKEV4ZWNTdGF0ZQogewog
ICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPyBzdGF0ZS0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFsdWUgbWVz
c2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1Rhcmdl
dCgpLCBhc0ludGVybmFsRnVuY3Rpb24oc3RhdGUtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCkt
PldlYkFzc2VtYmx5Q29tcGlsZUVycm9yU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcjo6Y3JlYXRlKHN0YXRlLCBzdHJ1Y3R1cmUsIG1l
c3NhZ2UsIGZhbHNlKSk7CkBAIC02MSwxMCArNjEsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiBz
dGEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNh
bGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yIikpOwogfQogCi1XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKiBXZWJB
c3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5
cGUsIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSkKK1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29u
c3RydWN0b3IqIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlw
ZSogdGhpc1Byb3RvdHlwZSkKIHsKICAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3I+KHZtLmhl
YXApKSBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwot
ICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSwgdGhpc1N0
cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90
eXBlKTsKICAgICByZXR1cm4gY29uc3RydWN0b3I7CiB9CiAKQEAgLTczLDcgKzczLDcgQEAgU3Ry
dWN0dXJlKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlw
ZSogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqKQordm9pZCBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
UHJvdG90eXBlKiBwcm90b3R5cGUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIEFT
Q0lJTGl0ZXJhbCgiQ29tcGlsZUVycm9yIikpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgUmVhZE9ubHkg
fCBEb250RW51bSB8IERvbnREZWxldGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rv
ci5oCmluZGV4IGQ0ODU2YzkuLjM0YTBlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0
cnVjdG9yLmgKQEAgLTM5LDEzICszOSwxMyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBJbnRlcm5h
bEZ1bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOwogCi0gICAg
c3RhdGljIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlKiwgU3RydWN0dXJlKik7
CisgICAgc3RhdGljIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlKik7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZSosIFN0cnVj
dHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZSopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9y
Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IDg1Y2U5YWEuLjU1YmY0YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcApAQCAtNTcsMTAgKzU3LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rp
b25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiKSk7CiB9CiAK
LVdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlJ
bnN0YW5jZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSwgU3RydWN0dXJlKiB0aGlzU3RydWN0dXJl
KQorV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJs
eUluc3RhbmNlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQogewogICAgIGF1dG8qIGNvbnN0cnVj
dG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yKHZtLCBzdHJ1
Y3R1cmUpOwotICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlw
ZSwgdGhpc1N0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0
aGlzUHJvdG90eXBlKTsKICAgICByZXR1cm4gY29uc3RydWN0b3I7CiB9CiAKQEAgLTY5LDEyICs2
OSwxMSBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplYwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlJbnN0YW5jZVByb3Rv
dHlwZSogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3ZvaWQgV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5SW5z
dGFuY2VQcm90b3R5cGUqIHByb3RvdHlwZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgQVNDSUlMaXRlcmFsKCJJbnN0YW5jZSIpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBE
b250RW51bSB8IERvbnREZWxldGUpOwotICAgIG1fSW5zdGFuY2VTdHJ1Y3R1cmUuc2V0KHZtLCB0
aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6Oldl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQpAQCAtOTksNyArOTgsNiBAQCB2b2lkIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aQogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yKj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fSW5zdGFuY2VTdHJ1Y3R1cmUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgKaW5kZXggZGRkZGY3MS4uMmU4NTdj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgKQEAgLTM5LDIzICszOSwxOSBAQCBwdWJs
aWM6CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlOwogCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlw
ZSosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUq
KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgU3RydWN0dXJlKiBJ
bnN0YW5jZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fSW5zdGFuY2VTdHJ1Y3R1cmUuZ2V0
KCk7IH0KLQogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3Nl
bWJseUluc3RhbmNlUHJvdG90eXBlKiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIFdlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5cGUqKTsKIAogcHJpdmF0ZToKICAg
ICBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBz
dGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERh
dGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
KTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
Ci0KLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX0luc3RhbmNlU3RydWN0dXJlOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IGFk
NTI1Y2YuLjFjNTgyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC01NywxMCAr
NTcsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNz
ZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBzdGF0ZSkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAiV2ViQXNzZW1ibHkuTWVtb3J5IikpOwogfQogCi1XZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90
b3R5cGUsIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSkKK1dlYkFzc2VtYmx5TWVtb3J5Q29uc3Ry
dWN0b3IqIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSogdGhpc1Byb3RvdHlw
ZSkKIHsKICAgICBhdXRvKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwotICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVh
dGlvbih2bSwgdGhpc1Byb3RvdHlwZSwgdGhpc1N0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3It
PmZpbmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90eXBlKTsKICAgICByZXR1cm4gY29uc3RydWN0
b3I7CiB9CiAKQEAgLTY5LDEyICs2OSwxMSBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KgogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBX
ZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlKiBwcm90b3R5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
dm9pZCBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBwcm90b3R5cGUpCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IikpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlw
ZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7Ci0gICAgbV9NZW1vcnlTdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yOjpXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkBAIC05OSw3ICs5OCw2IEBAIHZvaWQgV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpCiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fTWVtb3J5U3RydWN0dXJlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmgKaW5kZXggMzRjZDEyMC4uNDY2MDY5MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuaApAQCAtMzksMjMgKzM5LDE5IEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3RvciogY3Jl
YXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqLCBTdHJ1Y3R1
cmUqKTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3RvciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgU3RydWN0dXJlKiBNZW1vcnlTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX01lbW9yeVN0cnVjdHVyZS5nZXQoKTsgfQotCiBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlNZW1vcnlDb25z
dHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENv
bnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlw
ZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fTWVtb3J5U3RydWN0dXJlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IGU5N2IwMTEuLmU5MDNlZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IuY3BwCkBAIC0yOCw4ICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkZ1bmN0
aW9uUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNvbXBpbGVFcnJvci5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIK
KyNpbmNsdWRlICJXYXNtUGxhbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUHJvdG90
eXBlLmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmx1dC5oIgpA
QCAtNDUsOSArNTEsMzAgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW4KIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVj
U3RhdGUqIHN0YXRlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3Bl
LCBjcmVhdGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHll
dCBpbXBsZW1lbnQgdGhlIE1vZHVsZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOworICAgIEpT
VmFsdWUgdmFsID0gc3RhdGUtPmFyZ3VtZW50KDApOworICAgIEpTQXJyYXlCdWZmZXIqIGFycmF5
QnVmZmVyID0gdmFsLmdldE9iamVjdCgpID8ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4o
dmFsLmdldE9iamVjdCgpKSA6IG51bGxwdHI7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIGFycmF5
QnVmZmVyVmlldyA9IHZhbC5nZXRPYmplY3QoKSA/IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZl
clZpZXcqPih2YWwuZ2V0T2JqZWN0KCkpIDogbnVsbHB0cjsKKyAgICBpZiAoIShhcnJheUJ1ZmZl
ciB8fCBhcnJheUJ1ZmZlclZpZXcpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxp
dGVyYWwoImZpcnN0IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lk1vZHVsZSBtdXN0IGJlIGFuIEFy
cmF5QnVmZmVyVmlldyBvciBhbiBBcnJheUJ1ZmZlciIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIs
IHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsKSkpKTsKKworICAgIGlmIChhcnJheUJ1ZmZlclZpZXcg
PyBhcnJheUJ1ZmZlclZpZXctPmlzTmV1dGVyZWQoKSA6IGFycmF5QnVmZmVyLT5pbXBsKCktPmlz
TmV1dGVyZWQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJ1bmRl
cmx5aW5nIFR5cGVkQXJyYXkgaGFzIGJlZW4gZGV0YXRjaGVkIGZyb20gdGhlIEFycmF5QnVmZmVy
IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2YWwpKSkpOwor
CisgICAgc2l6ZV90IGJ5dGVPZmZzZXQgPSBhcnJheUJ1ZmZlclZpZXcgPyBhcnJheUJ1ZmZlclZp
ZXctPmJ5dGVPZmZzZXQoKSA6IDA7CisgICAgc2l6ZV90IGJ5dGVTaXplID0gYXJyYXlCdWZmZXJW
aWV3ID8gYXJyYXlCdWZmZXJWaWV3LT5sZW5ndGgoKSA6IGFycmF5QnVmZmVyLT5pbXBsKCktPmJ5
dGVMZW5ndGgoKTsKKyAgICBjb25zdCBhdXRvKiBiYXNlID0gYXJyYXlCdWZmZXJWaWV3ID8gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+dmVjdG9yKCkpIDogc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEoKSk7CisKKyAgICBXYXNtOjpQ
bGFuIHBsYW4odm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgaWYgKHBsYW4u
ZmFpbGVkKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
c3RhdGUsIHNjb3BlLCBjcmVhdGVXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihzdGF0ZSwgcGxhbi5l
cnJvck1lc3NhZ2UoKSkpKTsKKworICAgIC8vIEZJWE1FIHRha2UgY29udGVudCBmcm9tIFBsYW4u
CisKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24o
c3RhdGUtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0
dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKQEAgLTU3LDEwICs4
NCwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3Nl
bWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsICJXZWJBc3NlbWJseS5Nb2R1bGUiKSk7CiB9CiAKLVdlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZSogdGhpc1Byb3Rv
dHlwZSwgU3RydWN0dXJlKiB0aGlzU3RydWN0dXJlKQorV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3RvciogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKiB0aGlzUHJvdG90eXBl
KQogewogICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7Ci0gICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0
aW9uKHZtLCB0aGlzUHJvdG90eXBlLCB0aGlzU3RydWN0dXJlKTsKKyAgICBjb25zdHJ1Y3Rvci0+
ZmluaXNoQ3JlYXRpb24odm0sIHRoaXNQcm90b3R5cGUpOwogICAgIHJldHVybiBjb25zdHJ1Y3Rv
cjsKIH0KIApAQCAtNjksMTIgKzk2LDExIEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlNb2R1bGVD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNz
ZW1ibHlNb2R1bGVQcm90b3R5cGUqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
V2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHByb3RvdHlwZSkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSwgQVNDSUlMaXRlcmFsKCJNb2R1bGUiKSk7CiAgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBl
LCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFJl
YWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKLSAgICBtX01vZHVsZVN0cnVjdHVyZS5z
ZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAKIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3I6OldlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTk5LDcgKzEyNSw2IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpCiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fTW9kdWxlU3RydWN0dXJlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmgKaW5kZXggNTYwNTdhNi4uZTQ1ZjFhMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaApAQCAtMzksMjMgKzM5LDE5IEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3Bl
cnR5VGFibGU7CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogY3Jl
YXRlKFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqLCBTdHJ1Y3R1
cmUqKTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3RvciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgU3RydWN0dXJlKiBNb2R1bGVTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX01vZHVsZVN0cnVjdHVyZS5nZXQoKTsgfQotCiBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBl
KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5
TW9kdWxlUHJvdG90eXBlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENv
bnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlw
ZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fTW9kdWxlU3RydWN0dXJlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVF
cnJvckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCmluZGV4IDU1MjgwMjIuLjAxYjMyZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCkBAIC02MSwxMCArNjEs
MTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IoRXhlY1N0YXRlKiBzdGEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAiV2ViQXNzZW1ibHkuUnVudGltZUVycm9yIikpOwogfQogCi1XZWJBc3NlbWJseVJ1
bnRpbWVFcnJvckNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9y
OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUsIFN0cnVjdHVyZSogdGhpc1N0cnVjdHVyZSkK
K1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5UnVudGltZUVy
cm9yQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKIHsKICAgICBhdXRv
KiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5UnVu
dGltZUVycm9yQ29uc3RydWN0b3I+KHZtLmhlYXApKSBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNv
bnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwotICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlv
bih2bSwgdGhpc1Byb3RvdHlwZSwgdGhpc1N0cnVjdHVyZSk7CisgICAgY29uc3RydWN0b3ItPmZp
bmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90eXBlKTsKICAgICByZXR1cm4gY29uc3RydWN0b3I7
CiB9CiAKQEAgLTczLDcgKzczLDcgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLXZvaWQgV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqKQordm9p
ZCBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFdlYkFzc2VtYmx5UnVudGltZUVycm9yUHJvdG90eXBlKiBwcm90b3R5cGUpCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIEFTQ0lJTGl0ZXJhbCgiUnVudGltZUVycm9yIikpOwog
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIHByb3RvdHlwZSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3JDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3JDb25zdHJ1Y3Rvci5oCmluZGV4IGJlNDE5ZDcuLjc3ZmI2ZTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmgKQEAgLTM5LDEzICszOSwxMyBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNT
dGF0aWNQcm9wZXJ0eVRhYmxlOwogCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5UnVudGltZUVycm9y
Q29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5UnVudGltZUVy
cm9yUHJvdG90eXBlKiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFdlYkFzc2VtYmx5UnVudGlt
ZUVycm9yQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFdlYkFzc2VtYmx5UnVu
dGltZUVycm9yUHJvdG90eXBlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsK
IAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvclByb3RvdHlwZSosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZSopOwogCiBwcml2YXRlOgog
ICAgIFdlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDRiNjYwOGMuLmNhYTdlOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmNwcApAQCAtNTcsMTAgKzU3LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0
ZSkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNh
bGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuVGFibGUi
KSk7CiB9CiAKLVdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSwgU3RydWN0dXJlKiB0aGlzU3RydWN0dXJl
KQorV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0
b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseVRhYmxl
UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQogewogICAgIGF1dG8qIGNvbnN0cnVjdG9yID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yPih2bS5o
ZWFwKSkgV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwotICAgIGNv
bnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgdGhpc1Byb3RvdHlwZSwgdGhpc1N0cnVjdHVy
ZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCB0aGlzUHJvdG90eXBlKTsK
ICAgICByZXR1cm4gY29uc3RydWN0b3I7CiB9CiAKQEAgLTY5LDEyICs2OSwxMSBAQCBTdHJ1Y3R1
cmUqIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKiBwcm90b3R5cGUsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQordm9pZCBXZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSogcHJvdG90eXBlKQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIikpOwog
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7Ci0gICAgbV9U
YWJsZVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAKIFdlYkFzc2VtYmx5
VGFibGVDb25zdHJ1Y3Rvcjo6V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05OSw3ICs5OCw2IEBAIHZvaWQgV2ViQXNzZW1ibHlUYWJs
ZUNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseVRhYmxlQ29uc3Ry
dWN0b3IqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
LSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9UYWJsZVN0cnVjdHVyZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaAppbmRleCBlMDhlNzM1Li5h
NjFjN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuaApAQCAtMzksMjMgKzM5LDE5IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRp
Y1Byb3BlcnR5VGFibGU7CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9y
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseVRhYmxlUHJvdG90eXBlKiwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3RvciogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKiwgV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZSopOwogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBTdHJ1Y3R1cmUqIFRhYmxlU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9UYWJsZVN0cnVjdHVyZS5nZXQoKTsgfQotCiBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUq
LCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZSopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1
Y3RvcihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fVGFibGVTdHJ1Y3R1cmU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLS0gCjIuMTAu
MQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>