<?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>164023</bug_id>
          
          <creation_ts>2016-10-26 10:47:05 -0700</creation_ts>
          <short_desc>WebAssembly JS API: Module should decode strings</short_desc>
          <delta_ts>2016-11-04 17:17:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>keith_miller</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1244840</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-26 10:47:05 -0700</bug_when>
    <thetext>The spec says: https://github.com/WebAssembly/design/blob/master/JS.md#webassemblymodule-constructor

&gt; The spec string values inside Ast.module are decoded as UTF8 as described in Web.md.

Referring to: https://github.com/WebAssembly/design/blob/master/Web.md#names

&gt; A WebAssembly module imports and exports functions. WebAssembly names functions using arbitrary-length byte sequences. Any 8-bit values are permitted in a WebAssembly name, including the null byte and byte sequences that don&apos;t correspond to any Unicode code point regardless of encoding. The most natural Web representation of a mapping of function names to functions is a JS object in which each function is a property. Property names in JS are UTF-16 encoded strings. A WebAssembly module may fail validation on the Web if it imports or exports functions whose names do not transcode cleanly to UTF-16 according to the following conversion algorithm, assuming that the WebAssembly name is in a Uint8Array called array:
&gt;
&gt; function convertToJSString(array)
&gt; {
&gt;   var string = &quot;&quot;;
&gt;   for (var i = 0; i &lt; array.length; ++i)
&gt;     string += String.fromCharCode(array[i]);
&gt;   return decodeURIComponent(escape(string));
&gt; }
&gt; This performs the UTF8 decoding (decodeURIComponent(escape(string))) using a common JS idiom. Transcoding failure is detected by decodeURIComponent, which may throw URIError. If it does, the WebAssembly module will not validate. This validation rule is only mandatory for Web embedding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244845</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-26 10:53:00 -0700</bug_when>
    <thetext>This follows up with Instance&apos;s: If the list of module.imports is not empty and Type(importObject) is not Object, a TypeError is thrown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244846</commentid>
    <comment_count>2</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-26 11:01:38 -0700</bug_when>
    <thetext>As  well as: Let exports be a list of (string, JS value) pairs that is mapped from each external value e in instance.exports as follows: [...]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245904</commentid>
    <comment_count>3</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-28 17:33:43 -0700</bug_when>
    <thetext>*** Bug 164039 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247564</commentid>
    <comment_count>4</comment_count>
      <attachid>293714</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-02 16:42:37 -0700</bug_when>
    <thetext>Created attachment 293714
patch

There&apos;s still a bunch more to do, but that&apos;s a decent enough spot to get a review and maybe commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247566</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-02 16:44:47 -0700</bug_when>
    <thetext>Attachment 293714 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:9:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:106:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: JSTests/ChangeLog:9:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:100:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 4 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247586</commentid>
    <comment_count>6</comment_count>
      <attachid>293723</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-02 17:13:10 -0700</bug_when>
    <thetext>Created attachment 293723
patch

Un-spaghetti some horrible code that had grown very ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247587</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-02 17:14:44 -0700</bug_when>
    <thetext>Attachment 293723 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:9:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:106:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: JSTests/ChangeLog:9:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:100:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 4 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247599</commentid>
    <comment_count>8</comment_count>
      <attachid>293726</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-02 17:42:23 -0700</bug_when>
    <thetext>Created attachment 293726
patch

Fix Type section parsing, it now matches the builder&apos;s generation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247600</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-02 17:44:41 -0700</bug_when>
    <thetext>Attachment 293726 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:9:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:106:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: JSTests/ChangeLog:9:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:102:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:130:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247726</commentid>
    <comment_count>10</comment_count>
      <attachid>293726</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 09:33:48 -0700</bug_when>
    <thetext>Comment on attachment 293726
patch

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

r- on the lack of assert(...). It makes the code very hard to read.

&gt; JSTests/ChangeLog:3
&gt; +        WebAssembly JS API: implement more sections

This should have a link to the bugzilla.

&gt; JSTests/ChangeLog:26
&gt; +        Reviewed by NOBODY (OOPS!).

I don&apos;t think it matters but usually people the &quot;Reviewed by ...&quot; above the comments on what the patch does.

&gt; JSTests/wasm/Builder.js:51
&gt; +    if (!Array.isArray(params)) throw new Error(`expected a parameter array, got &quot;${params}&quot;`);
&gt; +    for (const p of params) if (!WASM.isValidValueType(p)) throw new Error(`Type parameter ${p} isn&apos;t a valid value type`);
&gt; +    if (typeof(ret) === &quot;undefined&quot;) ret = &quot;void&quot;;
&gt; +    if (Array.isArray(ret)) throw new Error(`Multiple return values aren&apos;t supported by WebAssembly yet`);
&gt; +    if (ret !== &quot;void&quot; &amp;&amp; !WASM.isValidValueType(ret)) throw new Error(`Type return ${ret} isn&apos;t a valid value type`);

These should all have a new line and elsewhere in patch. It&apos;s generally against webkit style to have the if and the single statement on the same line.

It might be easier to read if you have an assert function. like:
assert(ret !== &quot;void&quot; &amp;&amp; !WASM.isValidValueType(ret), `Type return ${ret} isn&apos;t a valid value type`);

an assert function would make it clearer where the interesting control flow is and where error checking is happening.

&gt; JSTests/wasm/Builder.js:69
&gt; +    types:

nit: I hate labels...

&gt; JSTests/wasm/Builder.js:73
&gt; +            for (let j = 0; j !== t.params.length; ++j)

Should have { }

&gt; JSTests/wasm/Builder.js:77
&gt; +            break types;

I think you can just use break here.

&gt; JSTests/wasm/Builder.js:117
&gt; +        case &quot;undefined&quot;: index = field; break; // Assume it&apos;s the same as the field (i.e. it&apos;s not being renamed).

multi-line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247955</commentid>
    <comment_count>11</comment_count>
      <attachid>293835</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-03 17:29:15 -0700</bug_when>
    <thetext>Created attachment 293835
patch

Address Keith&apos;s comments. Lots of asserts now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247956</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 17:31:13 -0700</bug_when>
    <thetext>Attachment 293835 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:12:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:106:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: JSTests/ChangeLog:12:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:102:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:130:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248051</commentid>
    <comment_count>13</comment_count>
      <attachid>293867</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-03 22:24:22 -0700</bug_when>
    <thetext>Created attachment 293867
patch

Merge patch and fix new code which used an API that I renamed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248052</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 22:27:02 -0700</bug_when>
    <thetext>Attachment 293867 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:12:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmFormat.h:106:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: JSTests/ChangeLog:12:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: malicious  [changelog/unwantedsecurityterms] [3]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:102:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmParser.h:130:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248189</commentid>
    <comment_count>15</comment_count>
      <attachid>293835</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-04 12:06:05 -0700</bug_when>
    <thetext>Comment on attachment 293835
patch

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

r=me with some more comments. Looks like you need to rebase.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:182
&gt; -
&gt; +        
&gt;          if (verbose)
&gt;              dataLogLn(&quot;Got function type.&quot;);
&gt; -
&gt; +        
&gt;          uint32_t argumentCount;
&gt;          if (!parseVarUInt32(argumentCount))
&gt;              return false;
&gt; -
&gt; +        
&gt;          if (verbose)
&gt;              dataLogLn(&quot;argumentCount: &quot;, argumentCount);
&gt; -
&gt; +        

undo.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:288
&gt; +    // FIXME

ditto.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:372
&gt; +    // FIXME

Add a comment / link to bugzilla?

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:378
&gt; +    // FIXME

ditto.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:409
&gt; +    // FIXME

ditto.

&gt; Source/JavaScriptCore/wasm/WasmParser.h:47
&gt; +    bool WARN_UNUSED_RETURN consumeUTF8String(String &amp;, size_t);

String&amp;

&gt; Source/JavaScriptCore/wasm/WasmParser.h:100
&gt; +ALWAYS_INLINE bool Parser::consumeUTF8String(String &amp;result, size_t stringLength)

Should be String&amp; result

&gt; Source/JavaScriptCore/wasm/WasmPlan.h:57
&gt; +    const Memory* getMemory() const

I think this should just be memory(), that&apos;s more consistent with the naming we use elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248285</commentid>
    <comment_count>16</comment_count>
      <attachid>293931</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-04 14:40:17 -0700</bug_when>
    <thetext>Created attachment 293931
patch

Addressed all comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248312</commentid>
    <comment_count>17</comment_count>
      <attachid>293931</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 15:15:12 -0700</bug_when>
    <thetext>Comment on attachment 293931
patch

Clearing flags on attachment: 293931

Committed r208401: &lt;http://trac.webkit.org/changeset/208401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248313</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 15:15:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248387</commentid>
    <comment_count>19</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-04 17:17:51 -0700</bug_when>
    <thetext>It looks like this patch breaks all the testWasm tests :(. We need to rebaseline those tests until we can migrate them to the new testing infrastructure.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293714</attachid>
            <date>2016-11-02 16:42:37 -0700</date>
            <delta_ts>2016-11-02 17:13:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-more-sections.patch</filename>
            <type>text/plain</type>
            <size>137785</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAxYWVlOTI5MjQ0OTczYjk5Zjg2MmQzMmNhMTBmNGE1Yjg0MTViM2MyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDI3IE9jdCAyMDE2IDE0OjM0OjA0IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0aW9ucwoKT24gdGhlIEpTQyBzaWRlOgoK
IC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgogLSBQ
YXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0aW9ucy4KIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBp
bnN0ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxz
LiBUaGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24g
d2hlbiBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgogLSBFbmNhcHN1bGF0ZSBhbGwgcGFy
c2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQg
ZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJ
bnN0YW5jZSkuCiAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1bGUg
aW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVlZGxl
c3NseS4KIC0gUmVtb3ZlIGFsbCByZW1haW5kZXJzIG9mIHBvbHlmaWxsLXByb3RvdHlwZS0xLCBh
bmQgdXBkYXRlIGxpY2Vuc2UuCiAtIEFkZCBtaXNzaW5nIFdhc21PcHMuaCBhbmQgV2FzbVZhbGlk
YXRlSW5saW5lcy5oIGF1dG8tZ2VuZXJhdGlvbiBmb3IgY21ha2UgYnVpbGQuCgpPbiB0aGUgQnVp
bGRlci5qcyB0ZXN0aW5nIHNpZGU6CgogLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KIC0gQ2hlY2sgc2VjdGlv
biBvcmRlciBhbmQgdW5pcXVlbmVzcy4KIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRoZSBU
eXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50cmll
cy4KIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1OSArKysKIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjkwICsrKysrKysrKyst
LS0KIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzICAgICAgICAgIHwg
MTA3ICsrKysrCiBKU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMgICAgICAgICAgICAgICAg
ICAgICB8ICAxMiArCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgOSArCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNSArCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzICAg
ICAgICAgICAgICAgICB8ICAxMCArCiBKU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRl
ckpTT04uanMgICAgICAgICB8IDQ1NSArKysrKysrKysrKysrKystLS0tLS0KIEpTVGVzdHMvd2Fz
bS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanMgIHwgIDEzIC0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgIHwgIDE3ICsKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgIDc2ICsrKysK
IC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAgIHwgICA3
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwICAgICAgICAgICAgICAgICB8
IDI0MiArKysrKy0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5j
cHAgICAgICAgICAgfCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgIDk3ICsrKy0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8IDMwMiArKysrKysrKystLS0tLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oICAgICAgfCAgMjMgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCAgICAgICAgICAgIHwgIDI5ICsrCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzOCArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjkg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oICAgICAgICAgIHwg
IDIwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cCB8ICAxMCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oICAgfCAgMjAgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgICAgIHwgICAzICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcCAgICAgICB8ICAgMSArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcCAgICAgICB8ICAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmNwcCAgICAgICAgfCAgIDEgKwogMjcgZmlsZXMgY2hhbmdlZCwgMTM3NCBpbnNl
cnRpb25zKCspLCA1MTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93
YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBmNWRjNzEuLmNmOGY5NTUgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNjIgQEAKKzIwMTYtMTEtMDIgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IG1vcmUgc2VjdGlvbnMKKwor
ICAgICAgICBPbiB0aGUgSlNDIHNpZGU6CisKKyAgICAgICAgIC0gUHV0IGluIHBhcnNlciBzdHVi
cyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgorICAgICAgICAgLSBQYXJzZSBJbXBvcnQs
IEV4cG9ydCBzZWN0aW9ucy4KKyAgICAgICAgIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBpbnN0
ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxzLiBU
aGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24gd2hl
biBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgorICAgICAgICAgLSBFbmNhcHN1bGF0ZSBh
bGwgcGFyc2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtp
bmcgaXQgZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVs
ZSB0byBJbnN0YW5jZSkuCisgICAgICAgICAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xk
IHBhcnNlZCBtb2R1bGUgaW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNt
TWVtb3J5LmggbmVlZGxlc3NseS4KKyAgICAgICAgIC0gcGFyc2VDb2RlOiBhdm9pZCBvdmVyZmxv
dyB0aHJvdWdoIGZ1bmN0aW9uIHNpemUuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVy
cyBvZiBwb2x5ZmlsbC1wcm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAg
LSBBZGQgbWlzc2luZyBXYXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdl
bmVyYXRpb24gZm9yIGNtYWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRl
c3Rpbmcgc2lkZToKKworICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hl
Y2sgc2VjdGlvbiBvcmRlciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBh
dXRvLWdlbmVyYXRlIHRoZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIElt
cG9ydCAvIENvZGUgZW50cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGlt
cG9ydC4KKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IE1vZHVsZSBzaG91bGQgZGVjb2Rl
IHN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd2FzbS9CdWlsZGVyLmpzOiBidWlsZCB0eXBlLCBpbXBvcnQsIGFuZCBleHBvcnQgc2VjdGlv
bnMKKyAgICAgICAgKGNvbnN0Ll9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZSk6CisgICAgICAg
ICogd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOiBBZGRlZC4gRm9ya2VkIGZyb20g
QnVpbGRlci5qcworICAgICAgICAoY29uc3QuZW1pdHRlcnMuVHlwZSk6CisgICAgICAgIChjb25z
dC5lbWl0dGVycy5JbXBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRnVuY3Rpb24pOgor
ICAgICAgICAoY29uc3QuZW1pdHRlcnMuVGFibGUpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMu
TWVtb3J5KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkdsb2JhbCk6CisgICAgICAgIChjb25z
dC5lbWl0dGVycy5FeHBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuU3RhcnQpOgorICAg
ICAgICAoY29uc3QuZW1pdHRlcnMuRWxlbWVudCk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5D
b2RlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkRhdGEpOgorICAgICAgICAoZXhwb3J0LmNv
bnN0LkJpbmFyeSk6CisgICAgICAgICogd2FzbS9Mb3dMZXZlbEJpbmFyeS5qczogQWRkIGEgZmV3
IHVzZWZ1bCBvdXRwdXRzCisgICAgICAgIChleHBvcnQuZGVmYXVsdC5Mb3dMZXZlbEJpbmFyeS5w
cm90b3R5cGUudmFydWludDEpOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTG93TGV2ZWxCaW5h
cnkucHJvdG90eXBlLnZhcmludDcpOgorICAgICAgICAqIHdhc20vV0FTTS5qczogdmFsdWUgdHlw
ZSBhbmQgZXh0ZXJuYWwga2luZCBoZWxwZXJzCisgICAgICAgICogd2FzbS9hc3NlcnQuanM6IGFy
cmF5IGVsZW1lbnQtd2lzZSBlcXVhbGl0eSBjb21wYXJpc29uCisgICAgICAgIChjb25zdC5fZXEp
OgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzOgorICAgICAgICAoTW9kdWxl
V2l0aEltcG9ydHMpOgorICAgICAgICAqIHdhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04u
anM6IG1hbnkgbW9yZSB0ZXN0cyBmb3IgYWxsIHRoZSBuZXcgQnVpbGRlciBBUElzLCBhbmQgdXBk
YXRlIHRvIHNvbWUgb2xkZXIgdGVzdHMgd2hpY2ggbm93IHJlcXVpcmUgYSBUeXBlIHNlY3Rpb24g
b3IgcmVqaWdnZXJlZCBGdW5jdGlvbiBzaWduYXR1cmUKKyAgICAgICAgKGNvbnN0LmFzc2VydE9w
VGhyb3dzKToKKyAgICAgICAgKFNlY3Rpb25zV2l0aFNhbWVDdXN0b21OYW1lKToKKyAgICAgICAg
KFR3b1R5cGVTZWN0aW9ucyk6CisgICAgICAgIChFbXB0eUltcG9ydFNlY3Rpb24pOgorICAgICAg
ICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90
ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qczogcmVtb3ZlIGEgdGVzdCB3aGljaCB3YXNuJ3QgaGVs
cGZ1bCBhbmQgaXMgbm93IG9ic29sZXRlCisgICAgICAgIChDdXN0b21TZWN0aW9uKToKKwogMjAx
Ni0xMS0wMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBz
aG91bGQgYmUgYWJsZSB0byBlbGltaW5hdGUgcmVzdCBwYXJhbWV0ZXIgYWxsb2NhdGlvbnMKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIu
anMKaW5kZXggMDU2ZDcyZC4uNjE4MTYzMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKQEAgLTIzLDcgKzIzLDcgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotaW1wb3J0IExvd0xldmVsQmluYXJ5IGZyb20gJ0xvd0xldmVs
QmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIEJ1aWxkV2ViQXNzZW1ibHkgZnJvbSAnQnVpbGRlcl9X
ZWJBc3NlbWJseUJpbmFyeS5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOwog
CiBjb25zdCBfdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4gewpAQCAtNDMsNTEgKzQzLDExOSBA
QCBjb25zdCBfaXNWYWxpZFZhbHVlID0gKHZhbHVlLCB0eXBlKSA9PiB7CiB9OwogY29uc3QgX3Vu
a25vd25TZWN0aW9uSWQgPSAwOwogCi1jb25zdCBfQnVpbGRXZWJBc3NlbWJseUJpbmFyeSA9IChw
cmVhbWJsZSwgc2VjdGlvbnMpID0+IHsKLSAgICBsZXQgd2FzbUJpbiA9IG5ldyBMb3dMZXZlbEJp
bmFyeSgpOwotICAgIGNvbnN0IHB1dCA9IChiaW4sIHR5cGUsIHZhbHVlKSA9PiBiaW5bdHlwZV0o
dmFsdWUpOwotICAgIGZvciAoY29uc3QgcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnByZWFtYmxlKQot
ICAgICAgICBwdXQod2FzbUJpbiwgcC50eXBlLCBwcmVhbWJsZVtwLm5hbWVdKTsKLSAgICBmb3Ig
KGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHsKLSAgICAgICAgcHV0KHdhc21CaW4sIFdBU00u
c2VjdGlvbkVuY29kaW5nVHlwZSwgc2VjdGlvbi5pZCk7Ci0gICAgICAgIGxldCBzZWN0aW9uQmlu
ID0gd2FzbUJpbi5uZXdQYXRjaGFibGUoInZhcnVpbnQiKTsKLSAgICAgICAgc3dpdGNoIChzZWN0
aW9uLm5hbWUpIHsKLSAgICAgICAgY2FzZSAiVHlwZSI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2Ug
IkltcG9ydCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIk
e3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIkZ1bmN0aW9uIjogdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAg
ICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rp
b24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJNZW1vcnkiOiB0aHJv
dyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9
ImApOwotICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50
ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJFeHBv
cnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0
aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJTdGFydCI6IHRocm93IG5ldyBFcnJvcihgVW5p
bXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNh
c2UgIkVsZW1lbnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlw
ZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJDb2RlIjoKLSAgICAgICAgICAg
IGNvbnN0IG51bWJlck9mRnVuY3Rpb25Cb2RpZXMgPSBzZWN0aW9uLmRhdGEubGVuZ3RoOwotICAg
ICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJ2YXJ1aW50IiwgbnVtYmVyT2ZGdW5jdGlvbkJvZGll
cyk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGZ1bmMgb2Ygc2VjdGlvbi5kYXRhKSB7Ci0gICAg
ICAgICAgICAgICAgbGV0IGZ1bmNCaW4gPSBzZWN0aW9uQmluLm5ld1BhdGNoYWJsZSgidmFydWlu
dCIpOwotICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsQ291bnQgPSBmdW5jLmxvY2Fscy5sZW5n
dGg7Ci0gICAgICAgICAgICAgICAgcHV0KGZ1bmNCaW4sICJ2YXJ1aW50IiwgbG9jYWxDb3VudCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsQ291bnQgIT09IDApIHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogbG9jYWxzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wIG9m
IGZ1bmMuY29kZSkgewotICAgICAgICAgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInVpbnQ4Iiwg
b3AudmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAob3AuYXJndW1lbnRzLmxlbmd0aCAh
PT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBhcmd1bWVudHNgKTsgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjcwNgotICAgICAg
ICAgICAgICAgICAgICBpZiAob3AuaW1tZWRpYXRlcy5sZW5ndGggIT09IDApIHRocm93IG5ldyBF
cnJvcihgVW5pbXBsZW1lbnRlZDogaW1tZWRpYXRlc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzA2Citjb25zdCBfbm9ybWFsaXplRnVuY3Rp
b25TaWduYXR1cmUgPSAocGFyYW1zLCByZXQpID0+IHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXko
cGFyYW1zKSkgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBhIHBhcmFtZXRlciBhcnJheSwgZ290
ICIke3BhcmFtc30iYCk7CisgICAgZm9yIChjb25zdCBwIG9mIHBhcmFtcykgaWYgKCFXQVNNLmlz
VmFsaWRWYWx1ZVR5cGUocCkpIHRocm93IG5ldyBFcnJvcihgVHlwZSBwYXJhbWV0ZXIgJHtwfSBp
c24ndCBhIHZhbGlkIHZhbHVlIHR5cGVgKTsKKyAgICBpZiAodHlwZW9mKHJldCkgPT09ICJ1bmRl
ZmluZWQiKSByZXQgPSAidm9pZCI7CisgICAgaWYgKEFycmF5LmlzQXJyYXkocmV0KSkgdGhyb3cg
bmV3IEVycm9yKGBNdWx0aXBsZSByZXR1cm4gdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgYnkgV2Vi
QXNzZW1ibHkgeWV0YCk7CisgICAgaWYgKHJldCAhPT0gInZvaWQiICYmICFXQVNNLmlzVmFsaWRW
YWx1ZVR5cGUocmV0KSkgdGhyb3cgbmV3IEVycm9yKGBUeXBlIHJldHVybiAke3JldH0gaXNuJ3Qg
YSB2YWxpZCB2YWx1ZSB0eXBlYCk7CisgICAgcmV0dXJuIFtwYXJhbXMsIHJldF07Cit9OworCitj
b25zdCBfbWF5YmVSZWdpc3RlclR5cGUgPSAoYnVpbGRlciwgdHlwZSkgPT4geworICAgIGNvbnN0
IHR5cGVTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiVHlwZSIpOworICAgIGlmICh0eXBl
b2YodHlwZSkgPT09ICJudW1iZXIiKSB7CisgICAgICAgIC8vIFR5cGUgbnVtYmVycyBhbHJlYWR5
IHJlZmVyIHRvIHRoZSB0eXBlIHNlY3Rpb24sIG5vIG5lZWQgdG8gcmVnaXN0ZXIgdGhlbS4KKyAg
ICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YodHlw
ZVNlY3Rpb24pID09PSAidW5kZWZpbmVkIikgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCB1c2UgdHlw
ZSAke3R5cGV9IGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2YodHlwZVNlY3Rpb24uZGF0YVt0eXBlXSkgPT09ICJ1bmRlZmluZWQiKSB0aHJv
dyBuZXcgRXJyb3IoYFR5cGUgJHt0eXBlfSBkb2Vzbid0IGV4aXN0IGluIHR5cGUgc2VjdGlvbmAp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKyAgICBpZiAodHlwZW9m
KHR5cGUpICE9PSAib2JqZWN0IiB8fCB0eXBlb2YodHlwZS5wYXJhbXMpID09PSAidW5kZWZpbmVk
IikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0eXBlIHRvIGJlIGEgbnVtYmVyIG9yIG9iamVj
dCB3aXRoICdwYXJhbXMnIGFuZCBvcHRpb25hbGx5ICdyZXQnIGZpZWxkc2ApOworICAgIGNvbnN0
IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUodHlwZS5wYXJhbXMs
IHR5cGUucmV0KTsKKyAgICBpZiAodHlwZW9mKHR5cGVTZWN0aW9uKSA9PT0gInVuZGVmaW5lZCIp
IHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgYWRkIHR5cGUgaWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3Qg
cHJlc2VudGApOworICAgIC8vIFRyeSByZXVzaW5nIGFuIGVxdWl2YWxlbnQgdHlwZSBmcm9tIHRo
ZSB0eXBlIHNlY3Rpb24uCisgICAgdHlwZXM6CisgICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IHR5
cGVTZWN0aW9uLmRhdGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29uc3QgdCA9IHR5cGVTZWN0
aW9uLmRhdGFbaV07CisgICAgICAgIGlmICh0LnJldCA9PT0gcmV0ICYmIHBhcmFtcy5sZW5ndGgg
PT09IHQucGFyYW1zLmxlbmd0aCkgeworICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogIT09
IHQucGFyYW1zLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbal0gIT09
IHQucGFyYW1zW2pdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0eXBlczsKKyAgICAg
ICAgICAgIHR5cGUgPSBpOworICAgICAgICAgICAgYnJlYWsgdHlwZXM7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKHR5cGVvZih0eXBlKSAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgLy8gQ291
bGRuJ3QgcmV1c2UgYSBwcmUtZXhpc3RpbmcgdHlwZSwgcmVnaXN0ZXIgdGhpcyB0eXBlIGluIHRo
ZSB0eXBlIHNlY3Rpb24uCisgICAgICAgIHR5cGVTZWN0aW9uLmRhdGEucHVzaCh7IHBhcmFtczog
cGFyYW1zLCByZXQ6IHJldCB9KTsKKyAgICAgICAgdHlwZSA9IHR5cGVTZWN0aW9uLmRhdGEubGVu
Z3RoIC0gMTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGU7Cit9OworCisvLyBGSVhNRSB1bnNwYWdo
ZXR0aSB0aGlzIGNvZGUuCitjb25zdCBfaW1wb3J0RXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24g
PSAoYnVpbGRlciwgdGhpc1NlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CisgICAgY29uc3QgaW1w
b3J0T3JFeHBvcnQgPSB0aGlzU2VjdGlvbi5uYW1lOworICAgIGNvbnN0IGlzSW1wb3J0ID0gaW1w
b3J0T3JFeHBvcnQgPT09ICJJbXBvcnQiOworICAgIGlmICghaXNJbXBvcnQgJiYgaW1wb3J0T3JF
eHBvcnQgIT09ICJFeHBvcnQiKSB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2Js
ZW06IGV4cG9ydGVkICIke2ltcG9ydE9yRXhwb3J0fSIgdG8gYmUgIkltcG9ydCIgb3IgIkV4cG9y
dCJgKTsKKyAgICByZXR1cm4gKGEwLCBhMSwgYTIpID0+IHsKKyAgICAgICAgbGV0IG1vZHVsZSwg
ZmllbGQsIHR5cGUsIGluZGV4OworICAgICAgICBpZiAoaXNJbXBvcnQpIHsKKyAgICAgICAgICAg
IFttb2R1bGUsIGZpZWxkLCB0eXBlLCBpbmRleF0gPSBbYTAsIGExLCBhMiwgdW5kZWZpbmVkXQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgW21vZHVsZSwgZmllbGQsIHR5cGUsIGluZGV4
XSA9CisgICAgICAgICAgICAgICAgKHR5cGVvZihhMCkgPT09ICJzdHJpbmciICYmIHR5cGVvZihh
MSkgPT09ICJzdHJpbmciKQorICAgICAgICAgICAgICAgID8gW3VuZGVmaW5lZCwgYTAsIHVuZGVm
aW5lZCwgYTFdIC8vIGZpZWxkIGlzIHRoZSBleHBvcnRlZCAocmVuYW1lZCkgbmFtZSwgaW5kZXgg
aXMgdGhlIGludGVybmFsIG5hbWUuCisgICAgICAgICAgICAgICAgOiAoKHR5cGVvZihhMSkgPT09
ICJvYmplY3QiICYmIHR5cGVvZihhMS5wYXJhbXMpID09PSAidW5kZWZpbmVkIikKKyAgICAgICAg
ICAgICAgICAgICA/IFt1bmRlZmluZWQsIGEwLCB1bmRlZmluZWQsIGExXSAvLyBSZS1leHBvcnRp
bmcgYW4gaW1wb3J0LCBpbmRleCBpcyBtb2R1bGUrZmllbGQgb2YgdGhlIGltcG9ydC4KKyAgICAg
ICAgICAgICAgICAgICA6IFt1bmRlZmluZWQsIGEwLCBhMSwgYTJdKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaXNJbXBvcnQgJiYgdHlwZW9mKG1vZHVsZSkgIT09ICJzdHJpbmciKSB0aHJvdyBu
ZXcgRXJyb3IoYCR7aW1wb3J0T3JFeHBvcnR9IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUgYSBz
dHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBpZiAodHlwZW9mKGZpZWxkKSAhPT0g
InN0cmluZyIpIHRocm93IG5ldyBFcnJvcihgJHtpbXBvcnRPckV4cG9ydH0gZnVuY3Rpb24gZmll
bGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBjb25zdCB0
eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICAgICAgaWYgKCFp
c0ltcG9ydCAmJiB0eXBlb2YodHlwZSkgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAv
LyBFeHBvcnRzIGNhbiBsZWF2ZSB0aGUgdHlwZSB1bnNwZWNpZmllZCwgbGV0dGluZyB0aGUgQ29k
ZSBidWlsZGVyIHBhdGNoIHRoZW0gdXAgbGF0ZXIuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOworICAgICAgICB9
CisgICAgICAgIGlmICghaXNJbXBvcnQpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGNoZWNr
IG11Y2ggYWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhlIENvZGUgc2VjdGlvbiBzdWNjZWVk
cyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBkb25lIGF0IENvZGUoKS5FbmQoKSB0
aW1lLgorICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YoaW5kZXgpKSB7CisgICAgICAgICAgICBj
YXNlICJzdHJpbmciOiBicmVhazsgLy8gQXNzdW1lIGl0J3MgYSBmdW5jdGlvbiBuYW1lIHdoaWNo
IHdpbGwgYmUgcmV2ZWFsZWQgaW4gdGhlIENvZGUgc2VjdGlvbi4KKyAgICAgICAgICAgIGNhc2Ug
Im51bWJlciI6IGJyZWFrOyAvLyBBc3N1bWUgaXQncyBhIG51bWJlciBpbiB0aGUgImZ1bmN0aW9u
IGluZGV4IHNwYWNlIi4KKyAgICAgICAgICAgIGNhc2UgIm9iamVjdCI6CisgICAgICAgICAgICAg
ICAgLy8gUmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KKyAgICAgICAgICAgICAgICBpZiAodHlwZW9m
KGluZGV4Lm1vZHVsZSkgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZihpbmRleC5maWVsZCkgPT09
ICJ1bmRlZmluZWQiKSB0aHJvdyBuZXcgRXJyb3IoYFJlLWV4cG9ydGluZyAiJHtmaWVsZH0iIGZy
b20gYW4gaW1wb3J0IHJlcXVpcmVzIGFuIG9iamVjdCB3aXRoIG1vZHVsZSBhbmQgZmllbGRgKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInVuZGVmaW5lZCI6IGlu
ZGV4ID0gZmllbGQ7IGJyZWFrOyAvLyBBc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgZmllbGQg
KGkuZS4gaXQncyBub3QgYmVpbmcgcmVuYW1lZCkuCisgICAgICAgICAgICBkZWZhdWx0OiB0aHJv
dyBuZXcgRXJyb3IoYEV4cG9ydCBzZWN0aW9uJ3MgaW5kZXggbXVzdCBiZSBhIHN0cmluZyBvciBh
IG51bWJlciwgZ290ICR7aW5kZXh9YCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25z
dCBjb3JyZXNwb25kaW5nSW1wb3J0ID0gYnVpbGRlci5fZ2V0RnVuY3Rpb25Gcm9tSW5kZXhTcGFj
ZShpbmRleCk7CisgICAgICAgICAgICBjb25zdCBpbXBvcnRTZWN0aW9uID0gYnVpbGRlci5fZ2V0
U2VjdGlvbigiSW1wb3J0Iik7CisgICAgICAgICAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gIm9i
amVjdCIpIHsKKyAgICAgICAgICAgICAgICAvLyBSZS1leHBvcnRpbmcgYW4gaW1wb3J0IHVzaW5n
IGl0cyBtb2R1bGUrZmllbGQgbmFtZS4KKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGNvcnJl
c3BvbmRpbmdJbXBvcnQpID09PSAidW5kZWZpbmVkIikgdGhyb3cgbmV3IEVycm9yKGBSZS1leHBv
cnRpbmcgIiR7ZmllbGR9IiBjb3VsZG4ndCBmaW5kIGltcG9ydCBmcm9tIG1vZHVsZSAiJHtpbmRl
eC5tb2R1bGV9IiBmaWVsZCAiJHtpbmRleC5maWVsZH0iYCk7CisgICAgICAgICAgICAgICAgaW5k
ZXggPSBjb3JyZXNwb25kaW5nSW1wb3J0OworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YodHlw
ZSkgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gaW1wb3J0U2Vj
dGlvbi5kYXRhW2luZGV4XS50eXBlOworICAgICAgICAgICAgICAgIGlmIChidWlsZGVyLl9jaGVj
a2VkICYmIHR5cGUgIT09IGltcG9ydFNlY3Rpb24uZGF0YVtpbmRleF0udHlwZSkgdGhyb3cgbmV3
IEVycm9yKGBSZS1leHBvcnRpbmcgaW1wb3J0ICIke2ltcG9ydFNlY3Rpb24uZGF0YVtpbmRleF0u
ZmllbGR9IiBhcyAiJHtmaWVsZH0iIGhhcyBtaXNtYXRjaGluZyB0eXBlYCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHR5cGVvZihjb3JyZXNwb25kaW5nSW1wb3J0KSAhPT0gInVuZGVmaW5lZCIp
IHsKKyAgICAgICAgICAgICAgICAvLyBSZS1leHBvcnRpbmcgYW4gaW1wb3J0IHVzaW5nIGl0cyBp
bmRleC4KKyAgICAgICAgICAgICAgICBsZXQgZXhwb3J0ZWRJbXBvcnQ7CisgICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBpIG9mIGltcG9ydFNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaS5tb2R1bGUgPT09IGNvcnJlc3BvbmRpbmdJbXBvcnQubW9kdWxlICYmIGkuZmll
bGQgPT09IGNvcnJlc3BvbmRpbmdJbXBvcnQuZmllbGQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cG9ydGVkSW1wb3J0ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGZ1bmNCaW4uYXBwbHkoKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHR5cGUpID09PSAi
dW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGV4cG9ydGVkSW1wb3J0LnR5
cGU7CisgICAgICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQgJiYgdHlwZSAhPT0gZXhw
b3J0ZWRJbXBvcnQudHlwZSkgdGhyb3cgbmV3IEVycm9yKGBSZS1leHBvcnRpbmcgaW1wb3J0ICIk
e2V4cG9ydGVkSW1wb3J0LmZpZWxkfSIgYXMgIiR7ZmllbGR9IiBoYXMgbWlzbWF0Y2hpbmcgdHlw
ZWApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIkRh
dGEiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0
aW9uLm5hbWV9ImApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHNlY3Rpb24u
aWQgIT09IF91bmtub3duU2VjdGlvbklkKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2VjdGlv
biAiJHtzZWN0aW9uLm5hbWV9IiB3aXRoIG51bWJlciAke3NlY3Rpb24uaWR9YCk7Ci0gICAgICAg
ICAgICBwdXQoc2VjdGlvbkJpbiwgInN0cmluZyIsIHNlY3Rpb24ubmFtZSk7Ci0gICAgICAgICAg
ICBmb3IgKGNvbnN0IGJ5dGUgb2Ygc2VjdGlvbi5kYXRhKQotICAgICAgICAgICAgICAgIHB1dChz
ZWN0aW9uQmluLCAidWludDgiLCBieXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIHNlY3Rpb25CaW4uYXBwbHkoKTsKKyAgICAgICAgbGV0IGRhdGEgPSB7IGZpZWxk
OiBmaWVsZCwgdHlwZTogdHlwZSwga2luZDogIkZ1bmN0aW9uIiB9OworICAgICAgICBpZiAoaXNJ
bXBvcnQpCisgICAgICAgICAgICBkYXRhLm1vZHVsZSA9IG1vZHVsZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZGF0YS5pbmRleCA9IGluZGV4OworICAgICAgICB0aGlzU2VjdGlvbi5kYXRh
LnB1c2goZGF0YSk7CisgICAgICAgIGlmIChpc0ltcG9ydCkKKyAgICAgICAgICAgIC8vIEltcG9y
dHMgYWxzbyBjb3VudCBpbiB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2UuIE1hcCB0aGVtIGFzIG9i
amVjdHMgdG8gYXZvaWQgY2xhc2hpbmcgd2l0aCBDb2RlIGZ1bmN0aW9ucycgbmFtZXMuCisgICAg
ICAgICAgICBidWlsZGVyLl9yZWdpc3RlckZ1bmN0aW9uVG9JbmRleFNwYWNlKHsgbW9kdWxlOiBt
b2R1bGUsIGZpZWxkOiBmaWVsZCB9KTsKKyAgICAgICAgcmV0dXJuIG5leHRCdWlsZGVyOwogICAg
IH0KLSAgICByZXR1cm4gd2FzbUJpbjsKIH07CiAKIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxk
ZXIgewpAQCAtOTgsNiArMTY2LDggQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAg
ICAgICAgICAgICBwcmVhbWJsZVtwLm5hbWVdID0gcC52YWx1ZTsKICAgICAgICAgdGhpcy5zZXRQ
cmVhbWJsZShwcmVhbWJsZSk7CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zID0gW107CisgICAgICAg
IHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZSA9IHt9OworICAgICAgICB0aGlzLl9mdW5jdGlvbklu
ZGV4U3BhY2VDb3VudCA9IDA7CiAgICAgICAgIHRoaXMuX3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJz
KCk7CiAgICAgfQogICAgIHNldENoZWNrZWQoY2hlY2tlZCkgewpAQCAtMTA4LDI1ICsxNzgsMTE0
IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICB0aGlzLl9wcmVhbWJs
ZSA9IE9iamVjdC5hc3NpZ24odGhpcy5fcHJlYW1ibGUgfHwge30sIHApOwogICAgICAgICByZXR1
cm4gdGhpczsKICAgICB9CisgICAgX3JlZ2lzdGVyRnVuY3Rpb25Ub0luZGV4U3BhY2UobmFtZSkg
eworICAgICAgICAvLyBDb2xsaXNpb25zIGFyZSBmaW5lOiB3ZSdsbCBzaW1wbHkgY291bnQgdGhl
IGZ1bmN0aW9uIGFuZCBmb3JnZXQgdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgdGhpcy5fZnVu
Y3Rpb25JbmRleFNwYWNlW25hbWVdID0gdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlQ291bnQrKzsK
KyAgICAgICAgLy8gTWFwIGl0IGJvdGggd2F5cywgdGhlIG51bWJlciBzcGFjZSBpcyBkaXN0aW5j
dCBmcm9tIHRoZSBuYW1lIHNwYWNlLgorICAgICAgICB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2Vb
dGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlW25hbWVdXSA9IG5hbWU7CisgICAgfQorICAgIF9nZXRG
dW5jdGlvbkZyb21JbmRleFNwYWNlKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0
aW9uSW5kZXhTcGFjZVtuYW1lXTsKKyAgICB9CiAgICAgX3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJz
KCkgewogICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gaW4gV0FTTS5kZXNjcmlwdGlvbi5zZWN0
aW9uKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKKyAgICAgICAgICAgIGNhc2Ug
IlR5cGUiOgorICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCB0eXBlQnVpbGRlciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVuZDog
KCkgPT4gYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmM6IChwYXJhbXMsIHJl
dCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhbXMsIHJldF0gPSBfbm9y
bWFsaXplRnVuY3Rpb25TaWduYXR1cmUocGFyYW1zLCByZXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMuZGF0YS5wdXNoKHsgcGFyYW1zOiBwYXJhbXMsIHJldDogcmV0IH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlQnVpbGRlcjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0eXBlQnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiSW1wb3J0IjoKKyAgICAgICAgICAgICAgICB0
aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMg
PSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBp
bXBvcnRCdWlsZGVyID0geworICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlz
LAorICAgICAgICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9y
KGBVbmltcGxlbWVudGVkOiBpbXBvcnQgdGFibGVgKTsgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE1lbW9yeTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9y
dCBtZW1vcnlgKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4geyB0
aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxgKTsgfSwKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5GdW5j
dGlvbiA9IF9pbXBvcnRFeHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRC
dWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltcG9ydEJ1aWxkZXI7CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
IkV4cG9ydCI6CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0QnVpbGRlciA9IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFRh
YmxlOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogZXhwb3J0IHRhYmxl
YCk7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnk6ICgpID0+IHsgdGhyb3cgbmV3
IEVycm9yKGBVbmltcGxlbWVudGVkOiBleHBvcnQgbWVtb3J5YCk7IH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBHbG9iYWw6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVk
OiBleHBvcnQgZ2xvYmFsYCk7IH0sCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfaW1wb3J0RXhwb3J0RnVuY3Rpb25D
b250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBleHBvcnRCdWlsZGVyOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJDb2RlIjoKICAgICAgICAgICAgICAgICB0aGlz
W3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0
aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBidWls
ZGVyID0gdGhpczsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZUJ1aWxkZXIgPSAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiBidWlsZGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgRnVuY3Rpb246IHBhcmFtZXRlcnMgPT4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGludmFsaWRQYXJhbWV0ZXJUeXBlcyA9IHBhcmFtZXRlcnMuZmls
dGVyKHAgPT4gIVdBU00uaXNWYWxpZFZhbHVlVHlwZShwKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGludmFsaWRQYXJhbWV0ZXJUeXBlcy5sZW5ndGggIT09IDApIHRocm93IG5l
dyBFcnJvcihgRnVuY3Rpb24gZGVjbGFyZWQgd2l0aCBwYXJhbWV0ZXJzIFske3BhcmFtZXRlcnN9
XSwgaW52YWxpZDogWyR7aW52YWxpZFBhcmFtZXRlclR5cGVzfV1gKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEVuZDogKCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IG5vdyBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZW1hcCB0aGUgZXhwb3J0IHNlY3Rpb24n
cyAidHlwZSIgYW5kICJpbmRleCIgYWNjb3JkaW5nIHRvIHRoZSBDb2RlIHNlY3Rpb24gd2UncmUg
Y3VycmVudGx5IGVuZGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBl
U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbXBvcnRTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiSW1w
b3J0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0U2VjdGlvbiA9
IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkV4cG9ydCIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNvZGVTZWN0aW9uID0gczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZXhwb3J0U2VjdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IGUgb2YgZXhwb3J0U2VjdGlvbi5kYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZihlLmluZGV4KSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVk
IGV4cG9ydCBpbmRleCAiJHtlLmluZGV4fSJgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgInN0cmluZyI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBpbmRleCA9IGJ1aWxkZXIuX2dldEZ1bmN0aW9uRnJvbUluZGV4U3Bh
Y2UoZS5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHR5cGVvZihpbmRleCkgIT09ICJudW1iZXIiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBzZWN0
aW9uIGNvbnRhaW5zIHVuZGVmaW5lZCBmdW5jdGlvbiAiJHtlLmluZGV4fSJgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmluZGV4ID0gaW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIEZhbGx0aHJvdWdoLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAibnVtYmVyIjogeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYnVpbGRlci5fZ2V0RnVu
Y3Rpb25Gcm9tSW5kZXhTcGFjZShlLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYnVpbGRlci5fY2hlY2tlZCAmJiBpbmRleCA9PT0gInVuZGVmaW5l
ZCIpIHRocm93IG5ldyBFcnJvcihgRXhwb3J0ICIke2UuZmllbGR9IiBkb2Vzbid0IGNvcnJlc3Bv
bmQgdG8gYSBkZWZpbmVkIGluIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZWApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgInVuZGVmaW5lZCI6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBGdW5jdGlv
bigpLkVuZCgpIHdpdGggdW5kZWZpbmVkIGV4cG9ydCBpbmRleGApOyAvLyBGSVhNRQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAidW5kZWZpbmVkIikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGZ1bmN0
aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJlLWV4cG9ydHMgd2VyZSBoYW5kbGVk
IGVhcmxpZXIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNlY3Rpb24gPyBpbXBvcnRTZWN0aW9u
LmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBmdW5jdGlvbkluZGV4ID0gZS5pbmRleCAtIGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNl
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnR5cGUgPSBjb2Rl
U2VjdGlvbi5kYXRhW2Z1bmN0aW9uSW5kZXhdLnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJ1aWxkZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgRnVuY3Rpb246IChhMCwgYTEpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZXQgc2lnbmF0dXJlID0gdHlwZW9mKGEwKSA9PT0gInN0cmluZyIgPyBhMSA6IGEwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZihh
MCkgPT09ICJzdHJpbmciID8gYTAgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZihzaWduYXR1cmUpID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0geyBwYXJhbXM6IFtdIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihzaWduYXR1cmUpICE9PSAib2JqZWN0IiB8
fCB0eXBlb2Yoc2lnbmF0dXJlLnBhcmFtcykgPT09ICJ1bmRlZmluZWQiKSB0aHJvdyBuZXcgRXJy
b3IoYEV4cGVjdCBmdW5jdGlvbiBzaWduYXR1cmUgdG8gYmUgYW4gb2JqZWN0IHdpdGggYSAicGFy
YW1zIiBmaWVsZCwgZ290ICIke3NpZ25hdHVyZX0iYCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgW3BhcmFtcywgcmV0XSA9IF9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZShz
aWduYXR1cmUucGFyYW1zLCBzaWduYXR1cmUucmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaWduYXR1cmUgPSB7IHBhcmFtczogcGFyYW1zLCByZXQ6IHJldCB9OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvY2FsczogcGFyYW1ldGVycywgLy8gUGFyYW1ldGVycyBhcmUgdGhlIGZpcnN0
IGxvY2Fscy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQ291bnQ6
IHBhcmFtZXRlcnMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
OiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IF9t
YXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCBzaWduYXR1cmUpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYWxzOiBwYXJhbXMsIC8vIFBhcmFtZXRlcnMgYXJlIHRoZSBmaXJzdCBs
b2NhbHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlckNvdW50OiBw
YXJhbXMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBbXQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcy5kYXRhLnB1c2goZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRl
ci5fcmVnaXN0ZXJGdW5jdGlvblRvSW5kZXhTcGFjZShmdW5jdGlvbk5hbWUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbkJ1aWxkZXIgPSB7fTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wIGluIFdBU00uZGVzY3JpcHRpb24ub3Bjb2Rl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBfdG9KYXZh
U2NyaXB0TmFtZShvcCk7CkBAIC0yMzQsMTAgKzM5Myw0MSBAQCBleHBvcnQgZGVmYXVsdCBjbGFz
cyBCdWlsZGVyIHsKICAgICBfYWRkU2VjdGlvbihuYW1lT3JOdW1iZXIsIGV4dHJhT2JqZWN0KSB7
CiAgICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YobmFtZU9yTnVtYmVyKSA9PT0gInN0cmluZyIg
PyBuYW1lT3JOdW1iZXIgOiAiIjsKICAgICAgICAgY29uc3QgbnVtYmVyID0gdHlwZW9mKG5hbWVP
ck51bWJlcikgPT09ICJudW1iZXIiID8gbmFtZU9yTnVtYmVyIDogKFdBU00uZGVzY3JpcHRpb24u
c2VjdGlvbltuYW1lXSA/IFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbltuYW1lXS52YWx1ZSA6IF91
bmtub3duU2VjdGlvbklkKTsKKyAgICAgICAgaWYgKHRoaXMuX2NoZWNrZWQpIHsKKyAgICAgICAg
ICAgIC8vIENoZWNrIHVuaXF1ZW5lc3MuCisgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhp
cy5fc2VjdGlvbnMpCisgICAgICAgICAgICAgICAgaWYgKHMubmFtZSA9PT0gbmFtZSAmJiBzLmlk
ID09PSBudW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90
IGhhdmUgdG8gc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lICIke25hbWV9IiBhbmQgSUQgJHtu
dW1iZXJ9YCk7CisgICAgICAgICAgICAvLyBDaGVjayBvcmRlcmluZy4KKyAgICAgICAgICAgIGlm
ICgobnVtYmVyICE9PSBfdW5rbm93blNlY3Rpb25JZCkgJiYgKHRoaXMuX3NlY3Rpb25zLmxlbmd0
aCAhPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2VjdGlvbnMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X3NlY3Rpb25zW2ldLmlkID09PSBfdW5rbm93blNlY3Rpb25JZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2VjdGlvbnNb
aV0uaWQgPiBudW1iZXIpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
YEJhZCBzZWN0aW9uIG9yZGVyaW5nOiAiJHt0aGlzLl9zZWN0aW9uc1tpXS5uYW1lfSIgY2Fubm90
IHByZWNlZGUgIiR7bmFtZX0iYCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBjb25zdCBzID0g
T2JqZWN0LmFzc2lnbih7IG5hbWU6IG5hbWUsIGlkOiBudW1iZXIsIGRhdGE6IFtdIH0sIGV4dHJh
T2JqZWN0IHx8IHt9KTsKICAgICAgICAgdGhpcy5fc2VjdGlvbnMucHVzaChzKTsKICAgICAgICAg
cmV0dXJuIHM7CiAgICAgfQorICAgIF9nZXRTZWN0aW9uKG5hbWVPck51bWJlcikgeworICAgICAg
ICBzd2l0Y2ggKHR5cGVvZihuYW1lT3JOdW1iZXIpKSB7CisgICAgICAgIGRlZmF1bHQ6IHRocm93
IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogY2FuJ3QgZ2V0IHNlY3Rpb24gIiR7
bmFtZU9yTnVtYmVyfSJgKTsKKyAgICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgICAgIGZv
ciAoY29uc3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKKyAgICAgICAgICAgICAgICBpZiAocy5uYW1l
ID09PSBuYW1lT3JOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgY2FzZSAibnVtYmVyIjoKKyAgICAgICAg
ICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKKyAgICAgICAgICAgICAgICBpZiAo
cy5pZCA9PT0gbmFtZU9yTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKKyAg
ICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9CiAgICAgb3B0aW1p
emUoKSB7CiAgICAgICAgIC8vIEZJWE1FIEFkZCBtb3JlIG9wdGltaXphdGlvbnMuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjQKICAgICAgICAgcmV0dXJuIHRo
aXM7CkBAIC0yNTQsNSArNDQ0LDUgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAg
ICAgICAgIC8vIEZJWE1FIENyZWF0ZSBhbiBhc20uanMgZXF1aXZhbGVudCBzdHJpbmcgd2hpY2gg
Y2FuIGJlIGV2YWwnZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzQyNQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImFzbS5qcyBub3QgaW1wbGVtZW50ZWQgeWV0
Iik7CiAgICAgfQotICAgIFdlYkFzc2VtYmx5KCkgeyByZXR1cm4gX0J1aWxkV2ViQXNzZW1ibHlC
aW5hcnkodGhpcy5fcHJlYW1ibGUsIHRoaXMuX3NlY3Rpb25zKTsgfQorICAgIFdlYkFzc2VtYmx5
KCkgeyByZXR1cm4gQnVpbGRXZWJBc3NlbWJseS5CaW5hcnkodGhpcy5fcHJlYW1ibGUsIHRoaXMu
X3NlY3Rpb25zKTsgfQogfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFz
c2VtYmx5QmluYXJ5LmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnku
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiMGE1MgotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCkBAIC0w
LDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworaW1wb3J0IExvd0xldmVsQmluYXJ5IGZyb20gJ0xvd0xldmVsQmluYXJ5LmpzJzsKK2ltcG9y
dCAqIGFzIFdBU00gZnJvbSAnV0FTTS5qcyc7CisKK2NvbnN0IHB1dCA9IChiaW4sIHR5cGUsIHZh
bHVlKSA9PiBiaW5bdHlwZV0odmFsdWUpOworCitjb25zdCBlbWl0dGVycyA9IHsKKyAgICBUeXBl
OiAoc2VjdGlvbiwgYmluKSA9PiB7CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50Iiwgc2VjdGlv
bi5kYXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc2VjdGlvbi5kYXRh
KSB7CisgICAgICAgICAgICBjb25zdCBmdW5jVHlwZUNvbnN0cnVjdG9yID0gLTB4MjA7IC8vIEZJ
WE1FIE1vdmUgdGhpcyB0byB3YXNtLmpzb24uCisgICAgICAgICAgICBwdXQoYmluLCAidmFyaW50
NyIsIGZ1bmNUeXBlQ29uc3RydWN0b3IpOworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQi
LCBlbnRyeS5wYXJhbXMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2Yg
ZW50cnkucGFyYW1zKQorICAgICAgICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00udmFs
dWVUeXBlVmFsdWVbcGFyYW1dKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS5yZXQgPT09ICJ2b2lk
IikKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDEiLCAwKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MSIsIDEpOworICAgICAg
ICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00udmFsdWVUeXBlVmFsdWVbZW50cnkucmV0
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorICAgIEltcG9ydDogKHNlY3Rp
b24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFydWludCIsIHNlY3Rpb24uZGF0YS5s
ZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHNlY3Rpb24uZGF0YSkgeworICAg
ICAgICAgICAgcHV0KGJpbiwgInN0cmluZyIsIGVudHJ5Lm1vZHVsZSk7CisgICAgICAgICAgICBw
dXQoYmluLCAic3RyaW5nIiwgZW50cnkuZmllbGQpOworICAgICAgICAgICAgcHV0KGJpbiwgInVp
bnQ4IiwgV0FTTS5leHRlcm5hbEtpbmRWYWx1ZVtlbnRyeS5raW5kXSk7CisgICAgICAgICAgICBz
d2l0Y2ggKGVudHJ5LmtpbmQpIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJv
cihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5leHBlY3RlZCBraW5kICR7ZW50cnkua2luZH1g
KTsKKyAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uIjogcHV0KGJpbiwgInZhcnVpbnQiLCBlbnRy
eS50eXBlKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJUYWJsZSI6IHRocm93IG5ldyBFcnJv
cihgTm90IHlldCBpbXBsZW1lbnRlZGApOworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogdGhy
b3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7CisgICAgICAgICAgICBjYXNlICJH
bG9iYWwiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0sCisgICAgRnVuY3Rpb246IChzZWN0aW9uLCBiaW4pID0+
IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgVGFibGU6
IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVk
YCk7IH0sCisgICAgTWVtb3J5OiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihg
Tm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIEdsb2JhbDogKHNlY3Rpb24sIGJpbikgPT4g
eyB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBFeHBvcnQ6
IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVk
YCk7IH0sCisgICAgU3RhcnQ6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBO
b3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgRWxlbWVudDogKHNlY3Rpb24sIGJpbikgPT4g
eyB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBDb2RlOiAo
c2VjdGlvbiwgYmluKSA9PiB7CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50Iiwgc2VjdGlvbi5k
YXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoY29uc3QgZnVuYyBvZiBzZWN0aW9uLmRhdGEpIHsK
KyAgICAgICAgICAgIGxldCBmdW5jQmluID0gYmluLm5ld1BhdGNoYWJsZSgidmFydWludCIpOwor
ICAgICAgICAgICAgY29uc3QgbG9jYWxDb3VudCA9IGZ1bmMubG9jYWxzLmxlbmd0aDsKKyAgICAg
ICAgICAgIHB1dChmdW5jQmluLCAidmFydWludCIsIGxvY2FsQ291bnQpOworICAgICAgICAgICAg
aWYgKGxvY2FsQ291bnQgIT09IDApIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogbG9j
YWxzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjI3MDYKKyAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgZnVuYy5jb2RlKSB7CisgICAgICAg
ICAgICAgICAgcHV0KGZ1bmNCaW4sICJ1aW50OCIsIG9wLnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBpZiAob3AuYXJndW1lbnRzLmxlbmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxl
bWVudGVkOiBhcmd1bWVudHNgKTsgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MjcwNgorICAgICAgICAgICAgICAgIGlmIChvcC5pbW1lZGlhdGVzLmxl
bmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBpbW1lZGlhdGVzYCk7
IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZ1bmNCaW4uYXBwbHkoKTsKKyAgICAgICAgfQor
ICAgIH0sCisgICAgRGF0YTogKHNlY3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYE5v
dCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKK307CisKK2V4cG9ydCBjb25zdCBCaW5hcnkgPSAocHJl
YW1ibGUsIHNlY3Rpb25zKSA9PiB7CisgICAgbGV0IHdhc21CaW4gPSBuZXcgTG93TGV2ZWxCaW5h
cnkoKTsKKyAgICBmb3IgKGNvbnN0IHAgb2YgV0FTTS5kZXNjcmlwdGlvbi5wcmVhbWJsZSkKKyAg
ICAgICAgcHV0KHdhc21CaW4sIHAudHlwZSwgcHJlYW1ibGVbcC5uYW1lXSk7CisgICAgZm9yIChj
b25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7CisgICAgICAgIHB1dCh3YXNtQmluLCBXQVNNLnNl
Y3Rpb25FbmNvZGluZ1R5cGUsIHNlY3Rpb24uaWQpOworICAgICAgICBsZXQgc2VjdGlvbkJpbiA9
IHdhc21CaW4ubmV3UGF0Y2hhYmxlKCJ2YXJ1aW50Iik7CisgICAgICAgIGNvbnN0IGVtaXR0ZXIg
PSBlbWl0dGVyc1tzZWN0aW9uLm5hbWVdOworICAgICAgICBpZiAoZW1pdHRlcikKKyAgICAgICAg
ICAgIGVtaXR0ZXIoc2VjdGlvbiwgc2VjdGlvbkJpbik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgLy8gVW5rbm93biBzZWN0aW9uLgorICAgICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJz
dHJpbmciLCBzZWN0aW9uLm5hbWUpOworICAgICAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIHNl
Y3Rpb24uZGF0YSkKKyAgICAgICAgICAgICAgICBwdXQoc2VjdGlvbkJpbiwgInVpbnQ4IiwgYnl0
ZSk7CisgICAgICAgIH0KKyAgICAgICAgc2VjdGlvbkJpbi5hcHBseSgpOworICAgIH0KKyAgICBy
ZXR1cm4gd2FzbUJpbjsKK307CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5h
cnkuanMgYi9KU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMKaW5kZXggMGE4MzNjMS4uNzIw
MDk3NiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0xvd0xldmVsQmluYXJ5LmpzCisrKyBiL0pT
VGVzdHMvd2FzbS9Mb3dMZXZlbEJpbmFyeS5qcwpAQCAtMjcsNiArMjcsOCBAQCBjb25zdCBfaW5p
dGlhbEFsbG9jYXRpb25TaXplID0gMTAyNDsKIGNvbnN0IF9ncm93QWxsb2NhdGlvblNpemUgPSBh
bGxvY2F0ZWQgPT4gYWxsb2NhdGVkICogMjsKIAogZXhwb3J0IGNvbnN0IHZhcnVpbnRNaW4gPSAw
OworZXhwb3J0IGNvbnN0IHZhcmludDdNaW4gPSAtMGIxMDAwMDAwOworZXhwb3J0IGNvbnN0IHZh
cmludDdNYXggPSAwYjExMTExMTsKIGV4cG9ydCBjb25zdCB2YXJ1aW50N01heCA9IDBiMTExMTEx
MTsKIGV4cG9ydCBjb25zdCB2YXJ1aW50TWF4ID0gKCgoKDEgPDwgMzEpID4+PiAwKSAtIDEpICog
MikgKyAxOwogZXhwb3J0IGNvbnN0IHZhcmludE1pbiA9IC0oKDEgPDwgMzEpID4+PiAwKTsKQEAg
LTEyOSw2ICsxMzEsMTYgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG93TGV2ZWxCaW5hcnkgewog
ICAgICAgICAgICAgdGhpcy51aW50OCgweDgwIHwgYik7CiAgICAgICAgIH0gd2hpbGUgKHRydWUp
OwogICAgIH0KKyAgICB2YXJ1aW50MSh2KSB7CisgICAgICAgIGlmICh2ICE9PSAwICYmIHYgIT09
IDEpCisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB2YXJ1aW50MSAk
e3Z9IHJhbmdlIGlzIFswLCAxXWApOworICAgICAgICB0aGlzLnZhcnVpbnQodik7CisgICAgfQor
ICAgIHZhcmludDcodikgeworICAgICAgICBpZiAodiA8IHZhcmludDdNaW4gfHwgdmFyaW50N01h
eCA8IHYpCisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB2YXJpbnQ3
ICR7dn0gcmFuZ2UgaXMgWyR7dmFyaW50N01pbn0sICR7dmFyaW50N01heH1dYCk7CisgICAgICAg
IHRoaXMudmFyaW50KHYpOworICAgIH0KICAgICB2YXJ1aW50Nyh2KSB7CiAgICAgICAgIGlmICh2
IDwgdmFydWludE1pbiB8fCB2YXJ1aW50N01heCA8IHYpCiAgICAgICAgICAgICB0aHJvdyBuZXcg
UmFuZ2VFcnJvcihgSW52YWxpZCB2YXJ1aW50NyAke3Z9IHJhbmdlIGlzIFske3ZhcnVpbnRNaW59
LCAke3ZhcnVpbnQ3TWF4fV1gKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9XQVNNLmpzIGIv
SlNUZXN0cy93YXNtL1dBU00uanMKaW5kZXggOGU3YjdlZi4uZDhlYWVmNiAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL1dBU00uanMKKysrIGIvSlNUZXN0cy93YXNtL1dBU00uanMKQEAgLTI1LDkg
KzI1LDE4IEBACiAKIGltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICd1dGlsaXRpZXMuanMnOwog
Citjb25zdCBfbWFwVmFsdWVzID0gZnJvbSA9PiB7CisgICAgbGV0IHZhbHVlcyA9IHt9OworICAg
IGZvciAoY29uc3Qga2V5IGluIGZyb20pCisgICAgICAgIHZhbHVlc1trZXldID0gZnJvbVtrZXld
LnZhbHVlOworICAgIHJldHVybiB2YWx1ZXM7Cit9OworCiBleHBvcnQgY29uc3QgZGVzY3JpcHRp
b24gPSB1dGlsaXRpZXMuanNvbigid2FzbS5qc29uIik7CiBleHBvcnQgY29uc3QgdmFsdWVUeXBl
ID0gT2JqZWN0LmtleXMoZGVzY3JpcHRpb24udmFsdWVfdHlwZSk7CiBjb25zdCBfdmFsdWVUeXBl
U2V0ID0gbmV3IFNldCh2YWx1ZVR5cGUpOwogZXhwb3J0IGNvbnN0IGlzVmFsaWRWYWx1ZVR5cGUg
PSB2ID0+IF92YWx1ZVR5cGVTZXQuaGFzKHYpOworZXhwb3J0IGNvbnN0IHZhbHVlVHlwZVZhbHVl
ID0gX21hcFZhbHVlcyhkZXNjcmlwdGlvbi52YWx1ZV90eXBlKTsKK2V4cG9ydCBjb25zdCBleHRl
cm5hbEtpbmRWYWx1ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24uZXh0ZXJuYWxfa2luZCk7CiBl
eHBvcnQgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyhkZXNjcmlwdGlvbi5zZWN0aW9uKTsK
IGV4cG9ydCBjb25zdCBzZWN0aW9uRW5jb2RpbmdUeXBlID0gZGVzY3JpcHRpb24uc2VjdGlvbltz
ZWN0aW9uc1swXV0udHlwZTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMgYi9K
U1Rlc3RzL3dhc20vYXNzZXJ0LmpzCmluZGV4IDJlYTVmNzAuLjA3YThhNzEgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKKysrIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwpAQCAt
MzQsNiArMzQsMTEgQEAgY29uc3QgX2lzVW5kZWYgPSAodikgPT4gewogfTsKIAogY29uc3QgX2Vx
ID0gKGxocywgcmhzKSA9PiB7CisgICAgaWYgKEFycmF5LmlzQXJyYXkobGhzKSAmJiBBcnJheS5p
c0FycmF5KHJocykgJiYgKGxocy5sZW5ndGggPT09IHJocy5sZW5ndGgpKSB7CisgICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpICE9PSBsaHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBfZXEobGhz
W2ldLCByaHNbaV0pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChsaHMgIT09IHJo
cykKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgdGhlIHNhbWU6ICIke2xoc30iIGFuZCAi
JHtyaHN9ImApOwogfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9Nb2R1
bGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzCmluZGV4IDgyMWRhODQu
LjM0OGM4MTYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9Nb2R1bGUuanMK
KysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qcwpAQCAtNywzICs3LDEzIEBA
IGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKICAgICBhc3NlcnQuaW5zdGFuY2VvZihtb2R1
bGUsIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiB9KSgpOworCisoZnVuY3Rpb24gTW9kdWxlV2l0aElt
cG9ydHMoKSB7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iLCAiYmFyIiwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBi
aW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgLy8gRklYTUU6IGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKK30pKCk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rlc3RzL3dhc20v
c2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKaW5kZXggMDkzNDIzMS4uNWJhYjk4YiAxMDA2
NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCisrKyBi
L0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwpAQCAtMiw3ICsyLDcg
QEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgQnVpbGRl
ciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIAogY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwg
bWVzc2FnZSkgPT4gewotICAgIGxldCBmID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlv
bigpOworICAgIGxldCBmID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVu
Y3Rpb24oKTsKICAgICBhc3NlcnQudGhyb3dzKG9wRm4sIEVycm9yLCBtZXNzYWdlLCBmKTsKIH07
CiAKQEAgLTg2LDYgKzg2LDE2OCBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNz
YWdlKSA9PiB7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLCAweDExKTsKIH0p
KCk7CiAKKyhmdW5jdGlvbiBTZWN0aW9uc1dpdGhTYW1lQ3VzdG9tTmFtZSgpIHsKKyAgICBjb25z
dCBiID0gKG5ldyBCdWlsZGVyKCkpLlVua25vd24oImZvbyIpLkVuZCgpOworICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gYi5Vbmtub3duKCJmb28iKSwgRXJyb3IsIGBDYW5ub3QgaGF2ZSB0byBzZWN0
aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgImZvbyIgYW5kIElEIDBgKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBFbXB0eVR5cGVTZWN0aW9uKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSku
VHlwZSgpLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5uYW1lLCAiVHlwZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgs
IDApOworfSkoKTsKKworKGZ1bmN0aW9uIFR3b1R5cGVTZWN0aW9ucygpIHsKKyAgICBjb25zdCBi
ID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+
IGIuVHlwZSgpLCBFcnJvciwgYENhbm5vdCBoYXZlIHRvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUg
bmFtZSAiVHlwZSIgYW5kIElEIDFgKTsKK30pKCk7CisKKyhmdW5jdGlvbiBTaW1wbGVUeXBlU2Vj
dGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKQorICAgICAgICAg
ICAgLkZ1bmMoW10pCisgICAgICAgICAgICAuRnVuYyhbXSwgInZvaWQiKQorICAgICAgICAgICAg
LkZ1bmMoW10sICJpMzIiKQorICAgICAgICAgICAgLkZ1bmMoW10sICJpNjQiKQorICAgICAgICAg
ICAgLkZ1bmMoW10sICJmMzIiKQorICAgICAgICAgICAgLkZ1bmMoW10sICJmNjQiKQorICAgICAg
ICAgICAgLkZ1bmMoWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiXSkKKyAgICAgICAgLkVuZCgp
OworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCA3KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnJl
dCwgInZvaWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ucGFyYW1zLCBb
XSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLnJldCwgInZvaWQiKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMl0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzJdLnJldCwgImkzMiIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVszXS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGFbM10ucmV0LCAiaTY0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzRd
LnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs0XS5yZXQsICJm
MzIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNV0ucGFyYW1zLCBbXSk7Cisg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzVdLnJldCwgImY2NCIpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVs2XS5wYXJhbXMsIFsiaTMyIiwgImk2NCIsICJmMzIiLCAi
ZjY0Il0pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs2XS5yZXQsICJ2b2lkIik7
Cit9KSgpOworCisoZnVuY3Rpb24gRW1wdHlJbXBvcnRTZWN0aW9uKCkgeworICAgIGNvbnN0IGIg
PSAobmV3IEJ1aWxkZXIoKSkuSW1wb3J0KCkuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFy
c2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVuZ3RoLCAxKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJJbXBvcnQiKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAwKTsKK30pKCk7CisKKyhmdW5jdGlvbiBJbXBvcnRCZWZv
cmVUeXBlU2VjdGlvbnMoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5JbXBvcnQo
KS5FbmQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGIuVHlwZSgpLCBFcnJvciwgYEJhZCBz
ZWN0aW9uIG9yZGVyaW5nOiAiSW1wb3J0IiBjYW5ub3QgcHJlY2VkZSAiVHlwZSJgKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbldpdGhvdXRUeXBlU2VjdGlvbigpIHsKKyAgICBj
b25zdCBpID0gKG5ldyBCdWlsZGVyKCkpLkltcG9ydCgpOworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gaS5GdW5jdGlvbigiZm9vIiwgImJhciIsIDApLCBFcnJvciwgYENhbid0IHVzZSB0eXBlIDAg
aWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3QgcHJlc2VudGApOworfSkoKTsKKworKGZ1bmN0aW9uIElt
cG9ydEZ1bmN0aW9uV2l0aEludmFsaWRUeXBlKCkgeworICAgIGNvbnN0IGkgPSAobmV3IEJ1aWxk
ZXIoKSkuVHlwZSgpLkVuZCgpLkltcG9ydCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaS5G
dW5jdGlvbigiZm9vIiwgImJhciIsIDApLCBFcnJvciwgYFR5cGUgMCBkb2Vzbid0IGV4aXN0IGlu
IHR5cGUgc2VjdGlvbmApOworfSkoKTsKKworKGZ1bmN0aW9uIEltcG9ydEZ1bmN0aW9uKCkgewor
ICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5GdW5jKFtdKS5F
bmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJh
ciIsIDApCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24o
KSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMSk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLm1vZHVsZSwgImZvbyIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVswXS5maWVsZCwgImJhciIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0ua2luZCwgIkZ1bmN0aW9uIik7Cit9KSgpOworCisoZnVuY3Rpb24gSW1wb3J0RnVuY3Rp
b25zV2l0aEV4aXN0aW5nVHlwZXMoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKQor
ICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAuRnVuYyhbXSkKKyAgICAgICAgICAgIC5GdW5j
KFtdLCAiaTMyIikKKyAgICAgICAgICAgIC5GdW5jKFsiaTY0IiwgImkzMiJdKQorICAgICAgICAg
ICAgLkZ1bmMoWyJpNjQiLCAiaTY0Il0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuSW1wb3J0
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJhciIsIHsgcGFyYW1zOiBbXSB9KQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYmF6IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJp
MzIiIH0pCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJib28iLCB7IHBhcmFtczogWyJp
NjQiLCAiaTY0Il0gfSkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNl
KGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCA0KTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzFdLnR5cGUsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsy
XS50eXBlLCAzKTsKK30pKCk7CisKKyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbldpdGhOZXdUeXBl
KCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJhciIs
IHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYmF6IiwgeyBw
YXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJi
b28iLCB7IHBhcmFtczogWyJpNjQiLCAiaTY0Il0gfSkKKyAgICAgICAgLkVuZCgpOworICAgIGNv
bnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGEubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucmV0
LCAidm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbXMsIFtd
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ucmV0LCAiaTMyIik7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVsyXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzJdLnBhcmFtcywgWyJpNjQiLCAiaTY0Il0pOworfSkoKTsKKworKGZ1bmN0
aW9uIEVtcHR5RXhwb3J0U2VjdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkp
LkV4cG9ydCgpLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5uYW1lLCAiRXhwb3J0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxl
bmd0aCwgMCk7Cit9KSgpOworCisoZnVuY3Rpb24gRXhwb3J0RnVuY3Rpb25XaXRob3V0VHlwZVNl
Y3Rpb24oKSB7CisgICAgY29uc3QgZSA9IChuZXcgQnVpbGRlcigpKS5FeHBvcnQoKTsKKyAgICBh
c3NlcnQudGhyb3dzKCgpID0+IGUuRnVuY3Rpb24oImZvbyIsIDAsIDApLCBFcnJvciwgYENhbid0
IHVzZSB0eXBlIDAgaWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3QgcHJlc2VudGApOworfSkoKTsKKwor
KGZ1bmN0aW9uIEV4cG9ydEZ1bmN0aW9uV2l0aEludmFsaWRUeXBlKCkgeworICAgIGNvbnN0IGUg
PSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkV4cG9ydCgpOworICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gZS5GdW5jdGlvbigiZm9vIiwgMCwgMCksIEVycm9yLCBgVHlwZSAwIGRvZXNuJ3Qg
ZXhpc3QgaW4gdHlwZSBzZWN0aW9uYCk7Cit9KSgpOworCisoZnVuY3Rpb24gRXhwb3J0QW5JbXBv
cnQoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiZm9vIiwgImJhciIsIHsgcGFyYW1zOiBb
XSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oIkV4cG9ydEFuSW1wb3J0Iiwg
eyBtb2R1bGU6ICJmb28iLCBmaWVsZDogImJhciIgfSkuRW5kKCk7CisgICAgY29uc3QgaiA9IEpT
T04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0ubmFtZSwgIkV4
cG9ydCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YS5sZW5ndGgsIDEpOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS5maWVsZCwgIkV4cG9ydEFuSW1wb3J0Iik7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsyXS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS5pbmRleCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsyXS5kYXRhWzBdLmtpbmQsICJGdW5jdGlvbiIpOworfSkoKTsKKworKGZ1bmN0aW9uIEV4
cG9ydE1pc21hdGNoZWRJbXBvcnQoKSB7CisgICAgY29uc3QgZSA9IChuZXcgQnVpbGRlcigpKQor
ICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiZm9vIiwg
ImJhciIsIHsgcGFyYW1zOiBbXSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCk7CisgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBlLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogWyJpMzIiXSB9LCAw
KSwgRXJyb3IsIGBSZS1leHBvcnRpbmcgaW1wb3J0ICJiYXIiIGFzICJmb28iIGhhcyBtaXNtYXRj
aGluZyB0eXBlYCk7Cit9KSgpOworCiAoZnVuY3Rpb24gRW1wdHlDb2RlU2VjdGlvbigpIHsKICAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKICAgICBiLkNvZGUoKTsKQEAgLTk3LDk5ICsyNTks
MTU0IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIAogKGZ1
bmN0aW9uIENvZGVTZWN0aW9uV2l0aEVtcHR5RnVuY3Rpb24oKSB7CiAgICAgY29uc3QgYiA9IG5l
dyBCdWlsZGVyKCk7Ci0gICAgYi5Db2RlKCkKLSAgICAgICAgLkZ1bmN0aW9uKCk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCk7CiAg
ICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rp
b24ubGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJDb2RlIik7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0ubmFtZSwgIlR5cGUiKTsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEu
bGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1ldGVy
Q291bnQsIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHMubGVu
Z3RoLCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgs
IDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbXMsIFtdKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucmV0LCAidm9pZCIpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0ubmFtZSwgIkNvZGUiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGEubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
bmFtZSwgdW5kZWZpbmVkKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlw
ZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnBhcmFtZXRlckNvdW50
LCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwg
MCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAwKTsK
IH0pKCk7CiAKIChmdW5jdGlvbiBDb2RlU2VjdGlvbldpdGhFbXB0eUZ1bmN0aW9uV2l0aFBhcmFt
ZXRlcnMoKSB7CiAgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Ci0gICAgYi5Db2RlKCkKLSAg
ICAgICAgLkZ1bmN0aW9uKFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0Il0pOworICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7IHBhcmFt
czogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiXSB9KTsKICAgICBjb25zdCBqID0gSlNPTi5w
YXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDEpOwotICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkNvZGUiKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uLmxlbmd0aCwgMik7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0
aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtZXRlckNvdW50
LCA0KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzBdLCAiaTMy
Iik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fsc1sxXSwgImk2NCIp
OwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHNbMl0sICJmMzIiKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzNdLCAiZjY0Iik7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAwKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1zLCBbImkzMiIsICJpNjQiLCAiZjMy
IiwgImY2NCJdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucmV0LCAidm9p
ZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0ucGFyYW1ldGVyQ291bnQsIDQpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5sb2NhbHNbMF0sICJpMzIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMF0ubG9jYWxzWzFdLCAiaTY0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLmxvY2Fsc1syXSwgImYzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVswXS5sb2NhbHNbM10sICJmNjQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFd
LmRhdGFbMF0uY29kZS5sZW5ndGgsIDApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEludmFsaWRGdW5j
dGlvblBhcmFtZXRlcnMoKSB7Ci0gICAgZm9yIChsZXQgaW52YWxpZCBpbiBbIiIsICJ2b2lkIiwg
ImJvb2wiLCAiYW55IiwgInN0cnVjdCJdKSB7CisgICAgZm9yIChsZXQgaW52YWxpZCBvZiBbIiIs
ICJ2b2lkIiwgImJvb2wiLCAiYW55IiwgInN0cnVjdCIsIDAsIDMuMTQsIHVuZGVmaW5lZCwgW10s
IHt9XSkgewogICAgICAgICBjb25zdCBjID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKTsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIGMuRnVuY3Rpb24oW2ludmFsaWRdKTsKLSAgICAgICAgfSBj
YXRjaCAoZSkgewotICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgeyBjb250aW51
ZTsgfQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhbiBFcnJvciwgZ290
ICR7ZX1gKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHRv
IHRocm93IGFuIEVycm9yIGZvciAke2ludmFsaWR9YCk7CisgICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gYy5GdW5jdGlvbih7IHBhcmFtczogW2ludmFsaWRdIH0pLCBFcnJvciwgYFR5cGUgcGFy
YW1ldGVyICR7aW52YWxpZH0gaXNuJ3QgYSB2YWxpZCB2YWx1ZSB0eXBlYCk7CiAgICAgfQogfSko
KTsKIAogKGZ1bmN0aW9uIFNpbXBsZUZ1bmN0aW9uKCkgewogICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpOwotICAgIGIuQ29kZSgpCi0gICAgICAgIC5GdW5jdGlvbigpCi0gICAgICAgICAgICAu
Tm9wKCkKLSAgICAgICAgICAgIC5Ob3AoKQotICAgICAgICAuRW5kKCk7CisgICAgYi5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkKKyAgICAgICAg
ICAgICAgICAuTm9wKCkKKyAgICAgICAgICAgICAgICAuTm9wKCkKKyAgICAgICAgICAgIC5FbmQo
KTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhWzBdLmxvY2Fscy5sZW5ndGgsIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YVswXS5jb2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBd
LmNvZGVbMF0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsw
XS5jb2RlWzFdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVsyXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRh
Lmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmxvY2Fscy5s
ZW5ndGgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0
aCwgMyk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwg
Im5vcCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLm5hbWUs
ICJub3AiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5uYW1l
LCAiZW5kIik7CiB9KSgpOwogCiAoZnVuY3Rpb24gVHdvU2ltcGxlRnVuY3Rpb25zKCkgewogICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwotICAgIGIuQ29kZSgpCi0gICAgICAgIC5GdW5jdGlv
bigpCi0gICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgICAgIC5Ob3AoKQorICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpCisgICAgICAg
ICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLlJldHVybigpCisg
ICAgICAgICAgICAuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVsxXS5sb2NhbHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMV0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVsxXS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMV0uY29kZVsxXS5uYW1lLCAiZW5kIik7Cit9KSgpOworCisoZnVuY3Rp
b24gTmFtZWRGdW5jdGlvbnMoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCkuVHlwZSgp
LkVuZCgpLkNvZGUoKQorICAgICAgICAuRnVuY3Rpb24oImhlbGxvIikuRW5kKCkKKyAgICAgICAg
LkZ1bmN0aW9uKCJ3b3JsZCIsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkVuZCgpCisgICAgLkVuZCgp
OworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0ubmFtZSwgImhlbGxvIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLnBhcmFtZXRlckNvdW50LCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMV0ubmFtZSwgIndvcmxkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzFdLnBhcmFtZXRlckNvdW50LCAxKTsKK30pKCk7CisKKyhmdW5jdGlvbiBFeHBvcnRTaW1w
bGVGdW5jdGlvbnMoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iLCB7IHBhcmFtczogW10gfSwgMCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIikKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiYmV0dGVyTmFtZUZvckJhciIsICJiYXIiKQogICAgICAgICAu
RW5kKCkKLSAgICAgICAgLkZ1bmN0aW9uKCkKLSAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oeyBwYXJhbXM6IFtdIH0pLk5vcCgpLkVu
ZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImJhciIsIHsgcGFyYW1zOiBbXSB9KS5Ob3AoKS5F
bmQoKQogICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkp
OwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDIpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOwotICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVsxXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMV0uY29kZS5sZW5ndGgsIDIpOwotICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVsxXS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKLSAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMV0uY29kZVsxXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLnJldCwgInZvaWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwg
Myk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmZpZWxkLCAiZm9vIik7Cisg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVswXS5pbmRleCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLmtpbmQsICJGdW5jdGlvbiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVsxXS5maWVsZCwgImJhciIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVsxXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0uaW5kZXgs
IDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsxXS5raW5kLCAiRnVuY3Rpb24i
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0uZmllbGQsICJiZXR0ZXJOYW1l
Rm9yQmFyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLnR5cGUsIDApOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsyXS5pbmRleCwgMSk7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLmtpbmQsICJGdW5jdGlvbiIpOworfSkoKTsKKworKGZ1
bmN0aW9uIEV4cG9ydFVuZGVmaW5lZEZ1bmN0aW9uKCkgeworICAgIGNvbnN0IGMgPSAobmV3IEJ1
aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkV4cG9ydCgpLkZ1bmN0aW9uKCJmb28iKS5FbmQoKS5Db2Rl
KCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBjLkVuZCgpLCBFcnJvciwgYEV4cG9ydCBzZWN0
aW9uIGNvbnRhaW5zIHVuZGVmaW5lZCBmdW5jdGlvbiAiZm9vImApOwogfSkoKTsKIAogKGZ1bmN0
aW9uIFR3b0J1aWxkZXJzQXRUaGVTYW1lVGltZSgpIHsKICAgICBjb25zdCBiID0gW25ldyBCdWls
ZGVyKCksIG5ldyBCdWlsZGVyKCldOwotICAgIGNvbnN0IGYgPSBiLm1hcChidWlsZGVyID0+IGJ1
aWxkZXIuQ29kZSgpLkZ1bmN0aW9uKCkpOworICAgIGNvbnN0IGYgPSBiLm1hcChidWlsZGVyID0+
IGJ1aWxkZXIuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpKTsKICAgICBmWzBdLk5vcCgp
OwogICAgIGZbMV0uUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAgZlswXS5Ob3AoKS5FbmQoKS5F
bmQoKTsKICAgICBjb25zdCBqID0gYi5tYXAoYnVpbGRlciA9PiBKU09OLnBhcnNlKGJ1aWxkZXIu
anNvbigpKSk7Ci0gICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVu
Z3RoLCAzKTsKLSAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5u
YW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGVb
MV0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMF0uZGF0YVswXS5j
b2RlWzJdLm5hbWUsICJlbmQiKTsKLSAgICBhc3NlcnQuZXEoalsxXS5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZS5sZW5ndGgsIDIpOwotICAgIGFzc2VydC5lcShqWzFdLnNlY3Rpb25bMF0uZGF0YVsw
XS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKLSAgICBhc3NlcnQuZXEoalsxXS5zZWN0aW9uWzBd
LmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlv
blsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9u
WzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGpbMF0uc2Vj
dGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIpOworICAgIGFzc2VydC5lcShqWzBd
LnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKKyAgICBhc3NlcnQuZXEo
alsxXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShq
WzFdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKKyAgICBhc3Nl
cnQuZXEoalsxXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiZW5kIik7CiB9KSgp
OwogCiAoZnVuY3Rpb24gQ2hlY2tlZE9wY29kZUFyZ3VtZW50c1Rvb01hbnkoKSB7CkBAIC0xOTcs
NyArNDE0LDcgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewog
fSkoKTsKIAogKGZ1bmN0aW9uIFVuY2hlY2tlZE9wY29kZUFyZ3VtZW50c1Rvb01hbnkoKSB7Ci0g
ICAgKG5ldyBCdWlsZGVyKCkpLnNldENoZWNrZWQoZmFsc2UpLkNvZGUoKS5GdW5jdGlvbigpLk5v
cCgiVGhpcyBpcyBmaW5lLiIsICJJJ20gT0sgd2l0aCB0aGUgZXZlbnRzIHRoYXQgYXJlIHVuZm9s
ZGluZyBjdXJyZW50bHkuIik7CisgICAgKG5ldyBCdWlsZGVyKCkpLnNldENoZWNrZWQoZmFsc2Up
LlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5Ob3AoIlRoaXMgaXMgZmluZS4iLCAiSSdt
IE9LIHdpdGggdGhlIGV2ZW50cyB0aGF0IGFyZSB1bmZvbGRpbmcgY3VycmVudGx5LiIpOwogfSko
KTsKIAogKGZ1bmN0aW9uIENoZWNrZWRPcGNvZGVBcmd1bWVudHNOb3RFbm91Z2goKSB7CkBAIC0y
MDUsMTggKzQyMiwxOCBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9
PiB7CiB9KSgpOwogCiAoZnVuY3Rpb24gVW5jaGVja2VkT3Bjb2RlQXJndW1lbnRzTm90RW5vdWdo
KCkgewotICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNlKS5Db2RlKCkuRnVuY3Rp
b24oKS5JMzJDb25zdCgpOworICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNlKS5U
eXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuSTMyQ29uc3QoKTsKIH0pKCk7CiAKIChmdW5j
dGlvbiBDYWxsTm9Bcmd1bWVudHMoKSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5D
b2RlKCkuRnVuY3Rpb24oKS5DYWxsKDApLkVuZCgpLkVuZCgpOworICAgIGNvbnN0IGIgPSAobmV3
IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuRW5kKCku
RW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMik7Ci0gICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImNhbGwiKTsKLSAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwg
MSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRl
c1swXSwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0ubmFt
ZSwgImVuZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0
aCwgMik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwg
ImNhbGwiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5hcmd1
bWVudHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlc1swXSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9uIENh
bGxJbnZhbGlkKCkgewpAQCAtMjI2LDEyICs0NDMsMTIgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3Mg
PSAob3BGbiwgbWVzc2FnZSkgPT4gewogCiAoZnVuY3Rpb24gSTMyQ29uc3RWYWxpZCgpIHsKICAg
ICBmb3IgKGxldCBjIG9mIFswLCAxLCAyLCA0MiwgMTMzNywgMHhGRiwgMHhGRkZGLCAweDdGRkZG
RkZGLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGXSkgewotICAgICAgICBjb25zdCBiID0gKG5ldyBC
dWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLkkzMkNvbnN0KGMpLlJldHVybigpLkVuZCgpLkVu
ZCgpOworICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2Rl
KCkuRnVuY3Rpb24oKS5JMzJDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKICAgICAgICAg
Y29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiaTMyLmNvbnN0Iik7Ci0gICAgICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOwot
ICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVz
Lmxlbmd0aCwgMSk7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2Rl
WzBdLmltbWVkaWF0ZXNbMF0sIGMpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0uY29kZVswXS5uYW1lLCAiaTMyLmNvbnN0Iik7CisgICAgICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOworICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwg
MSk7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVk
aWF0ZXNbMF0sIGMpOwogICAgIH0KIH0pKCk7CiAKQEAgLTI0NCwxMiArNDYxLDEyIEBAIGNvbnN0
IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIAogKGZ1bmN0aW9uIEYzMkNv
bnN0VmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbMCwgLTAuLCAwLjIsIE1hdGguUEksIDB4
MTAwMDAwMDAwXSkgewotICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5G
dW5jdGlvbigpLkYzMkNvbnN0KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOworICAgICAgICBjb25z
dCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5GMzJD
b25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKICAgICAgICAgY29uc3QgaiA9IEpTT04ucGFy
c2UoYi5qc29uKCkpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29k
ZVswXS5uYW1lLCAiZjMyLmNvbnN0Iik7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOwotICAgICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0gICAg
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0s
IGMpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1l
LCAiZjMyLmNvbnN0Iik7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5j
b2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOwogICAg
IH0KIH0pKCk7CiAKQEAgLTI2MCwxMiArNDc3LDEyIEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0g
KG9wRm4sIG1lc3NhZ2UpID0+IHsKIAogKGZ1bmN0aW9uIEY2NENvbnN0VmFsaWQoKSB7CiAgICAg
Zm9yIChsZXQgYyBvZiBbMCwgLTAuLCAwLjIsIE1hdGguUEksIDB4MTAwMDAwMDAwXSkgewotICAg
ICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLkY2NENvbnN0
KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOworICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVy
KCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5GNjRDb25zdChjKS5SZXR1cm4oKS5F
bmQoKS5FbmQoKTsKICAgICAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAg
ICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiZjY0LmNv
bnN0Iik7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmFy
Z3VtZW50cy5sZW5ndGgsIDApOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0gICAgICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOworICAgICAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiZjY0LmNvbnN0Iik7Cisg
ICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5s
ZW5ndGgsIDApOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsw
XS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOwogICAgIH0KIH0pKCk7CiAKQEAgLTI3
NSwyMSArNDkyLDIxIEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+
IHsKIH0pKCk7CiAKIChmdW5jdGlvbiBDYWxsT25lRnJvbVN0YWNrKCkgewotICAgIGNvbnN0IGIg
PSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpCi0gICAgICAgIC5GdW5jdGlvbihbImkzMiJdKQorICAg
IGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKQorICAgICAgICAu
RnVuY3Rpb24oeyBwYXJhbXM6IFsiaTMyIl0gfSkKICAgICAgICAgICAgIC5JMzJDb25zdCg0MikK
ICAgICAgICAgICAgIC5DYWxsKDApCiAgICAgICAgIC5FbmQoKQogICAgIC5FbmQoKTsKICAgICBj
b25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVswXS5uYW1lLCAiaTMyLmNvbnN0Iik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlc1swXSwgNDIpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJjYWxsIik7Ci0gICAgLy8gRklYTUU6
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLmFyZ3VtZW50cy5sZW5ndGgs
IDEpOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3Ci0gICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0uaW1tZWRpYXRlcy5sZW5ndGgs
IDEpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLmltbWVkaWF0
ZXNbMF0sIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzJdLm5h
bWUsICJlbmQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5n
dGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUs
ICJpMzIuY29uc3QiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsw
XS5pbW1lZGlhdGVzWzBdLCA0Mik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbMV0ubmFtZSwgImNhbGwiKTsKKyAgICAvLyBGSVhNRTogYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLmNvZGVbMV0uYXJndW1lbnRzLmxlbmd0aCwgMSk7IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMF0uY29kZVsxXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0uaW1tZWRpYXRlc1swXSwgMCk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOwogfSkoKTsK
IAogLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2
NyBhbGwgb2YgdGhlc2U6CkBAIC0zMDEsMjIgKzUxOCwyMiBAQCBjb25zdCBhc3NlcnRPcFRocm93
cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAvLyAgdGVzdCBmdW5jdGlvbiBuYW1lcyAoYm90aCBz
ZXR0aW5nIGFuZCBjYWxsaW5nIHRoZW0pLgogCiAoZnVuY3Rpb24gQ2FsbE1hbnlGcm9tU3RhY2so
KSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkKLSAgICAgICAgICAuRnVu
Y3Rpb24oWyJpMzIiLCAiaTMyIiwgImkzMiIsICJpMzIiXSkKKyAgICBjb25zdCBiID0gKG5ldyBC
dWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKHsgcGFyYW1z
OiBbImkzMiIsICJpMzIiLCAiaTMyIiwgImkzMiJdIH0pCiAgICAgICAgICAgICAgIC5JMzJDb25z
dCg0MikuSTMyQ29uc3QoMTMzNykuSTMyQ29uc3QoMHhCRUVGKS5JMzJDb25zdCgweEZGRkYpCiAg
ICAgICAgICAgICAgIC5DYWxsKDApCiAgICAgICAgIC5FbmQoKQogICAgIC5FbmQoKTsKICAgICBj
b25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLmNvZGUubGVuZ3RoLCA2KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVs0XS5uYW1lLCAiY2FsbCIpOwotICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZVs0XS5hcmd1bWVudHMubGVuZ3RoLCA0KTsgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NwotICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlWzRdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVs0XS5pbW1lZGlhdGVzWzBdLCAwKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDYpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzRdLm5hbWUsICJjYWxsIik7CisgICAg
Ly8gRklYTUU6IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzRdLmFyZ3VtZW50
cy5sZW5ndGgsIDQpOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
MjY3CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbNF0uaW1tZWRpYXRl
cy5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzRd
LmltbWVkaWF0ZXNbMF0sIDApOwogfSkoKTsKIAogKGZ1bmN0aW9uIE9wY29kZUFkZCgpIHsKLSAg
ICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKQorICAgIGNvbnN0IGIgPSAobmV3IEJ1
aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKQogICAgICAgICAgIC5GdW5jdGlvbigpCiAgICAg
ICAgICAgICAgIC5JMzJDb25zdCg0MikuSTMyQ29uc3QoMTMzNykKICAgICAgICAgICAgICAgLkkz
MkFkZCgpCkBAIC0zMjQsMzkgKzU0MSwzOSBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZu
LCBtZXNzYWdlKSA9PiB7CiAgICAgICAgIC5FbmQoKQogICAgIC5FbmQoKTsKICAgICBjb25zdCBq
ID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLmNvZGUubGVuZ3RoLCA1KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0u
Y29kZVsyXS5uYW1lLCAiaTMyLmFkZCIpOwotICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5zZWN0
aW9uWzBdLmRhdGFbMF0uY29kZVsyXS5hcmd1bWVudHMubGVuZ3RoLCAyKTsgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NwotICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMF0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJyZXR1cm4iKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDUpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJpMzIuYWRkIik7CisgICAgLy8gRklYTUU6IGFz
c2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLmFyZ3VtZW50cy5sZW5ndGgsIDIp
OyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbM10ubmFtZSwgInJldHVybiIpOwogICAg
IC8vIEZJWE1FIGNoZWNrIHJldHVybi4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MzI2NwogfSkoKTsKIAogKGZ1bmN0aW9uIE9wY29kZVVucmVhY2hhYmxlKCkgewot
ICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFi
bGUoKS5FbmQoKS5FbmQoKTsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5F
bmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpOwogICAgIGNv
bnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGFbMF0uY29kZS5sZW5ndGgsIDIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YVswXS5jb2RlWzBdLm5hbWUsICJ1bnJlYWNoYWJsZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgInVucmVhY2hhYmxlIik7CiB9KSgpOwogCiAoZnVuY3Rp
b24gT3Bjb2RlVW5yZWFjaGFibGVDb21iaW5hdGlvbnMoKSB7Ci0gICAgKG5ldyBCdWlsZGVyKCkp
LkNvZGUoKS5GdW5jdGlvbigpLk5vcCgpLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7Ci0gICAg
KG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuTm9wKCkuRW5k
KCkuRW5kKCk7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlJldHVybigp
LlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5G
dW5jdGlvbigpLlVucmVhY2hhYmxlKCkuUmV0dXJuKCkuRW5kKCkuRW5kKCk7Ci0gICAgKG5ldyBC
dWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuVW5yZWFjaGFibGUoKS5FbmQoKS5F
bmQoKTsKLSAgICAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUo
KS5DYWxsKDApLkVuZCgpLkVuZCgpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCku
Q29kZSgpLkZ1bmN0aW9uKCkuTm9wKCkuVW5yZWFjaGFibGUoKS5FbmQoKS5FbmQoKS5qc29uKCk7
CisgICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJl
YWNoYWJsZSgpLk5vcCgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3IEJ1aWxkZXIoKSku
VHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLlJldHVybigpLlVucmVhY2hhYmxlKCkuRW5k
KCkuRW5kKCkuanNvbigpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgp
LkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5SZXR1cm4oKS5FbmQoKS5FbmQoKS5qc29uKCk7Cisg
ICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5DYWxsKDAp
LlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCkuanNvbigpOworICAgIChuZXcgQnVpbGRlcigpKS5U
eXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5DYWxsKDApLkVuZCgp
LkVuZCgpLmpzb24oKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNvZGVTZWxlY3QoKSB7Ci0gICAg
Y29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKQorICAgIGNvbnN0IGIg
PSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpCiAgICAgICAg
IC5JMzJDb25zdCgxKS5JMzJDb25zdCgyKS5JMzJDb25zdCgwKQogICAgICAgICAuU2VsZWN0KCkK
ICAgICAgICAgLlJldHVybigpCiAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7CiAgICAgY29uc3Qg
aiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YVswXS5jb2RlLmxlbmd0aCwgNik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBd
LmNvZGVbM10ubmFtZSwgInNlbGVjdCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVswXS5jb2RlLmxlbmd0aCwgNik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbM10ubmFtZSwgInNlbGVjdCIpOwogfSkoKTsKIAogLy8gRklYTUUgdGVzdCB0eXBlIG1p
c21hdGNoIHdpdGggc2VsZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYzMjY3CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRl
cldlYkFzc2VtYmx5LmpzIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJXZWJB
c3NlbWJseS5qcwppbmRleCBhMjUxYzQzLi5hYzU3ZDM3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dh
c20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanMKQEAgLTMwLDE2ICszMCwzIEBA
IGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogICAgICAgICAgICAgICBbIjAw
MDAwMDAwIDAwIDYxIDczIDZkIDBjIDAwIDAwIDAwIDAwIDBmIDBhIDRmIDAwIDQ4IDAwIDQ4ICB8
wrdhc23Ct8K3wrfCt8K3wrfCt0/Ct0jCt0h8IiwKICAgICAgICAgICAgICAgICIwMDAwMDAxMCAw
MCA0MSAwMCA0OSAwMCBkZSBhZCBjMCBmZSAgICAgICAgICAgICAgICAgICAgICAgfMK3QcK3ScK3
wrfCt8K3wrcgICAgICAgfCJdLmpvaW4oIlxuIikpOwogfSkoKTsKLQotKGZ1bmN0aW9uIEJhc2lj
KCkgewotICAgIGNvbnN0IGJpbiA9IChuZXcgQnVpbGRlcigpKQotICAgICAgICAuQ29kZSgpCi0g
ICAgICAgICAgICAuRnVuY3Rpb24oKQotICAgICAgICAgICAgICAgIC5Ob3AoKQotICAgICAgICAg
ICAgICAgIC5Ob3AoKQotICAgICAgICAgICAgLkVuZCgpCi0gICAgICAgIC5FbmQoKQotICAgICAg
ICAuV2ViQXNzZW1ibHkoKTsKLSAgICBhc3NlcnQuZXEoYmluLmhleGR1bXAoKS50cmltKCksCi0g
ICAgICAgICAgICAgICIwMDAwMDAwMCAwMCA2MSA3MyA2ZCAwYyAwMCAwMCAwMCAwYSAwNiAwMSAw
NCAwMCAwYSAwYSAwZiAgfMK3YXNtwrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3fCIpOwotfSkoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiZjViMjE4Li4xMTdjZDZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTMyLDYgKzExMzIsMjMgQEAg
ZWxzZSAoKQogICAgICkKIGVuZGlmICgpCiAKKyMgV2ViQXNzZW1ibHkgZ2VuZXJhdG9yCisKK21h
Y3JvKEdFTkVSQVRFX1BZVEhPTiBfZ2VuZXJhdG9yIF9pbnB1dCBfb3V0cHV0KQorICAgIGFkZF9j
dXN0b21fY29tbWFuZCgKKyAgICAgICAgT1VUUFVUICR7X291dHB1dH0KKyAgICAgICAgTUFJTl9E
RVBFTkRFTkNZICR7X2dlbmVyYXRvcn0KKyAgICAgICAgREVQRU5EUyAke19pbnB1dH0KKyAgICAg
ICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke19nZW5lcmF0b3J9ICR7X2lucHV0fSAk
e19vdXRwdXR9CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRD
b3JlX0hFQURFUlMgJHtfb3V0cHV0fSkKKyAgICBBRERfU09VUkNFX0RFUEVOREVOQ0lFUygke19p
bnB1dH0gJHtfb3V0cHV0fSkKK2VuZG1hY3JvKCkKK0dFTkVSQVRFX1BZVEhPTigke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFT
Q1JJUFRDT1JFX0RJUn0vV2FzbU9wcy5oKQorR0VORVJBVEVfUFlUSE9OKCR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtERVJJVkVEX1NPVVJD
RVNfSkFWQVNDUklQVENPUkVfRElSfS9XYXNtVmFsaWRhdGVJbmxpbmVzLmgpCisKKyMgTFVUIGdl
bmVyYXRvcgorCiBzZXQoSEFTSF9MVVRfR0VORVJBVE9SICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9jcmVhdGVfaGFzaF90YWJsZSkKIG1hY3JvKEdFTkVSQVRFX0hBU0hfTFVUIF9pbnB1dCBf
b3V0cHV0KQogICAgIGFkZF9jdXN0b21fY29tbWFuZCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDcwYWVlYWYuLmMzYThiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDc5IEBACisyMDE2LTExLTAyICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBtb3JlIHNlY3Rpb25zCisKKyAg
ICAgICAgT24gdGhlIEpTQyBzaWRlOgorCisgICAgICAgICAtIFB1dCBpbiBwYXJzZXIgc3R1YnMg
Zm9yIGFsbCBXZWJBc3NlbWJseSBzZWN0aW9ucy4KKyAgICAgICAgIC0gUGFyc2UgSW1wb3J0LCBF
eHBvcnQgc2VjdGlvbnMuCisgICAgICAgICAtIFVzZSB0cnlSZXNlcnZlQ2FwYWNpdHkgaW5zdGVh
ZCBvZiByZXNlcnZlLCBhbmQgYmFpbCBvdXQgb2YgdGhlIHBhcnNlciBpZiBpdCBmYWlscy4gVGhp
cyBwcmV2ZW50cyB0aGUgcGFyc2VyIGZyb20gYnJpbmdpbmcgZXZlcnl0aGluZyBkb3duIHdoZW4g
ZmFjZWQgd2l0aCBhIG1hbGljaW91cyBpbnB1dC4KKyAgICAgICAgIC0gRW5jYXBzdWxhdGUgYWxs
IHBhcnNlZCBtb2R1bGUgaW5mb3JtYXRpb24gaW50byBpdHMgb3duIHN0cnVjdHVyZSwgbWFraW5n
IGl0IGVhc2llciB0byBwYXNzIGFyb3VuZCAoZnJvbSBwYXJzZXIgdG8gUGxhbiB0byBNb2R1bGUg
dG8gSW5zdGFuY2UpLgorICAgICAgICAgLSBDcmVhdGUgV2FzbUZvcm1hdC5jcHAgdG8gaG9sZCBw
YXJzZWQgbW9kdWxlIGluZm9ybWF0aW9uJ3MgZHRvciB0byBhdm9pZCBpbmNsdWRpbmcgV2FzbU1l
bW9yeS5oIG5lZWRsZXNzbHkuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVycyBvZiBw
b2x5ZmlsbC1wcm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAgLSBBZGQg
bWlzc2luZyBXYXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdlbmVyYXRp
b24gZm9yIGNtYWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRlc3Rpbmcg
c2lkZToKKworICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlvbiBvbmx5
KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hlY2sgc2Vj
dGlvbiBvcmRlciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBhdXRvLWdl
bmVyYXRlIHRoZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAv
IENvZGUgZW50cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4K
KworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IE1vZHVsZSBzaG91bGQgZGVjb2RlIHN0cmlu
Z3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6IG1pc3NpbmcgYXV0by1nZW5yYXRpb24KKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBtZXJnZSBjb25mbGljdAorICAgICAgICAq
IHRlc3RXYXNtLmNwcDogdXBkYXRlIGZvciBBUEkgY2hhbmdlcywgbm8gZnVuY3Rpb25hbCBjaGFu
Z2UKKyAgICAgICAgKGNoZWNrUGxhbik6CisgICAgICAgIChydW5XYXNtVGVzdHMpOgorICAgICAg
ICAqIHdhc20vV2FzbUZvcm1hdC5jcHA6IGFkZCBhIGR0b3Igd2hpY2ggcmVxdWlyZXMgZXh0cmEg
aGVhZGVycyB3aGljaCBJJ2QgcmF0aGVyIG5vdCBpbmNsdWRlIGluIFdhc21Gb3JtYXQuaAorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKToK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDogQWRkIEV4dGVybmFsLCBJbXBvcnQsIEZ1bmN0
aW9uaW5mb3JtYXRpb24sIEV4cG9ydCwgTW9kdWxlSW5mb3JtYXRpb24sIENvbXBpbGVkRnVuY3Rp
b24sIGFuZCByZW1vdmUgb2Jzb2xldGUgc3R1ZmYgd2hpY2ggd2FzIGEgaG9sZG92ZXIgZnJvbSB0
aGUgZmlyc3QgaW1wbGVtZW50YXRpb24gKGFsbCB0aGF0IGNvZGUgaXMgbm93IGdvbmUsIHNvIHJl
bW92ZSBpdHMgbGljZW5zZSkKKyAgICAgICAgKEpTQzo6V2FzbTo6RXh0ZXJuYWw6OmlzVmFsaWQp
OgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6IHNpbXBsaWZ5IHNvbWUsIG1h
a2UgbmFtZXMgY29uc2lzdGVudCB3aXRoIHRoZSBXZWJBc3NlbWJseSBzZWN0aW9uIG5hbWVzLCBj
aGVjayBtZW1vcnkgYWxsb2NhdGlvbnMgc28gdGhleSBjYW4gZmFpbCBlYXJseQorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlUGFyc2VyOjpwYXJzZVR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6
OnBhcnNlSW1wb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlUGFyc2VyOjpwYXJzZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2Vy
OjpwYXJzZUVsZW1lbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNl
Q29kZSk6IGF2b2lkIG92ZXJmbG93IHRocm91Z2ggZnVuY3Rpb24gc2l6ZS4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZURhdGEpOgorICAgICAgICAqIHdhc20vV2FzbU1v
ZHVsZVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Om1vZHVsZUlu
Zm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGFyc2VyOjpjb25zdW1lVVRGOFN0cmluZyk6IGFkZCBhcyByZXF1aXJlZCBieSBzcGVj
CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VFeHRlcm5hbEtpbmQpOiBhZGQgYXMg
cGVyIHNwZWMKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UGxhbjo6UGxhbik6IGZpeCBzb21lIG93bmVyc2hpcCwgaW1wcm92ZSBzb21lIGVycm9yIG1l
c3NhZ2VzCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOiBmaXggc29tZSBvd25lcnNoaXAKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Z2V0TW9kdWxlSW5mb3JtYXRpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpnZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpj
b21waWxlZEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21waWxl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Z2V0Q29tcGlsZWRGdW5jdGlv
bnMpOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6IG1hY3JvaXplIHdpdGggZGVzY3Jp
cHRpb24sIHNvIHRoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIHN1cGVyIHByZXR0eS4gVGhpcyBjb3Vs
ZCBiZSBhdXRvLWdlbmVyYXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUpOiB0YWtl
IG1vZHVsZSBpbmZvcm1hdGlvbgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpK
U1dlYkFzc2VtYmx5TW9kdWxlKTogZGl0dG8KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlSW5m
b3JtYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKTog
Y2hlY2sgdGhhdCBtb2R1bGVzIHdpdGggaW1wb3J0cyBhcmUgaW5zdGFudGlhdGVkIHdpdGggYW4g
aW1wb3J0IG9iamVjdCwgYXMgcGVyIHNwZWMuIFRoaXMgbmVlZHMgdG8gYmUgdGVzdGVkLgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMv
V2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEpTV2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWJs
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVRh
YmxlKToKKwogMjAxNi0xMS0wMiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIE9uZSBmaWxlIHBlciBjbGFzcyBmb3IgQ29kZUJsb2NrLmgvLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwNjU5ZGFiLi5hYWFlNjA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTI3OCw3ICsxMjc4LDYgQEAKIAkJNTNGRDA0RDQxRDdBQjI5
MTAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdh
c21DYWxsaW5nQ29udmVudGlvbi5oICovOyB9OwogCQk1M0ZGN0Y5OTFEQkZDRDkwMDBBMjZDQ0Mg
LyogV2FzbVZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggKi87IH07
CiAJCTUzRkY3RjlCMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRjdGOUExREJGRDJCOTAw
QTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAgKi87IH07Ci0JCTUzRkY3RjlEMURDMDBEQjEwMEEy
NkNDQyAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRkY3RjlDMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCAq
LzsgfTsKIAkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGRDgxREI2
OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovOyB9OwogCQk1QjcwQ0ZERjFEQjY5
RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0Fz
eW5jRnVuY3Rpb24uY3BwICovOyB9OwogCQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyogQXN5
bmNGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUI3MENGREExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90
b3R5cGUuaCAqLzsgfTsKQEAgLTE5NzMsNiArMTk3Miw3IEBACiAJCUFEMkZDQzJEMURCODM4RkQw
MEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5UHJvdG90eXBlLmggKi87IH07CiAJCUFEMkZDQzMwMURCODNENDkwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLzsg
fTsKIAkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5Rjcw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IH07CisJCUFEMkZDQzMzMURDNDA0NTQwMEIz
RTczNiAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAq
LzsgfTsKIAkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNEMUFB
NEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8q
IE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFMzlGRkYxNkRE
MTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFByb3Bl
cnR5VGFibGUuY3BwICovOyB9OwpAQCAtMzYyNyw3ICszNjI3LDYgQEAKIAkJNTNGRDA0RDIxRDdB
QjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVmFsaWRhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21W
YWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVmFs
aWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0ZGN0Y5QzFEQzAwREIx
MDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3
MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUI3MENGRDkxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBFQzIz
RjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NDA0LDYgKzQ0MDMsNyBAQAogCQlBRDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyog
V2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0My
RjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrR0NNYXBJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThB
OCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9w
YXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5MzcxODkx
QUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkxOSw3ICs1OTE5LDcgQEAKIAkJCQk1M0Y0MEU5MjFE
NUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0ZEMDREMTFE
N0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQk1M0ZE
MDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8sCi0JCQkJ
NTNGRjdGOUMxREMwMERCMTAwQTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwICovLAorCQkJCUFEMkZD
QzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLywKIAkJCQk3QkM1NDdEMjFC
Njk1OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICovLAogCQkJCTUzRjQwRThBMUQ1OTAxQkIw
MDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1MzU1NTcxNTFEOURGQTMy
MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8sCkBAIC05ODA3LDYgKzk4MDcsNyBAQAogCQkJ
CTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJl
ZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFEMkZDQzMzMURDNDA0NTQwMEIzRTczNiAv
KiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFB
OTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNF
NUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNt
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKaW5kZXggZDFiODhkOC4u
Mjk3NDVmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCkBAIC0yNzYsMTMgKzI3Niwx
MyBAQCBzdGF0aWMgdm9pZCBjaGVja1BsYW4oUGxhbiYgcGxhbiwgdW5zaWduZWQgZXhwZWN0ZWRO
dW1iZXJPZkZ1bmN0aW9ucykKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBpZiAocGxh
bi5yZXN1bHRTaXplKCkgIT0gZXhwZWN0ZWROdW1iZXJPZkZ1bmN0aW9ucykgeworICAgIGlmIChw
bGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpICE9IGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMp
IHsKICAgICAgICAgZGF0YUxvZ0xuKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGZ1bmN0aW9ucyIpOwog
ICAgICAgICBDUkFTSCgpOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eHBlY3RlZE51bWJlck9mRnVuY3Rpb25zOyArK2kpIHsKLSAgICAgICAgaWYgKCFwbGFuLnJlc3Vs
dChpKSkgeworICAgICAgICBpZiAoIXBsYW4uY29tcGlsZWRGdW5jdGlvbihpKSkgewogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJGdW5jdGlvbiBhdCBpbmRleCwgIiAsIGksICIgZmFpbGVkIHRvIGNv
bXBpbGUgY29ycmVjdGx5Iik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CkBAIC0z
MTQsMTAgKzMxNCwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVj
a1BsYW4ocGxhbiwgMik7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5q
c0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5
UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7Ci0gICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAgIENI
RUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7CisgICAgICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigx
KS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41ZikpOworICAg
ICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMSktPmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgODcu
NjIzNGYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkg
fSksIC0xLjVmKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBi
b3hmKDEyLjUpIH0pLCA4Ny42MjM0ZikpOwogICAgIH0KIAogICAgIHsKQEAgLTM0MCwxMCArMzQw
LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFu
LCAyKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hF
Q0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2lu
dCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOwotICAgICAgICBDSEVDSyhpc0lk
ZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJv
eGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYpKTsKLSAgICAgICAgQ0hFQ0so
aXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50
aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYo
MTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYpKTsKKyAgICAgICAgQ0hFQ0soaXNJ
ZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5
UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEuNWYpKTsKKyAgICAgICAgQ0hFQ0so
aXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDExMi42MjM0ZikpOwor
ICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41Zikp
OworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9
KSwgMTEyLjYyMzRmKSk7CiAgICAgfQogCiAgICAgewpAQCAtMzcxLDExICszNzEsMTEgQEAgc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDIpOwogCiAg
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2lu
dCwgeyBib3goMTAwKSB9KSwgMTIwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMTIpOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4
KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTIpIH0pLCA3OCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgp
LCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJveCgxMDApIH0pLCAxNjYpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMjAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMTIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJv
eCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBi
b3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEwMCkgfSksIDE2Nik7CiAgICAg
fQogCiAgICAgewpAQCAtNDAyLDEwICs0MDIsMTAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNCkgfSksIDI0KTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDIpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg0KSB9KSwgMjQpOwogICAg
IH0KIAogICAgIHsKQEAgLTQyNSwxOCArNDI1LDE4IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0
cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAg
ICAgaWYgKHBsYW4ucmVzdWx0U2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0KDApIHx8ICFwbGFu
LnJlc3VsdCgxKSkgeworICAgICAgICBpZiAocGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKSAh
PSAyIHx8ICFwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkgfHwgIXBsYW4uY29tcGlsZWRGdW5jdGlv
bigxKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUg
Y29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9
KSwgMTYpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxNSkgfSksIDE2KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSB9KSwgMik7CiAgICAgfQogCiAgICAgewpAQCAtNDU5LDEyICs0NTksMTIgQEAgc3RhdGljIHZv
aWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDIpOwogCiAgICAgICAg
IC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQ
b2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSkt
PmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0p
LCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBAIC00ODgsOSArNDg4LDkgQEAgc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAg
ICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSks
IDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgx
MDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNTE1LDkgKzUxNSw5IEBA
IHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsK
IAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3go
MTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDAp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTU1MCwxMyAr
NTUwLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAgICAgUGxhbiBwbGFu
KCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBBU1NF
UlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBsYW4uZ2V0TWVtb3J5
KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCiAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVv
Zih1aW50MzJfdCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94
KGxlbmd0aCkgfSk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9yeSgpKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQz
Ml90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC01NjUsNyArNTY1LDcg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBsZW5ndGggPSAxMDsKICAg
ICAgICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2b2lk
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBi
b3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9
KTsKICAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAgICAgICAgIENIRUNLX0VR
KG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZz
ZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC02MDIsMTMgKzYwMiwxMyBAQCBzdGF0aWMgdm9pZCBydW5X
YXNtVGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7
CisgICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8v
IFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1Owog
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwotICAgICAgICB1aW50OF90KiBtZW1vcnkgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAgICAgICBp
bnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9yeSgpKTsKKyAgICAgICAg
aW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBDSEVDS19FUSht
ZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAr
IGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQpAQCAtNjE2LDcgKzYxNiw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAg
ICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9rZTx2
b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQp
LCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3Ro
KSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKICAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtNjQzLDEyICs2NDMsMTIgQEAgc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VSVChwbGFuLm1lbW9y
eSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnkoKS0+c2l6ZSgpKTsK
IAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3go
MTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDAp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTY3Myw5ICs2
NzMsOSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxh
biwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0p
LCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBA
IC03MDAsMTAgKzcwMCwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBj
aGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSks
IDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goLTEyKSwgYm94
KHBsYW4ubWVtb3J5KCktPnNpemUoKSAtIHNpemVvZih1aW50NjRfdCkpIH0pLCAtMTIpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0p
LCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgtMTIpLCBib3gocGxhbi5nZXRNZW1vcnkoKS0+c2l6
ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSksIC0xMik7CiAgICAgfQogCiAgICAgewpAQCAtNzI4
LDkgKzcyOCw5IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxh
bihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJv
eCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsK
QEAgLTc2MywxMyArNzYzLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwot
ICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBs
YW4uZ2V0TWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52
b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
b2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9yeSgpKTsKKyAgICAgICAg
aW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0g
c2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAw
dSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC03
NzgsNyArNzc4LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBsZW5n
dGggPSAxMDsKICAgICAgICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAg
IGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJv
eChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBi
b3gobGVuZ3RoKSB9KTsKICAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAgICAg
ICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7CiAgICAgICAgIENIRUNLX0VR
KG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC04MTUsMTMgKzgxNSwxMyBAQCBzdGF0
aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7
CiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5
KCktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwog
CiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgogICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwotICAgICAgICB1aW50OF90
KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkp
OwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDhfdCog
bWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9yeSgp
KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQpAQCAtODI5LDcgKzgyOSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21U
ZXN0cygpCiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0gICAg
ICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSks
IGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQp
LCBib3gobGVuZ3RoKSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAx
MDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtODU2LDEyICs4
NTYsMTIgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4o
KnZtLCB2ZWN0b3IpOwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VS
VChwbGFuLm1lbW9yeSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnko
KS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJv
eCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsK
QEAgLTg4Niw5ICs4ODYsOSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBj
aGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKICAgICB9
CiAKICAgICB7CkBAIC05MTMsMTQgKzkxMywxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMiksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9
KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAxKTsKICAgICB9CiAK
ICAgICB7CkBAIC05NTEsMTQgKzk1MSwxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQog
ICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3go
MiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKICAgICB9CiAKIApA
QCAtOTc1LDcgKzk3NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgfSksIDUpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDUpOwogICAgIH0KIAogCkBAIC05OTMs
NyArOTkzLDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFu
KHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyB9
KSwgMTEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKICAgICB9CiAKICAgICB7CkBAIC0xMDEw
LDcgKzEwMTAsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1Bs
YW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IH0pLCAxMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwogICAgIH0KIAogICAgIHsKQEAgLTEw
MjcsNyArMTAyNyw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgfSksIDExKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAgICAgewpAQCAt
MTA0MywxMCArMTA0MywxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBj
aGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9KSwg
MTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KC0xKSwgYm94KDEpfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptaW4oKSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KDEpIH0pLCAxMDEpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0x
KSwgYm94KDEpfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkp
OwogICAgIH0KIAogICAgIHsKQEAgLTEwNjksOCArMTA2OSw4IEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwKSB9
KSwgMTApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMCkgfSksIDEwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTAyLDEwICsxMTAyLDEwIEBAIHN0
YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAog
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpfSksIDMpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9
KSwgNTA1MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAzKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApIH0pLCA1MDUwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTQzLDE0ICsxMTQz
LDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFu
LCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
LCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgy
KSwgYm94KDEpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MiksIGJveCgyKSB9KSwgNCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3goNikgfSksIDYwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAw
MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkg
fSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDIpLCBib3goMikgfSksIDQpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
NikgfSksIDEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDYwMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDEwMCkgfSksIDEwMDAwKTsKICAgICB9CiAKICAg
ICB7CkBAIC0xMTkzLDE0ICsxMTkzLDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAg
ICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KDYpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgy
KSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcAppbmRleCAyYmRjODAwLi5i
ZjhlMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcApAQCAt
MjQsMTAgKzI0LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2Fz
bU1lbW9yeS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjb25zdCBj
aGFyKiB0b1N0cmluZyhUeXBlIHR5cGUpCkBAIC00Niw2ICs0OSw4IEBAIGNvbnN0IGNoYXIqIHRv
U3RyaW5nKFR5cGUgdHlwZSkKICAgICB9CiB9CiAKK01vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxl
SW5mb3JtYXRpb24oKSB7IH0KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAotI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDgyODZhZWYuLjQ5OTY0NGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTIxLDIzICsyMSw2IEBA
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDE1IGJ5IHRoZSByZXBvc2l0b3J5IGF1
dGhvcnMgb2YKLSAqIFdlYkFzc2VtYmx5L3BvbHlmaWxsLXByb3RvdHlwZS0xLgotICoKLSAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0Ci0gKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKICNw
cmFnbWEgb25jZQpAQCAtOTgsMzcgKzgxLDgzIEBAIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5
cGUgdHlwZSkKIH0KIAogY29uc3QgY2hhciogdG9TdHJpbmcoVHlwZSk7CisgICAgCitzdHJ1Y3Qg
RXh0ZXJuYWwgeworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBGdW5jdGlvbiA9
IDAsCisgICAgICAgIFRhYmxlID0gMSwKKyAgICAgICAgTWVtb3J5ID0gMiwKKyAgICAgICAgR2xv
YmFsID0gMywKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludD4KKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkKEludCB2YWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKHZhbCkgeworICAg
ICAgICBjYXNlIEZ1bmN0aW9uOgorICAgICAgICBjYXNlIFRhYmxlOgorICAgICAgICBjYXNlIE1l
bW9yeToKKyAgICAgICAgY2FzZSBHbG9iYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBzdGF0aWNfYXNzZXJ0KEZ1bmN0aW9uID09IDAsICJXYXNtIG5lZWRzIEZ1
bmN0aW9uIHRvIGhhdmUgdGhlIHZhbHVlIDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KFRhYmxlICAg
ID09IDEsICJXYXNtIG5lZWRzIFRhYmxlIHRvIGhhdmUgdGhlIHZhbHVlIDEiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KE1lbW9yeSAgID09IDIsICJXYXNtIG5lZWRzIE1lbW9yeSB0byBoYXZlIHRoZSB2
YWx1ZSAyIik7CisgICAgc3RhdGljX2Fzc2VydChHbG9iYWwgICA9PSAzLCAiV2FzbSBuZWVkcyBH
bG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOworfTsKIAogc3RydWN0IFNpZ25hdHVyZSB7CiAg
ICAgVHlwZSByZXR1cm5UeXBlOwogICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7CiB9OwotCi1z
dHJ1Y3QgRnVuY3Rpb25JbXBvcnQgewotICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7CisgICAgCitz
dHJ1Y3QgSW1wb3J0IHsKKyAgICBTdHJpbmcgbW9kdWxlOworICAgIFN0cmluZyBmaWVsZDsKKyAg
ICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgU2lnbmF0dXJlKiBm
dW5jdGlvblNpZ25hdHVyZTsKKyAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgLy8gRklY
TUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MTM0CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgIH07CiB9OwogCi1zdHJ1Y3Qg
RnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgewotICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4Owot
ICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXg7CitzdHJ1Y3QgRnVuY3Rpb25JbmZvcm1h
dGlvbiB7CisgICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7CisgICAgc2l6ZV90IHN0YXJ0OworICAg
IHNpemVfdCBlbmQ7CiB9OwogCi1zdHJ1Y3QgRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAgdWlu
dDMyX3Qgc2lnbmF0dXJlSW5kZXg7CitjbGFzcyBNZW1vcnk7CisKK3N0cnVjdCBFeHBvcnQgewor
ICAgIFN0cmluZyBmaWVsZDsKKyAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIHVuaW9uIHsK
KyAgICAgICAgU2lnbmF0dXJlKiBmdW5jdGlvblNpZ25hdHVyZTsKKyAgICAgICAgLy8gRklYTUUg
aW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQxMzUKKyAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVu
dCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwor
ICAgIH07CiB9OwogCi1zdHJ1Y3QgRnVuY3Rpb25Qb2ludGVyVGFibGUgewotICAgIHVpbnQzMl90
IHNpZ25hdHVyZUluZGV4OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gZnVuY3Rpb25JbmRpY2VzOwot
ICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rpb25zOwotfTsKK3N0cnVjdCBNb2R1bGVJbmZv
cm1hdGlvbiB7CisgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKKyAgICBWZWN0b3I8
SW1wb3J0PiBpbXBvcnRzOworICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBmdW5jdGlv
bnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIFZlY3RvcjxFeHBv
cnQ+IGV4cG9ydHM7CiAKLXN0cnVjdCBGdW5jdGlvbkluZm9ybWF0aW9uIHsKLSAgICBTaWduYXR1
cmUqIHNpZ25hdHVyZTsKLSAgICBzaXplX3Qgc3RhcnQ7Ci0gICAgc2l6ZV90IGVuZDsKKyAgICB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CiAKK3N0cnVjdCBGdW5jdGlvbkNvbXBpbGF0aW9uOwor
dHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+PiBDb21w
aWxlZEZ1bmN0aW9uczsKKwogc3RydWN0IFVubGlua2VkQ2FsbCB7CiAgICAgQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsTG9jYXRpb247CiAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDU1YzIxMmUu
LmVkMWI2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRl
ICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKQEAgLTQwLDYgKzQxLDgg
QEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiBib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKQogeworICAgIG1fbW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZv
cm1hdGlvbj4oKTsKKwogICAgIGNvbnN0IHNpemVfdCBtaW5TaXplID0gODsKICAgICBpZiAobGVu
Z3RoKCkgPCBtaW5TaXplKSB7CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIk1vZHVsZSBpcyAi
ICsgU3RyaW5nOjpudW1iZXIobGVuZ3RoKCkpICsgIiBieXRlcywgZXhwZWN0ZWQgYXQgbGVhc3Qg
IiArIFN0cmluZzo6bnVtYmVyKG1pblNpemUpICsgIiBieXRlcyI7CkBAIC0xMTEsNTQgKzExNCwy
MCBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBhdXRvIGVuZCA9IG1fb2Zm
c2V0ICsgc2VjdGlvbkxlbmd0aDsKIAogICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKLQotICAg
ICAgICBjYXNlIFNlY3Rpb25zOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBNZW1vcnkuIik7Ci0gICAgICAgICAg
ICBpZiAoIXBhcnNlTWVtb3J5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3Zl
IGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzkxOQotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIG1l
bW9yeSI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpGdW5j
dGlvblR5cGVzOiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIlBhcnNpbmcgdHlwZXMuIik7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rp
b25UeXBlcygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNz
YWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAg
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB0eXBlcyI7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpTaWduYXR1cmVzOiB7Ci0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNp
bmcgZnVuY3Rpb24gc2lnbmF0dXJlcy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlv
blNpZ25hdHVyZXMoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3Ig
bWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0g
ICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgZnVuY3Rpb24g
c2lnbmF0dXJlcyI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25z
OjpEZWZpbml0aW9uczogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zLiIpOwotICAgICAgICAg
ICAgaWYgKCFwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291
bGRuJ3QgcGFyc2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMiOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBTZWN0aW9uczo6VW5rbm93bjoKLSAgICAgICAgLy8gRklYTUU6IERlbGV0
ZSB0aGlzIHdoZW4gd2Ugc3VwcG9ydCBhbGwgdGhlIHNlY3Rpb25zLgotICAgICAgICBkZWZhdWx0
OiB7CisgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBpbiBtYWNybyBiZWxv
dyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pIFwKKyAgICAgICAgY2Fz
ZSBTZWN0aW9uczo6TkFNRTogeyBcCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgXAorICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyAiIERFU0NSSVBUSU9OKTsgXAorICAgICAgICAg
ICAgaWYgKCFwYXJzZSAjIyBOQU1FKCkpIHsgXAorICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gIiAjTkFNRSAiOiAiIERFU0NSSVBUSU9OOyBc
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAgICAgICB9IFwKKyAgICAg
ICAgfSBicmVhazsKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9Q
QVJTRSkKKyN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKKworICAgICAgICBjYXNlIFNlY3Rpb25z
OjpVbmtub3duOiB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIlVua25vd24gc2VjdGlvbiwgc2tpcHBpbmcuIik7CiAgICAgICAgICAgICAvLyBJ
Z25vcmUgc2VjdGlvbidzIG5hbWUgTEVCIGFuZCBieXRlczogdGhleSdyZSBhbHJlYWR5IGluY2x1
ZGVkIGluIHNlY3Rpb25MZW5ndGguCkBAIC0xODQsNzggKzE1Myw1MCBAQCBib29sIE1vZHVsZVBh
cnNlcjo6cGFyc2UoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VNZW1vcnkoKQotewotICAgIHVpbnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJ
bnQxKGZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDMyX3Qgc2l6ZTsK
LSAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKHNpemUgPiBtYXhQYWdlQ291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OwotICAgIGlmIChmbGFncykgewotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VD
b3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXBhY2l0eSAq
PSBwYWdlU2l6ZTsKLSAgICBzaXplICo9IHBhZ2VTaXplOwotCi0gICAgVmVjdG9yPHVuc2lnbmVk
PiBwaW5uZWRTaXplcyA9IHsgMCB9OwotICAgIG1fbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxN
ZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7Ci0gICAgcmV0dXJuIG1fbWVtb3J5
LT5tZW1vcnkoKTsKLX0KLQotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcygp
Citib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkKIHsKICAgICB1aW50MzJfdCBjb3VudDsK
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiY291bnQ6ICIsIGNvdW50KTsK
LQotICAgIG1fc2lnbmF0dXJlcy5yZXNpemUoY291bnQpOwotCisgICAgaWYgKCFtX21vZHVsZS0+
c2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAg
ICAgICAgdWludDhfdCB0eXBlOwogICAgICAgICBpZiAoIXBhcnNlVUludDcodHlwZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICh0eXBlICE9IDB4NDApIC8vIEZ1bmN0
aW9uIHR5cGUgY29uc3RhbnQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAg
CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJHb3QgZnVuY3Rp
b24gdHlwZS4iKTsKLQorICAgICAgICAKICAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsK
ICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQorICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nTG4oImFyZ3VtZW50Q291bnQ6ICIsIGFyZ3VtZW50Q291bnQpOwotCisgICAg
ICAgIAogICAgICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLSAgICAgICAgYXJndW1l
bnRUeXBlcy5yZXNpemUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIGlmICghYXJndW1lbnRUeXBl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7
ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGFyZ3VtZW50Q291bnQ7
ICsraSkgewogICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8ICFpc1ZhbHVlVHlw
ZShzdGF0aWNfY2FzdDxUeXBlPih0eXBlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19jYXN0PFR5cGU+KHR5cGUp
OworICAgICAgICAgICAgYXJndW1lbnRUeXBlcy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8
VHlwZT4odHlwZSkpOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIGlmICghcGFyc2VW
YXJVSW50MSh0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgVHlwZSBy
ZXR1cm5UeXBlOwotCisgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2dMbih0eXBlKTsKLQorICAgICAgICAKICAgICAgICAgaWYgKHR5cGUpIHsKICAgICAg
ICAgICAgIFR5cGUgdmFsdWU7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZhbHVl
KSkKQEAgLTI2NCw0OCArMjA1LDE5NSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlv
blR5cGVzKCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm5UeXBlID0gVHlwZTo6
Vm9pZDsKIAotICAgICAgICBtX3NpZ25hdHVyZXNbaV0gPSB7IHJldHVyblR5cGUsIFdURk1vdmUo
YXJndW1lbnRUeXBlcykgfTsKKyAgICAgICAgbV9tb2R1bGUtPnNpZ25hdHVyZXMudW5jaGVja2Vk
QXBwZW5kKHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9KTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uU2ln
bmF0dXJlcygpCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogewotICAgIHVpbnQz
Ml90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgIHVpbnQzMl90
IGltcG9ydENvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW1wb3J0Q291bnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX21vZHVsZS0+aW1wb3J0cy50cnlSZXNlcnZl
Q2FwYWNpdHkoaW1wb3J0Q291bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2Z1
bmN0aW9ucy5yZXNpemUoY291bnQpOworICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0g
MDsgaW1wb3J0TnVtYmVyICE9IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgeworICAgICAg
ICBJbXBvcnQgaTsKKyAgICAgICAgdWludDMyX3QgbW9kdWxlTGVuOworICAgICAgICB1aW50MzJf
dCBmaWVsZExlbjsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4pKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNvbnN1bWVVVEY4U3RyaW5nKGku
bW9kdWxlLCBtb2R1bGVMZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFjb25zdW1lVVRGOFN0cmluZyhpLmZpZWxkLCBmaWVsZExlbikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtpbmQoaS5r
aW5kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChpLmtpbmQp
IHsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvblNpZ25hdHVyZUluZGV4ID4gbV9tb2R1bGUtPnNp
Z25hdHVyZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGkuZnVuY3Rpb25TaWduYXR1cmUgPSAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbZnVuY3Rpb25T
aWduYXR1cmVJbmRleF07CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6
OlRhYmxlOgorICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDEzNQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0
ZXJuYWw6Ok1lbW9yeToKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEV4dGVybmFsOjpHbG9iYWw6CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCisgICAgICAgICAgICAvLyBJbiB0aGUg
TVZQLCBvbmx5IGltbXV0YWJsZSBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSBpbXBvcnRlZC4KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbV9tb2R1bGUtPmltcG9ydHMu
dW5jaGVja2VkQXBwZW5kKGkpOworICAgIH0KIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitib29sIE1vZHVsZVBh
cnNlcjo6cGFyc2VGdW5jdGlvbigpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1f
bW9kdWxlLT5mdW5jdGlvbnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgIT0gY291bnQ7ICsr
aSkgewogICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwogICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKHR5cGVOdW1iZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGlmICh0eXBlTnVtYmVyID49IG1fc2lnbmF0dXJlcy5zaXplKCkpCisgICAgICAgIAorICAgICAg
ICBpZiAodHlwZU51bWJlciA+PSBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9mdW5jdGlvbnNbaV0uc2lnbmF0dXJlID0g
Jm1fc2lnbmF0dXJlc1t0eXBlTnVtYmVyXTsKKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9ucy51
bmNoZWNrZWRBcHBlbmQoeyAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbdHlwZU51bWJlcl0sIDAsIDAg
fSk7CiAgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlVGFibGUoKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCit7CisgICAgdWludDhfdCBmbGFn
czsKKyAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB1aW50MzJfdCBzaXplOworICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2l6ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2l6ZSA+IG1heFBhZ2VDb3VudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgdWludDMyX3QgY2FwYWNpdHkgPSBtYXhQYWdlQ291bnQ7
CisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoY2FwYWNpdHkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5
IHx8IGNhcGFjaXR5ID4gbWF4UGFnZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGNhcGFjaXR5ICo9IHBhZ2VTaXplOworICAgIHNpemUgKj0gcGFnZVNpemU7
CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CisgICAgbV9tb2R1
bGUtPm1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5PihzaXplLCBjYXBhY2l0eSwgcGlu
bmVkU2l6ZXMpOworICAgIHJldHVybiBtX21vZHVsZS0+bWVtb3J5LT5tZW1vcnkoKTsKK30KKyAg
ICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpCit7CisgICAgLy8gRklYTUUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgIHJldHVybiB0
cnVlOworfQorICAgIAorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkKK3sKKyAgICB1
aW50MzJfdCBleHBvcnRDb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGV4cG9ydENvdW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9tb2R1bGUtPmV4cG9ydHMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGZvciAodWludDMyX3QgZXhwb3J0TnVtYmVyID0gMDsgZXhwb3J0TnVtYmVyICE9IGV4
cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgeworICAgICAgICBFeHBvcnQgZTsKKyAgICAgICAg
dWludDMyX3QgZmllbGRMZW47CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZmllbGRMZW4p
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNvbnN1bWVVVEY4U3Ry
aW5nKGUuZmllbGQsIGZpZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFwYXJzZUV4dGVybmFsS2luZChlLmtpbmQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBzd2l0Y2ggKGUua2luZCkgeworICAgICAgICBjYXNlIEV4dGVybmFsOjpG
dW5jdGlvbjogeworICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsK
KyAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaWduYXR1cmVJbmRleCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
U2lnbmF0dXJlSW5kZXggPiBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS5mdW5jdGlvblNpZ25hdHVyZSA9ICZt
X21vZHVsZS0+c2lnbmF0dXJlc1tmdW5jdGlvblNpZ25hdHVyZUluZGV4XTsKKyAgICAgICAgfSBi
cmVhazsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6VGFibGU6CisgICAgICAgICAgICAvLyBGSVhN
RSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OgorICAgICAgICAgICAg
Ly8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6Okdsb2JhbDoKKyAgICAg
ICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQxMzMKKyAgICAgICAgICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxlIGdsb2JhbCB2
YXJpYWJsZXMgY2FuIGJlIGV4cG9ydGVkLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fbW9kdWxlLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVuZChlKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VTdGFydCgpCit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAg
ICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKQoreworICAgIC8vIEZJWE1FCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVm
aW5pdGlvbnMoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpCiB7CiAgICAgdWludDMy
X3QgY291bnQ7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChjb3VudCAhPSBtX2Z1bmN0aW9ucy5zaXplKCkpCisgICAgaWYg
KGNvdW50ICE9IG1fbW9kdWxlLT5mdW5jdGlvbnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCBm
dW5jdGlvblNpemU7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaXplKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uU2l6ZSA+IGxl
bmd0aCgpIHx8IGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9vZmZzZXQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1f
ZnVuY3Rpb25zW2ldOworICAgICAgICBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9tb2R1
bGUtPmZ1bmN0aW9uc1tpXTsKICAgICAgICAgaW5mby5zdGFydCA9IG1fb2Zmc2V0OwogICAgICAg
ICBpbmZvLmVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOwogICAgICAgICBtX29mZnNldCA9
IGluZm8uZW5kOwpAQCAtMzEzLDYgKzQwMSwxMiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbkRlZmluaXRpb25zKCkKIAogICAgIHJldHVybiB0cnVlOwogfQorICAgIAorYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpCit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gdHJ1
ZTsKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IDM4MjkzYWMuLjg5OWJmMjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTI3
LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldhc21N
ZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgog
I2luY2x1ZGUgIldhc21QYXJzZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01Niwy
NyArNTYsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7CiAgICAg
fQogCi0gICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbkluZm9y
bWF0aW9uKCkgY29uc3QKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+JiBt
b2R1bGVJbmZvcm1hdGlvbigpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVk
KCkpOwotICAgICAgICByZXR1cm4gbV9mdW5jdGlvbnM7Ci0gICAgfQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZW1vcnk+JiBtZW1vcnkoKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZh
aWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fbWVtb3J5OworICAgICAgICByZXR1cm4gbV9tb2R1
bGU7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
TWVtb3J5KCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvblR5cGVz
KCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvblNpZ25hdHVyZXMo
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMo
KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbih1
aW50MzJfdCBudW1iZXIpOworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFN
RSwgSUQsIERFU0NSSVBUSU9OKSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1F
KCk7CisgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNF
UikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAotICAgIFZlY3RvcjxGdW5j
dGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9uczsKLSAgICBWZWN0b3I8U2lnbmF0dXJlPiBtX3Np
Z25hdHVyZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbV9tZW1vcnk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZTsKICAgICBib29sIG1fZmFp
bGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggNDZhN2IzOS4uMTcyYmRiMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKICNpbmNsdWRlIDx3
dGYvTEVCRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC00Miw2ICs0Myw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVDaGFyYWN0ZXIoY2hhcik7
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3VtZVN0cmluZyhjb25zdCBjaGFyKik7
CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3VtZVVURjhTdHJpbmcoU3RyaW5nICYs
IHNpemVfdCk7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQxKHVp
bnQ4X3QmIHJlc3VsdCk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50Nyh1
aW50OF90JiByZXN1bHQpOwpAQCAtNTAsNiArNTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50NjQodWludDY0X3QmIHJlc3VsdCkgeyByZXR1
cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50NjQobV9zb3VyY2UsIG1fc291cmNlTGVuZ3Ro
LCBtX29mZnNldCwgcmVzdWx0KTsgfQogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VWYWx1ZVR5cGUoVHlwZSYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZUV4dGVybmFsS2luZChFeHRlcm5hbDo6S2luZCYgcmVzdWx0KTsKIAogICAgIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgc2l6ZV90IGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CkBAIC05Miw2ICs5NSwyMSBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0
cikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29u
c3VtZVVURjhTdHJpbmcoU3RyaW5nICZyZXN1bHQsIHNpemVfdCBzdHJpbmdMZW5ndGgpCit7Cisg
ICAgaWYgKHN0cmluZ0xlbmd0aCA9PSAwKSB7CisgICAgICAgIHJlc3VsdCA9IFN0cmluZygpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGxlbmd0aCgpIDwgc3RyaW5nTGVu
Z3RoIHx8IG1fb2Zmc2V0ID4gbGVuZ3RoKCkgLSBzdHJpbmdMZW5ndGgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0
IExDaGFyKj4oJnNvdXJjZSgpW21fb2Zmc2V0XSksIHN0cmluZ0xlbmd0aCk7CisgICAgbV9vZmZz
ZXQgKz0gc3RyaW5nTGVuZ3RoOworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBQ
YXJzZXI6OnBhcnNlVUludDMyKHVpbnQzMl90JiByZXN1bHQpCiB7CiAgICAgaWYgKGxlbmd0aCgp
IDwgNCB8fCBtX29mZnNldCA+IGxlbmd0aCgpIC0gNCkKQEAgLTEyOCw2ICsxNDYsMTcgQEAgQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUoVHlwZSYgcmVzdWx0KQogICAg
IHJlc3VsdCA9IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
KyAgICAKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVy
bmFsOjpLaW5kJiByZXN1bHQpCit7CisgICAgdWludDhfdCB2YWx1ZTsKKyAgICBpZiAoIXBhcnNl
VUludDcodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFFeHRlcm5hbDo6
aXNWYWxpZCh2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0
aWNfY2FzdDxFeHRlcm5hbDo6S2luZD4odmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKaW5kZXggNzM5YmU0Mi4uMmUwMjhkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcApAQCAtMzEsOSArMzEsMTEgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Fz
bU1vZHVsZVBhcnNlci5oIgogI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC00OCw0MCArNTAsNTAgQEAgUGxhbjo6
UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkK
IHsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIp
OwotICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJzZXIoc291cmNlLCBzb3VyY2VMZW5ndGgpOwot
ICAgIGlmICghbW9kdWxlUGFyc2VyLnBhcnNlKCkpIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJQYXJz
aW5nIG1vZHVsZSBmYWlsZWQ6ICIsIG1vZHVsZVBhcnNlci5lcnJvck1lc3NhZ2UoKSk7Ci0gICAg
ICAgIG1fZXJyb3JNZXNzYWdlID0gbW9kdWxlUGFyc2VyLmVycm9yTWVzc2FnZSgpOwotICAgICAg
ICByZXR1cm47CisgICAgeworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJj
ZSwgc291cmNlTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgewor
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIG1vZHVsZSBmYWlsZWQ6ICIsIG1vZHVsZVBh
cnNlci5lcnJvck1lc3NhZ2UoKSk7CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1vZHVs
ZVBhcnNlci5lcnJvck1lc3NhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBtX21vZHVsZUluZm9ybWF0aW9uID0gV1RGTW92ZShtb2R1bGVQYXJzZXIubW9kdWxl
SW5mb3JtYXRpb24oKSk7CiAgICAgfQotCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFM
b2dMbigiUGFyc2VkIG1vZHVsZS4iKTsKIAotICAgIGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1h
dGlvbiYgaW5mbyA6IG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpIHsKKyAgICBp
ZiAoIW1fY29tcGlsZWRGdW5jdGlvbnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmZ1bmN0aW9ucy5zaXplKCkpKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91
Z2ggc3BhY2UgZm9yICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX21vZHVsZUlu
Zm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgY29tcGlsZWQgZnVuY3Rpb25zIik7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gYnVp
bGRlci50b1N0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChjb25z
dCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvIDogbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rp
b25zKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9j
ZXNzaW5nIGZ1bmNpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIgYW5kIGVuZGluZyBh
dDogIiwgaW5mby5lbmQpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0
aW9uIHN0YXJ0aW5nIGF0OiAiLCBpbmZvLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8u
ZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IHNvdXJjZSArIGlu
Zm8uc3RhcnQ7CiAgICAgICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGluZm8uZW5kIC0gaW5m
by5zdGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IHNvdXJjZUxlbmd0aCk7
CiAKLSAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0
LCBmdW5jdGlvbkxlbmd0aCwgaW5mby5zaWduYXR1cmUsIG1vZHVsZVBhcnNlci5mdW5jdGlvbklu
Zm9ybWF0aW9uKCkpOworICAgICAgICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBpbmZvLnNpZ25hdHVyZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25zKTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAg
ICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIG1fcmVzdWx0LmFwcGVuZChwYXJzZUFuZENvbXBpbGUodm0sIGZ1
bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBtb2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCks
IGluZm8uc2lnbmF0dXJlLCBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1hdGlvbigpKSk7Cisg
ICAgICAgIG1fY29tcGlsZWRGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGls
ZSh2bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm1lbW9yeS5nZXQoKSwgaW5mby5zaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0
aW9ucykpOwogICAgIH0KIAogICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1
bmN0aW9uLgotICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBm
dW5jdGlvblB0ciA6IG1fcmVzdWx0KSB7CisgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db21waWxhdGlvbj4mIGZ1bmN0aW9uUHRyIDogbV9jb21waWxlZEZ1bmN0aW9ucykgewogICAg
ICAgICBGdW5jdGlvbkNvbXBpbGF0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUHRyLmdldCgpOwog
ICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBmdW5jdGlvbi0+dW5saW5rZWRDYWxscykKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwobV9yZXN1bHRbY2FsbC5mdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgp
KSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKG1fY29tcGlsZWRGdW5jdGlvbnNbY2FsbC5mdW5jdGlv
bkluZGV4XS0+Y29kZS0+Y29kZSgpKSk7CiAgICAgfQogCi0gICAgbV9tZW1vcnkgPSBXVEZNb3Zl
KG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7CiAgICAgbV9mYWlsZWQgPSBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggYjg0ZjlkNy4uYTdjODA0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC0zOCw4ICszOCw2IEBAIGNsYXNz
IE1lbW9yeTsKIAogY2xhc3MgUGxhbiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+PiBDb21waWxlZEZ1bmN0aW9uczsKLQog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4pOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwpAQCAtNTAsMzYgKzQ4LDM3IEBAIHB1YmxpYzoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZmFpbGVkKCkpOwogICAgICAgICByZXR1cm4gbV9lcnJvck1l
c3NhZ2U7CiAgICAgfQotICAgIHNpemVfdCByZXN1bHRTaXplKCkgY29uc3QKKyAgICAKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+JiBnZXRNb2R1bGVJbmZvcm1hdGlvbigp
CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1
cm4gbV9yZXN1bHQuc2l6ZSgpOworICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbjsK
ICAgICB9Ci0gICAgY29uc3QgRnVuY3Rpb25Db21waWxhdGlvbiogcmVzdWx0KHNpemVfdCBuKSBj
b25zdAorICAgIGNvbnN0IE1lbW9yeSogZ2V0TWVtb3J5KCkgY29uc3QKICAgICB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdC5hdChu
KS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQo
KTsKICAgICB9Ci0gICAgY29uc3QgTWVtb3J5KiBtZW1vcnkoKSBjb25zdAorICAgIHNpemVfdCBj
b21waWxlZEZ1bmN0aW9uQ291bnQoKSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fbWVtb3J5LmdldCgpOworICAgICAgICBy
ZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9ucy5zaXplKCk7CiAgICAgfQotICAgIAotICAgIENvbXBp
bGVkRnVuY3Rpb25zKiBnZXRGdW5jdGlvbnMoKQorICAgIGNvbnN0IEZ1bmN0aW9uQ29tcGlsYXRp
b24qIGNvbXBpbGVkRnVuY3Rpb24oc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gJm1fcmVzdWx0OworICAgICAg
ICByZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9ucy5hdChpKS5nZXQoKTsKICAgICB9Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE1lbW9yeT4qIGdldE1lbW9yeSgpCisgICAgQ29tcGlsZWRGdW5jdGlvbnMm
IGdldENvbXBpbGVkRnVuY3Rpb25zKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFm
YWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiAmbV9tZW1vcnk7CisgICAgICAgIHJldHVybiBtX2Nv
bXBpbGVkRnVuY3Rpb25zOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb21waWxlZEZ1bmN0aW9u
cyBtX3Jlc3VsdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX21lbW9yeTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Cisg
ICAgQ29tcGlsZWRGdW5jdGlvbnMgbV9jb21waWxlZEZ1bmN0aW9uczsKKwogICAgIGJvb2wgbV9m
YWlsZWQgeyB0cnVlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKaW5kZXggNzI1Nzg2Ny4uOTk2MDUyNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTI5LDEyICsy
OSwyNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCisjZGVmaW5lIEZP
Ul9FQUNIX1dBU01fU0VDVElPTihtYWNybykgXAorICAgIG1hY3JvKFR5cGUsICAgICAxLCAiRnVu
Y3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIpIFwKKyAgICBtYWNybyhJbXBvcnQsICAgMiwg
IkltcG9ydCBkZWNsYXJhdGlvbnMiKSBcCisgICAgbWFjcm8oRnVuY3Rpb24sIDMsICJGdW5jdGlv
biBkZWNsYXJhdGlvbnMiKSBcCisgICAgbWFjcm8oVGFibGUsICAgIDQsICJJbmRpcmVjdCBmdW5j
dGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIikgXAorICAgIG1hY3JvKE1lbW9yeSwgICA1LCAi
TWVtb3J5IGF0dHJpYnV0ZXMiKSBcCisgICAgbWFjcm8oR2xvYmFsLCAgIDYsICJHbG9iYWwgZGVj
bGFyYXRpb25zIikgXAorICAgIG1hY3JvKEV4cG9ydCwgICA3LCAiRXhwb3J0cyIpIFwKKyAgICBt
YWNybyhTdGFydCwgICAgOCwgIlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIikgXAorICAgIG1h
Y3JvKEVsZW1lbnQsICA5LCAiRWxlbWVudHMgc2VjdGlvbiIpIFwKKyAgICBtYWNybyhDb2RlLCAg
ICAxMCwgIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiKSBcCisgICAgbWFjcm8oRGF0YSwgICAgMTEs
ICJEYXRhIHNlZ21lbnRzIikKKwogc3RydWN0IFNlY3Rpb25zIHsKICAgICBlbnVtIFNlY3Rpb24g
OiB1aW50OF90IHsKLSAgICAgICAgRnVuY3Rpb25UeXBlcyA9IDEsCi0gICAgICAgIFNpZ25hdHVy
ZXMgPSAzLAotICAgICAgICBNZW1vcnkgPSA1LAotICAgICAgICBEZWZpbml0aW9ucyA9IDEwLAor
I2RlZmluZSBERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0oTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBO
QU1FID0gSUQsCisgICAgICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihERUZJTkVfV0FTTV9TRUNU
SU9OX0VOVU0pCisjdW5kZWYgREVGSU5FX1dBU01fU0VDVElPTl9FTlVNCiAgICAgICAgIFVua25v
d24KICAgICB9OwogICAgIHN0YXRpYyBib29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91
cywgU2VjdGlvbiBuZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCA2NWNjYTk1Li5kNmJhMzgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmNwcApAQCAtMzUsOSArMzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3NlbWJs
eU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlv
bj4+KiBjb21waWxlZEZ1bmN0aW9ucywgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qIG1l
bW9yeSkKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1hdGlvbiwgV2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMm
IGNvbXBpbGVkRnVuY3Rpb25zKQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1i
bHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgY29tcGlsZWRGdW5jdGlvbnMsIG1lbW9yeSk7CisgICAg
YXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5
TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1
bGVJbmZvcm1hdGlvbiwgY29tcGlsZWRGdW5jdGlvbnMpOwogICAgIGluc3RhbmNlLT5maW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDcsMTAgKzQ3LDEwIEBA
IFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5
TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+KiBjb21waWxlZEZ1bmN0aW9ucywgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpT
V2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlx
dWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIFdhc206
OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucykKICAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKLSAgICAsIG1fY29tcGlsZWRGdW5jdGlvbnMoV1RGTW92ZSgqY29tcGlsZWRGdW5j
dGlvbnMpKQotICAgICwgbV9tZW1vcnkoV1RGTW92ZSgqbWVtb3J5KSkKKyAgICAsIG1fbW9kdWxl
SW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlvbikpCisgICAgLCBtX2NvbXBpbGVk
RnVuY3Rpb25zKFdURk1vdmUoY29tcGlsZWRGdW5jdGlvbnMpKQogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXgg
YTQzOGE2MS4uOWRhMjEyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMjksMzIgKzI5LDMyIEBACiAKICNpbmNsdWRl
ICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdhc20gewot
c3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb247Ci1jbGFzcyBNZW1vcnk7Ci19Ci0KIGNsYXNzIEpT
V2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiosIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNZW1vcnk+Kik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4m
LCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJF
X0lORk87CiAKKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiogbW9kdWxlSW5mb3Jt
YXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24u
Z2V0KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYs
IFN0cnVjdHVyZSosIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxh
dGlvbj4+Kiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qKTsKKyAgICBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uPiYsIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCiBwcml2YXRl
OgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+
IG1fY29tcGlsZWRGdW5jdGlvbnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4g
bV9tZW1vcnk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZUluZm9ybWF0aW9uOworICAgIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zIG1fY29tcGls
ZWRGdW5jdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuY3BwCmluZGV4IGE5ZmYxMWQuLmM4YWVhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcApAQCAtNjQsOCArNjQsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdAog
ICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29w
ZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0
byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwg
ZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50
KSkpKTsKIAotICAgIC8vIEZJWE1FIHVzZSB0aGUgaW1wb3J0T2JqZWN0LiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDM5CiAgICAgLy8gSWYgdGhlIGxpc3Qgb2Yg
bW9kdWxlLmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90
IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgorICAgIGlmIChtb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCktPmltcG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVU
eXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJlY2F1c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVs
ZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFs
dWUoaW1wb3J0QXJndW1lbnQpKSkpOwogCiAgICAgLy8gRklYTUUgU3RyaW5nIHRoaW5ncyBmcm9t
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMjMKICAgICAvLyBM
ZXQgZXhwb3J0cyBiZSBhIGxpc3Qgb2YgKHN0cmluZywgSlMgdmFsdWUpIHBhaXJzIHRoYXQgaXMg
bWFwcGVkIGZyb20gZWFjaCBleHRlcm5hbCB2YWx1ZSBlIGluIGluc3RhbmNlLmV4cG9ydHMgYXMg
Zm9sbG93czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMWM1ODJiNC4uY2ZjYWM2
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9y
eShFeGVjU3RhdGUqIHN0YXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIE1lbW9y
eSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IDBiMDU1YTAuLmJiNjg0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3Bw
CkBAIC03MywxMyArNzMsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXQKICAgICBpZiAocGxh
bi5mYWlsZWQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yKHN0YXRlLCBwbGFu
LmVycm9yTWVzc2FnZSgpKSkpOwogCi0gICAgLy8gVGhlIHNwZWMgc3RyaW5nIHZhbHVlcyBpbnNp
ZGUgQXN0Lm1vZHVsZSBhcmUgZGVjb2RlZCBhcyBVVEY4IGFzIGRlc2NyaWJlZCBpbiBXZWIubWQu
IEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMjMKLQog
ICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0
dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAg
ICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1
Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKHN0YXRl
LT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZt
LCBzdHJ1Y3R1cmUsIHBsYW4uZ2V0RnVuY3Rpb25zKCksIHBsYW4uZ2V0TWVtb3J5KCkpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwg
c3RydWN0dXJlLCBwbGFuLmdldE1vZHVsZUluZm9ybWF0aW9uKCksIHBsYW4uZ2V0Q29tcGlsZWRG
dW5jdGlvbnMoKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggY2FhN2U5ZS4uYzk1ODBiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3Iu
Y3BwCkBAIC00Nyw2ICs0Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIHN0YXRlCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQxMzUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRl
LCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9l
c24ndCB5ZXQgaW1wbGVtZW50IHRoZSBUYWJsZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOwog
fQogCi0tIAoyLjEwLjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293723</attachid>
            <date>2016-11-02 17:13:10 -0700</date>
            <delta_ts>2016-11-02 17:42:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-more-sections.patch</filename>
            <type>text/plain</type>
            <size>136943</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBhN2E5MGYwOWQyMzhmOTBjNTBhYjNiNDQ1ODMzNTZiYmI3YmRhMDE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDI3IE9jdCAyMDE2IDE0OjM0OjA0IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0aW9ucwoKT24gdGhlIEpTQyBzaWRlOgoK
IC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgogLSBQ
YXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0aW9ucy4KIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBp
bnN0ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxz
LiBUaGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24g
d2hlbiBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgogLSBFbmNhcHN1bGF0ZSBhbGwgcGFy
c2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQg
ZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJ
bnN0YW5jZSkuCiAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1bGUg
aW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVlZGxl
c3NseS4KIC0gUmVtb3ZlIGFsbCByZW1haW5kZXJzIG9mIHBvbHlmaWxsLXByb3RvdHlwZS0xLCBh
bmQgdXBkYXRlIGxpY2Vuc2UuCiAtIEFkZCBtaXNzaW5nIFdhc21PcHMuaCBhbmQgV2FzbVZhbGlk
YXRlSW5saW5lcy5oIGF1dG8tZ2VuZXJhdGlvbiBmb3IgY21ha2UgYnVpbGQuCgpPbiB0aGUgQnVp
bGRlci5qcyB0ZXN0aW5nIHNpZGU6CgogLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KIC0gQ2hlY2sgc2VjdGlv
biBvcmRlciBhbmQgdW5pcXVlbmVzcy4KIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRoZSBU
eXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50cmll
cy4KIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1OSArKysKIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjc4ICsrKysrKysrKyst
LS0KIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzICAgICAgICAgIHwg
MTA3ICsrKysrCiBKU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMgICAgICAgICAgICAgICAg
ICAgICB8ICAxMiArCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgOSArCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNSArCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzICAg
ICAgICAgICAgICAgICB8ICAxMCArCiBKU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRl
ckpTT04uanMgICAgICAgICB8IDQ1NSArKysrKysrKysrKysrKystLS0tLS0KIEpTVGVzdHMvd2Fz
bS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanMgIHwgIDEzIC0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgIHwgIDE3ICsKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgIDc2ICsrKysK
IC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAgIHwgICA3
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwICAgICAgICAgICAgICAgICB8
IDI0MiArKysrKy0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5j
cHAgICAgICAgICAgfCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgIDk3ICsrKy0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8IDMwMiArKysrKysrKystLS0tLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oICAgICAgfCAgMjMgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCAgICAgICAgICAgIHwgIDI5ICsrCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzOCArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjkg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oICAgICAgICAgIHwg
IDIwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cCB8ICAxMCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oICAgfCAgMjAgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgICAgIHwgICAzICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcCAgICAgICB8ICAgMSArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcCAgICAgICB8ICAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmNwcCAgICAgICAgfCAgIDEgKwogMjcgZmlsZXMgY2hhbmdlZCwgMTM2MSBpbnNl
cnRpb25zKCspLCA1MTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93
YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBmNWRjNzEuLmNmOGY5NTUgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNjIgQEAKKzIwMTYtMTEtMDIgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IG1vcmUgc2VjdGlvbnMKKwor
ICAgICAgICBPbiB0aGUgSlNDIHNpZGU6CisKKyAgICAgICAgIC0gUHV0IGluIHBhcnNlciBzdHVi
cyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgorICAgICAgICAgLSBQYXJzZSBJbXBvcnQs
IEV4cG9ydCBzZWN0aW9ucy4KKyAgICAgICAgIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBpbnN0
ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxzLiBU
aGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24gd2hl
biBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgorICAgICAgICAgLSBFbmNhcHN1bGF0ZSBh
bGwgcGFyc2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtp
bmcgaXQgZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVs
ZSB0byBJbnN0YW5jZSkuCisgICAgICAgICAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xk
IHBhcnNlZCBtb2R1bGUgaW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNt
TWVtb3J5LmggbmVlZGxlc3NseS4KKyAgICAgICAgIC0gcGFyc2VDb2RlOiBhdm9pZCBvdmVyZmxv
dyB0aHJvdWdoIGZ1bmN0aW9uIHNpemUuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVy
cyBvZiBwb2x5ZmlsbC1wcm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAg
LSBBZGQgbWlzc2luZyBXYXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdl
bmVyYXRpb24gZm9yIGNtYWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRl
c3Rpbmcgc2lkZToKKworICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hl
Y2sgc2VjdGlvbiBvcmRlciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBh
dXRvLWdlbmVyYXRlIHRoZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIElt
cG9ydCAvIENvZGUgZW50cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGlt
cG9ydC4KKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IE1vZHVsZSBzaG91bGQgZGVjb2Rl
IHN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd2FzbS9CdWlsZGVyLmpzOiBidWlsZCB0eXBlLCBpbXBvcnQsIGFuZCBleHBvcnQgc2VjdGlv
bnMKKyAgICAgICAgKGNvbnN0Ll9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZSk6CisgICAgICAg
ICogd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOiBBZGRlZC4gRm9ya2VkIGZyb20g
QnVpbGRlci5qcworICAgICAgICAoY29uc3QuZW1pdHRlcnMuVHlwZSk6CisgICAgICAgIChjb25z
dC5lbWl0dGVycy5JbXBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRnVuY3Rpb24pOgor
ICAgICAgICAoY29uc3QuZW1pdHRlcnMuVGFibGUpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMu
TWVtb3J5KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkdsb2JhbCk6CisgICAgICAgIChjb25z
dC5lbWl0dGVycy5FeHBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuU3RhcnQpOgorICAg
ICAgICAoY29uc3QuZW1pdHRlcnMuRWxlbWVudCk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5D
b2RlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkRhdGEpOgorICAgICAgICAoZXhwb3J0LmNv
bnN0LkJpbmFyeSk6CisgICAgICAgICogd2FzbS9Mb3dMZXZlbEJpbmFyeS5qczogQWRkIGEgZmV3
IHVzZWZ1bCBvdXRwdXRzCisgICAgICAgIChleHBvcnQuZGVmYXVsdC5Mb3dMZXZlbEJpbmFyeS5w
cm90b3R5cGUudmFydWludDEpOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTG93TGV2ZWxCaW5h
cnkucHJvdG90eXBlLnZhcmludDcpOgorICAgICAgICAqIHdhc20vV0FTTS5qczogdmFsdWUgdHlw
ZSBhbmQgZXh0ZXJuYWwga2luZCBoZWxwZXJzCisgICAgICAgICogd2FzbS9hc3NlcnQuanM6IGFy
cmF5IGVsZW1lbnQtd2lzZSBlcXVhbGl0eSBjb21wYXJpc29uCisgICAgICAgIChjb25zdC5fZXEp
OgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzOgorICAgICAgICAoTW9kdWxl
V2l0aEltcG9ydHMpOgorICAgICAgICAqIHdhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04u
anM6IG1hbnkgbW9yZSB0ZXN0cyBmb3IgYWxsIHRoZSBuZXcgQnVpbGRlciBBUElzLCBhbmQgdXBk
YXRlIHRvIHNvbWUgb2xkZXIgdGVzdHMgd2hpY2ggbm93IHJlcXVpcmUgYSBUeXBlIHNlY3Rpb24g
b3IgcmVqaWdnZXJlZCBGdW5jdGlvbiBzaWduYXR1cmUKKyAgICAgICAgKGNvbnN0LmFzc2VydE9w
VGhyb3dzKToKKyAgICAgICAgKFNlY3Rpb25zV2l0aFNhbWVDdXN0b21OYW1lKToKKyAgICAgICAg
KFR3b1R5cGVTZWN0aW9ucyk6CisgICAgICAgIChFbXB0eUltcG9ydFNlY3Rpb24pOgorICAgICAg
ICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90
ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qczogcmVtb3ZlIGEgdGVzdCB3aGljaCB3YXNuJ3QgaGVs
cGZ1bCBhbmQgaXMgbm93IG9ic29sZXRlCisgICAgICAgIChDdXN0b21TZWN0aW9uKToKKwogMjAx
Ni0xMS0wMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBz
aG91bGQgYmUgYWJsZSB0byBlbGltaW5hdGUgcmVzdCBwYXJhbWV0ZXIgYWxsb2NhdGlvbnMKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIu
anMKaW5kZXggMDU2ZDcyZC4uNjg3NDFlNCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKQEAgLTIzLDcgKzIzLDcgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotaW1wb3J0IExvd0xldmVsQmluYXJ5IGZyb20gJ0xvd0xldmVs
QmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIEJ1aWxkV2ViQXNzZW1ibHkgZnJvbSAnQnVpbGRlcl9X
ZWJBc3NlbWJseUJpbmFyeS5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOwog
CiBjb25zdCBfdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4gewpAQCAtNDMsNTEgKzQzLDEwNSBA
QCBjb25zdCBfaXNWYWxpZFZhbHVlID0gKHZhbHVlLCB0eXBlKSA9PiB7CiB9OwogY29uc3QgX3Vu
a25vd25TZWN0aW9uSWQgPSAwOwogCi1jb25zdCBfQnVpbGRXZWJBc3NlbWJseUJpbmFyeSA9IChw
cmVhbWJsZSwgc2VjdGlvbnMpID0+IHsKLSAgICBsZXQgd2FzbUJpbiA9IG5ldyBMb3dMZXZlbEJp
bmFyeSgpOwotICAgIGNvbnN0IHB1dCA9IChiaW4sIHR5cGUsIHZhbHVlKSA9PiBiaW5bdHlwZV0o
dmFsdWUpOwotICAgIGZvciAoY29uc3QgcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnByZWFtYmxlKQot
ICAgICAgICBwdXQod2FzbUJpbiwgcC50eXBlLCBwcmVhbWJsZVtwLm5hbWVdKTsKLSAgICBmb3Ig
KGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHsKLSAgICAgICAgcHV0KHdhc21CaW4sIFdBU00u
c2VjdGlvbkVuY29kaW5nVHlwZSwgc2VjdGlvbi5pZCk7Ci0gICAgICAgIGxldCBzZWN0aW9uQmlu
ID0gd2FzbUJpbi5uZXdQYXRjaGFibGUoInZhcnVpbnQiKTsKLSAgICAgICAgc3dpdGNoIChzZWN0
aW9uLm5hbWUpIHsKLSAgICAgICAgY2FzZSAiVHlwZSI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2Ug
IkltcG9ydCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIk
e3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIkZ1bmN0aW9uIjogdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAg
ICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rp
b24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJNZW1vcnkiOiB0aHJv
dyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9
ImApOwotICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50
ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJFeHBv
cnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0
aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJTdGFydCI6IHRocm93IG5ldyBFcnJvcihgVW5p
bXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNh
c2UgIkVsZW1lbnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlw
ZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJDb2RlIjoKLSAgICAgICAgICAg
IGNvbnN0IG51bWJlck9mRnVuY3Rpb25Cb2RpZXMgPSBzZWN0aW9uLmRhdGEubGVuZ3RoOwotICAg
ICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJ2YXJ1aW50IiwgbnVtYmVyT2ZGdW5jdGlvbkJvZGll
cyk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGZ1bmMgb2Ygc2VjdGlvbi5kYXRhKSB7Ci0gICAg
ICAgICAgICAgICAgbGV0IGZ1bmNCaW4gPSBzZWN0aW9uQmluLm5ld1BhdGNoYWJsZSgidmFydWlu
dCIpOwotICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsQ291bnQgPSBmdW5jLmxvY2Fscy5sZW5n
dGg7Ci0gICAgICAgICAgICAgICAgcHV0KGZ1bmNCaW4sICJ2YXJ1aW50IiwgbG9jYWxDb3VudCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsQ291bnQgIT09IDApIHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogbG9jYWxzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wIG9m
IGZ1bmMuY29kZSkgewotICAgICAgICAgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInVpbnQ4Iiwg
b3AudmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAob3AuYXJndW1lbnRzLmxlbmd0aCAh
PT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBhcmd1bWVudHNgKTsgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjcwNgotICAgICAg
ICAgICAgICAgICAgICBpZiAob3AuaW1tZWRpYXRlcy5sZW5ndGggIT09IDApIHRocm93IG5ldyBF
cnJvcihgVW5pbXBsZW1lbnRlZDogaW1tZWRpYXRlc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzA2Citjb25zdCBfbm9ybWFsaXplRnVuY3Rp
b25TaWduYXR1cmUgPSAocGFyYW1zLCByZXQpID0+IHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXko
cGFyYW1zKSkgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBhIHBhcmFtZXRlciBhcnJheSwgZ290
ICIke3BhcmFtc30iYCk7CisgICAgZm9yIChjb25zdCBwIG9mIHBhcmFtcykgaWYgKCFXQVNNLmlz
VmFsaWRWYWx1ZVR5cGUocCkpIHRocm93IG5ldyBFcnJvcihgVHlwZSBwYXJhbWV0ZXIgJHtwfSBp
c24ndCBhIHZhbGlkIHZhbHVlIHR5cGVgKTsKKyAgICBpZiAodHlwZW9mKHJldCkgPT09ICJ1bmRl
ZmluZWQiKSByZXQgPSAidm9pZCI7CisgICAgaWYgKEFycmF5LmlzQXJyYXkocmV0KSkgdGhyb3cg
bmV3IEVycm9yKGBNdWx0aXBsZSByZXR1cm4gdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgYnkgV2Vi
QXNzZW1ibHkgeWV0YCk7CisgICAgaWYgKHJldCAhPT0gInZvaWQiICYmICFXQVNNLmlzVmFsaWRW
YWx1ZVR5cGUocmV0KSkgdGhyb3cgbmV3IEVycm9yKGBUeXBlIHJldHVybiAke3JldH0gaXNuJ3Qg
YSB2YWxpZCB2YWx1ZSB0eXBlYCk7CisgICAgcmV0dXJuIFtwYXJhbXMsIHJldF07Cit9OworCitj
b25zdCBfbWF5YmVSZWdpc3RlclR5cGUgPSAoYnVpbGRlciwgdHlwZSkgPT4geworICAgIGNvbnN0
IHR5cGVTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiVHlwZSIpOworICAgIGlmICh0eXBl
b2YodHlwZSkgPT09ICJudW1iZXIiKSB7CisgICAgICAgIC8vIFR5cGUgbnVtYmVycyBhbHJlYWR5
IHJlZmVyIHRvIHRoZSB0eXBlIHNlY3Rpb24sIG5vIG5lZWQgdG8gcmVnaXN0ZXIgdGhlbS4KKyAg
ICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YodHlw
ZVNlY3Rpb24pID09PSAidW5kZWZpbmVkIikgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCB1c2UgdHlw
ZSAke3R5cGV9IGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2YodHlwZVNlY3Rpb24uZGF0YVt0eXBlXSkgPT09ICJ1bmRlZmluZWQiKSB0aHJv
dyBuZXcgRXJyb3IoYFR5cGUgJHt0eXBlfSBkb2Vzbid0IGV4aXN0IGluIHR5cGUgc2VjdGlvbmAp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKyAgICBpZiAodHlwZW9m
KHR5cGUpICE9PSAib2JqZWN0IiB8fCB0eXBlb2YodHlwZS5wYXJhbXMpID09PSAidW5kZWZpbmVk
IikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0eXBlIHRvIGJlIGEgbnVtYmVyIG9yIG9iamVj
dCB3aXRoICdwYXJhbXMnIGFuZCBvcHRpb25hbGx5ICdyZXQnIGZpZWxkc2ApOworICAgIGNvbnN0
IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUodHlwZS5wYXJhbXMs
IHR5cGUucmV0KTsKKyAgICBpZiAodHlwZW9mKHR5cGVTZWN0aW9uKSA9PT0gInVuZGVmaW5lZCIp
IHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgYWRkIHR5cGUgaWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3Qg
cHJlc2VudGApOworICAgIC8vIFRyeSByZXVzaW5nIGFuIGVxdWl2YWxlbnQgdHlwZSBmcm9tIHRo
ZSB0eXBlIHNlY3Rpb24uCisgICAgdHlwZXM6CisgICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IHR5
cGVTZWN0aW9uLmRhdGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29uc3QgdCA9IHR5cGVTZWN0
aW9uLmRhdGFbaV07CisgICAgICAgIGlmICh0LnJldCA9PT0gcmV0ICYmIHBhcmFtcy5sZW5ndGgg
PT09IHQucGFyYW1zLmxlbmd0aCkgeworICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogIT09
IHQucGFyYW1zLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbal0gIT09
IHQucGFyYW1zW2pdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0eXBlczsKKyAgICAg
ICAgICAgIHR5cGUgPSBpOworICAgICAgICAgICAgYnJlYWsgdHlwZXM7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKHR5cGVvZih0eXBlKSAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgLy8gQ291
bGRuJ3QgcmV1c2UgYSBwcmUtZXhpc3RpbmcgdHlwZSwgcmVnaXN0ZXIgdGhpcyB0eXBlIGluIHRo
ZSB0eXBlIHNlY3Rpb24uCisgICAgICAgIHR5cGVTZWN0aW9uLmRhdGEucHVzaCh7IHBhcmFtczog
cGFyYW1zLCByZXQ6IHJldCB9KTsKKyAgICAgICAgdHlwZSA9IHR5cGVTZWN0aW9uLmRhdGEubGVu
Z3RoIC0gMTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGU7Cit9OworCitjb25zdCBfaW1wb3J0RnVu
Y3Rpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsK
KyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+IHsKKyAgICAgICAgaWYgKHR5cGVv
Zihtb2R1bGUpICE9PSAic3RyaW5nIikgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgZnVuY3Rpb24g
bW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21vZHVsZX0iYCk7CisgICAgICAgIGlm
ICh0eXBlb2YoZmllbGQpICE9PSAic3RyaW5nIikgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgZnVu
Y3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAg
ICBjb25zdCB0eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICAg
ICAgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsKKyAgICAgICAgc2Vj
dGlvbi5kYXRhLnB1c2goeyBmaWVsZDogZmllbGQsIHR5cGU6IHR5cGUsIGtpbmQ6ICJGdW5jdGlv
biIsIG1vZHVsZTogbW9kdWxlIH0pOworICAgICAgICAvLyBJbXBvcnRzIGFsc28gY291bnQgaW4g
dGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlLiBNYXAgdGhlbSBhcyBvYmplY3RzIHRvIGF2b2lkIGNs
YXNoaW5nIHdpdGggQ29kZSBmdW5jdGlvbnMnIG5hbWVzLgorICAgICAgICBidWlsZGVyLl9yZWdp
c3RlckZ1bmN0aW9uVG9JbmRleFNwYWNlKHsgbW9kdWxlOiBtb2R1bGUsIGZpZWxkOiBmaWVsZCB9
KTsKKyAgICAgICAgcmV0dXJuIG5leHRCdWlsZGVyOworICAgIH07Cit9OworCitjb25zdCBfZXhw
b3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIp
ID0+IHsKKyAgICByZXR1cm4gKGZpZWxkLCBpbmRleCwgdHlwZSkgPT4geworICAgICAgICBpZiAo
dHlwZW9mKGZpZWxkKSAhPT0gInN0cmluZyIpIHRocm93IG5ldyBFcnJvcihgRXhwb3J0IGZ1bmN0
aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAg
Y29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAgICAg
IGlmICh0eXBlb2YodHlwZSkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBFeHBv
cnRzIGNhbiBsZWF2ZSB0aGUgdHlwZSB1bnNwZWNpZmllZCwgbGV0dGluZyB0aGUgQ29kZSBidWls
ZGVyIHBhdGNoIHRoZW0gdXAgbGF0ZXIuCisgICAgICAgICAgICB0eXBlID0gX21heWJlUmVnaXN0
ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGNo
ZWNrIG11Y2ggYWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhlIENvZGUgc2VjdGlvbiBzdWNj
ZWVkcyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBkb25lIGF0IENvZGUoKS5FbmQo
KSB0aW1lLgorICAgICAgICBzd2l0Y2ggKHR5cGVvZihpbmRleCkpIHsKKyAgICAgICAgY2FzZSAi
c3RyaW5nIjogYnJlYWs7IC8vIEFzc3VtZSBpdCdzIGEgZnVuY3Rpb24gbmFtZSB3aGljaCB3aWxs
IGJlIHJldmVhbGVkIGluIHRoZSBDb2RlIHNlY3Rpb24uCisgICAgICAgIGNhc2UgIm51bWJlciI6
IGJyZWFrOyAvLyBBc3N1bWUgaXQncyBhIG51bWJlciBpbiB0aGUgImZ1bmN0aW9uIGluZGV4IHNw
YWNlIi4KKyAgICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgICAgIC8vIFJlLWV4cG9ydGlu
ZyBhbiBpbXBvcnQuCisgICAgICAgICAgICBpZiAodHlwZW9mKGluZGV4Lm1vZHVsZSkgPT09ICJ1
bmRlZmluZWQiIHx8IHR5cGVvZihpbmRleC5maWVsZCkgPT09ICJ1bmRlZmluZWQiKSB0aHJvdyBu
ZXcgRXJyb3IoYFJlLWV4cG9ydGluZyAiJHtmaWVsZH0iIGZyb20gYW4gaW1wb3J0IHJlcXVpcmVz
IGFuIG9iamVjdCB3aXRoIG1vZHVsZSBhbmQgZmllbGRgKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJ1bmRlZmluZWQiOiBpbmRleCA9IGZpZWxkOyBicmVhazsgLy8gQXNzdW1l
IGl0J3MgdGhlIHNhbWUgYXMgdGhlIGZpZWxkIChpLmUuIGl0J3Mgbm90IGJlaW5nIHJlbmFtZWQp
LgorICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBzZWN0aW9uJ3MgaW5k
ZXggbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgZ290ICR7aW5kZXh9YCk7CisgICAgICAg
IH0KKyAgICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0ltcG9ydCA9IGJ1aWxkZXIuX2dldEZ1bmN0
aW9uRnJvbUluZGV4U3BhY2UoaW5kZXgpOworICAgICAgICBjb25zdCBpbXBvcnRTZWN0aW9uID0g
YnVpbGRlci5fZ2V0U2VjdGlvbigiSW1wb3J0Iik7CisgICAgICAgIGlmICh0eXBlb2YoaW5kZXgp
ID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgLy8gUmUtZXhwb3J0aW5nIGFuIGltcG9ydCB1
c2luZyBpdHMgbW9kdWxlK2ZpZWxkIG5hbWUuCisgICAgICAgICAgICBpZiAodHlwZW9mKGNvcnJl
c3BvbmRpbmdJbXBvcnQpID09PSAidW5kZWZpbmVkIikgdGhyb3cgbmV3IEVycm9yKGBSZS1leHBv
cnRpbmcgIiR7ZmllbGR9IiBjb3VsZG4ndCBmaW5kIGltcG9ydCBmcm9tIG1vZHVsZSAiJHtpbmRl
eC5tb2R1bGV9IiBmaWVsZCAiJHtpbmRleC5maWVsZH0iYCk7CisgICAgICAgICAgICBpbmRleCA9
IGNvcnJlc3BvbmRpbmdJbXBvcnQ7CisgICAgICAgICAgICBpZiAodHlwZW9mKHR5cGUpID09PSAi
dW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICB0eXBlID0gaW1wb3J0U2VjdGlvbi5kYXRhW2lu
ZGV4XS50eXBlOworICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQgJiYgdHlwZSAhPT0g
aW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS50eXBlKSB0aHJvdyBuZXcgRXJyb3IoYFJlLWV4cG9y
dGluZyBpbXBvcnQgIiR7aW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS5maWVsZH0iIGFzICIke2Zp
ZWxkfSIgaGFzIG1pc21hdGNoaW5nIHR5cGVgKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yo
Y29ycmVzcG9uZGluZ0ltcG9ydCkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBS
ZS1leHBvcnRpbmcgYW4gaW1wb3J0IHVzaW5nIGl0cyBpbmRleC4KKyAgICAgICAgICAgIGxldCBl
eHBvcnRlZEltcG9ydDsKKyAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpbXBvcnRTZWN0aW9u
LmRhdGEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaS5tb2R1bGUgPT09IGNvcnJlc3BvbmRpbmdJ
bXBvcnQubW9kdWxlICYmIGkuZmllbGQgPT09IGNvcnJlc3BvbmRpbmdJbXBvcnQuZmllbGQpIHsK
KyAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRJbXBvcnQgPSBpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnVuY0Jpbi5h
cHBseSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
IkRhdGEiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtz
ZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHNlY3Rp
b24uaWQgIT09IF91bmtub3duU2VjdGlvbklkKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2Vj
dGlvbiAiJHtzZWN0aW9uLm5hbWV9IiB3aXRoIG51bWJlciAke3NlY3Rpb24uaWR9YCk7Ci0gICAg
ICAgICAgICBwdXQoc2VjdGlvbkJpbiwgInN0cmluZyIsIHNlY3Rpb24ubmFtZSk7Ci0gICAgICAg
ICAgICBmb3IgKGNvbnN0IGJ5dGUgb2Ygc2VjdGlvbi5kYXRhKQotICAgICAgICAgICAgICAgIHB1
dChzZWN0aW9uQmluLCAidWludDgiLCBieXRlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKHR5cGVvZih0eXBlKSA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICAgICAg
dHlwZSA9IGV4cG9ydGVkSW1wb3J0LnR5cGU7CisgICAgICAgICAgICBpZiAoYnVpbGRlci5fY2hl
Y2tlZCAmJiB0eXBlICE9PSBleHBvcnRlZEltcG9ydC50eXBlKSB0aHJvdyBuZXcgRXJyb3IoYFJl
LWV4cG9ydGluZyBpbXBvcnQgIiR7ZXhwb3J0ZWRJbXBvcnQuZmllbGR9IiBhcyAiJHtmaWVsZH0i
IGhhcyBtaXNtYXRjaGluZyB0eXBlYCk7CiAgICAgICAgIH0KLSAgICAgICAgc2VjdGlvbkJpbi5h
cHBseSgpOwotICAgIH0KLSAgICByZXR1cm4gd2FzbUJpbjsKKyAgICAgICAgc2VjdGlvbi5kYXRh
LnB1c2goeyBmaWVsZDogZmllbGQsIHR5cGU6IHR5cGUsIGtpbmQ6ICJGdW5jdGlvbiIsIGluZGV4
OiBpbmRleCB9KTsKKyAgICAgICAgcmV0dXJuIG5leHRCdWlsZGVyOworICAgIH07CiB9OwogCiBl
eHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKQEAgLTk4LDYgKzE1Miw4IEBAIGV4cG9ydCBk
ZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgcHJlYW1ibGVbcC5uYW1lXSA9IHAu
dmFsdWU7CiAgICAgICAgIHRoaXMuc2V0UHJlYW1ibGUocHJlYW1ibGUpOwogICAgICAgICB0aGlz
Ll9zZWN0aW9ucyA9IFtdOworICAgICAgICB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2UgPSB7fTsK
KyAgICAgICAgdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlQ291bnQgPSAwOwogICAgICAgICB0aGlz
Ll9yZWdpc3RlclNlY3Rpb25CdWlsZGVycygpOwogICAgIH0KICAgICBzZXRDaGVja2VkKGNoZWNr
ZWQpIHsKQEAgLTEwOCwyNSArMTY0LDExNCBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVy
IHsKICAgICAgICAgdGhpcy5fcHJlYW1ibGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX3ByZWFtYmxl
IHx8IHt9LCBwKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQorICAgIF9yZWdpc3RlckZ1
bmN0aW9uVG9JbmRleFNwYWNlKG5hbWUpIHsKKyAgICAgICAgLy8gQ29sbGlzaW9ucyBhcmUgZmlu
ZTogd2UnbGwgc2ltcGx5IGNvdW50IHRoZSBmdW5jdGlvbiBhbmQgZm9yZ2V0IHRoZSBwcmV2aW91
cyBvbmUuCisgICAgICAgIHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZVtuYW1lXSA9IHRoaXMuX2Z1
bmN0aW9uSW5kZXhTcGFjZUNvdW50Kys7CisgICAgICAgIC8vIE1hcCBpdCBib3RoIHdheXMsIHRo
ZSBudW1iZXIgc3BhY2UgaXMgZGlzdGluY3QgZnJvbSB0aGUgbmFtZSBzcGFjZS4KKyAgICAgICAg
dGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlW3RoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZVtuYW1lXV0g
PSBuYW1lOworICAgIH0KKyAgICBfZ2V0RnVuY3Rpb25Gcm9tSW5kZXhTcGFjZShuYW1lKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2VbbmFtZV07CisgICAgfQogICAg
IF9yZWdpc3RlclNlY3Rpb25CdWlsZGVycygpIHsKICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9u
IGluIFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbikgewogICAgICAgICAgICAgc3dpdGNoIChzZWN0
aW9uKSB7CisgICAgICAgICAgICBjYXNlICJUeXBlIjoKKyAgICAgICAgICAgICAgICB0aGlzW3Nl
Y3Rpb25dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlz
Ll9hZGRTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZGVy
ID0gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZUJ1aWxkZXIgPSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IGJ1aWxkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBGdW5jOiAocGFyYW1zLCByZXQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbcGFyYW1zLCByZXRdID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHBhcmFtcywg
cmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaCh7IHBhcmFtczog
cGFyYW1zLCByZXQ6IHJldCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZUJ1aWxkZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUJ1aWxkZXI7CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIklt
cG9ydCI6CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW1wb3J0QnVpbGRlciA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxl
OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0IHRhYmxlYCk7
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnk6ICgpID0+IHsgdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgbWVtb3J5YCk7IH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICBHbG9iYWw6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBp
bXBvcnQgZ2xvYmFsYCk7IH0sCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgIGltcG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRp
b24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
bXBvcnRCdWlsZGVyOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlICJFeHBvcnQiOgorICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlv
bl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2Fk
ZFNlY3Rpb24oc2VjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydEJ1aWxk
ZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICBUYWJsZTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVt
ZW50ZWQ6IGV4cG9ydCB0YWJsZWApOyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5
OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogZXhwb3J0IG1lbW9yeWAp
OyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsOiAoKSA9PiB7IHRocm93IG5ldyBF
cnJvcihgVW5pbXBsZW1lbnRlZDogZXhwb3J0IGdsb2JhbGApOyB9LAorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2V4
cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0QnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiQ29kZSI6CiAgICAgICAg
ICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYnVpbGRlciA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVC
dWlsZGVyID0gIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gYnVpbGRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiBwYXJhbWV0ZXJzID0+IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkUGFyYW1ldGVyVHlwZXMgPSBw
YXJhbWV0ZXJzLmZpbHRlcihwID0+ICFXQVNNLmlzVmFsaWRWYWx1ZVR5cGUocCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnZhbGlkUGFyYW1ldGVyVHlwZXMubGVuZ3RoICE9
PSAwKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIGRlY2xhcmVkIHdpdGggcGFyYW1ldGVycyBb
JHtwYXJhbWV0ZXJzfV0sIGludmFsaWQ6IFske2ludmFsaWRQYXJhbWV0ZXJUeXBlc31dYCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBub3cgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcmVtYXAgdGhlIGV4
cG9ydCBzZWN0aW9uJ3MgInR5cGUiIGFuZCAiaW5kZXgiIGFjY29yZGluZyB0byB0aGUgQ29kZSBz
ZWN0aW9uIHdlJ3JlIGN1cnJlbnRseSBlbmRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1wb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dl
dFNlY3Rpb24oIkltcG9ydCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4
cG9ydFNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJFeHBvcnQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjb2RlU2VjdGlvbiA9IHM7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4cG9ydFNlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBlIG9mIGV4cG9ydFNlY3Rpb24uZGF0YSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YoZS5pbmRleCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJv
cihgVW5leHBlY3RlZCBleHBvcnQgaW5kZXggIiR7ZS5pbmRleH0iYCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJpbmciOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBidWlsZGVyLl9nZXRGdW5jdGlv
bkZyb21JbmRleFNwYWNlKGUuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlb2YoaW5kZXgpICE9PSAibnVtYmVyIikgdGhyb3cgbmV3IEVycm9y
KGBFeHBvcnQgc2VjdGlvbiBjb250YWlucyB1bmRlZmluZWQgZnVuY3Rpb24gIiR7ZS5pbmRleH0i
YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pbmRleCA9IGlu
ZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBGYWxsdGhyb3Vn
aC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIm51bWJlciI6IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGJ1
aWxkZXIuX2dldEZ1bmN0aW9uRnJvbUluZGV4U3BhY2UoZS5pbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQgJiYgaW5kZXgg
PT09ICJ1bmRlZmluZWQiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCAiJHtlLmZpZWxkfSIgZG9l
c24ndCBjb3JyZXNwb25kIHRvIGEgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Vg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1l
bnRlZDogRnVuY3Rpb24oKS5FbmQoKSB3aXRoIHVuZGVmaW5lZCBleHBvcnQgaW5kZXhgKTsgLy8g
RklYTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoZS50eXBlKSA9PT0gInVuZGVmaW5l
ZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG11
c3QgYmUgYSBmdW5jdGlvbiBleHBvcnQgZnJvbSB0aGUgQ29kZSBzZWN0aW9uIChyZS1leHBvcnRz
IHdlcmUgaGFuZGxlZCBlYXJsaWVyKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4U3BhY2VPZmZzZXQgPSBpbXBvcnRTZWN0aW9uID8g
aW1wb3J0U2VjdGlvbi5kYXRhLmxlbmd0aCA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25JbmRleCA9IGUuaW5kZXggLSBmdW5jdGlvbklu
ZGV4U3BhY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZS50eXBlID0gY29kZVNlY3Rpb24uZGF0YVtmdW5jdGlvbkluZGV4XS50eXBlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBidWlsZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiAoYTAsIGExKSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHR5cGVvZihhMCkgPT09ICJzdHJpbmci
ID8gYTEgOiBhMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5h
bWUgPSB0eXBlb2YoYTApID09PSAic3RyaW5nIiA/IGEwIDogdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0dXJlKSA9PT0gInVuZGVmaW5lZCIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBb
XSB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0dXJlKSAh
PT0gIm9iamVjdCIgfHwgdHlwZW9mKHNpZ25hdHVyZS5wYXJhbXMpID09PSAidW5kZWZpbmVkIikg
dGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIGJlIGFuIG9iamVj
dCB3aXRoIGEgInBhcmFtcyIgZmllbGQsIGdvdCAiJHtzaWduYXR1cmV9ImApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rp
b25TaWduYXR1cmUoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJlLnJldCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0geyBwYXJhbXM6IHBhcmFtcywgcmV0OiByZXQg
fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jID0gewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHBhcmFtZXRlcnMsIC8vIFBhcmFtZXRlcnMg
YXJlIHRoZSBmaXJzdCBsb2NhbHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtZXRlckNvdW50OiBwYXJhbWV0ZXJzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogZnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBfbWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgc2lnbmF0dXJlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsczogcGFyYW1zLCAvLyBQYXJhbWV0ZXJzIGFy
ZSB0aGUgZmlyc3QgbG9jYWxzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJDb3VudDogcGFyYW1zLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZTogW10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuX3JlZ2lzdGVyRnVuY3Rpb25Ub0luZGV4U3BhY2UoZnVuY3Rpb25OYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25CdWlsZGVyID0ge307
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcCBpbiBXQVNNLmRlc2Ny
aXB0aW9uLm9wY29kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
YW1lID0gX3RvSmF2YVNjcmlwdE5hbWUob3ApOwpAQCAtMjM0LDEwICszNzksNDEgQEAgZXhwb3J0
IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgX2FkZFNlY3Rpb24obmFtZU9yTnVtYmVyLCBl
eHRyYU9iamVjdCkgewogICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mKG5hbWVPck51bWJlcikg
PT09ICJzdHJpbmciID8gbmFtZU9yTnVtYmVyIDogIiI7CiAgICAgICAgIGNvbnN0IG51bWJlciA9
IHR5cGVvZihuYW1lT3JOdW1iZXIpID09PSAibnVtYmVyIiA/IG5hbWVPck51bWJlciA6IChXQVNN
LmRlc2NyaXB0aW9uLnNlY3Rpb25bbmFtZV0gPyBXQVNNLmRlc2NyaXB0aW9uLnNlY3Rpb25bbmFt
ZV0udmFsdWUgOiBfdW5rbm93blNlY3Rpb25JZCk7CisgICAgICAgIGlmICh0aGlzLl9jaGVja2Vk
KSB7CisgICAgICAgICAgICAvLyBDaGVjayB1bmlxdWVuZXNzLgorICAgICAgICAgICAgZm9yIChj
b25zdCBzIG9mIHRoaXMuX3NlY3Rpb25zKQorICAgICAgICAgICAgICAgIGlmIChzLm5hbWUgPT09
IG5hbWUgJiYgcy5pZCA9PT0gbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYENhbm5vdCBoYXZlIHRvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSAiJHtuYW1l
fSIgYW5kIElEICR7bnVtYmVyfWApOworICAgICAgICAgICAgLy8gQ2hlY2sgb3JkZXJpbmcuCisg
ICAgICAgICAgICBpZiAoKG51bWJlciAhPT0gX3Vua25vd25TZWN0aW9uSWQpICYmICh0aGlzLl9z
ZWN0aW9ucy5sZW5ndGggIT09IDApKSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRo
aXMuX3NlY3Rpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9zZWN0aW9uc1tpXS5pZCA9PT0gX3Vua25vd25TZWN0aW9uSWQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3NlY3Rpb25zW2ldLmlkID4gbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKGBCYWQgc2VjdGlvbiBvcmRlcmluZzogIiR7dGhpcy5fc2VjdGlvbnNbaV0u
bmFtZX0iIGNhbm5vdCBwcmVjZWRlICIke25hbWV9ImApOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAg
ICAgY29uc3QgcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lOiBuYW1lLCBpZDogbnVtYmVyLCBkYXRh
OiBbXSB9LCBleHRyYU9iamVjdCB8fCB7fSk7CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zLnB1c2go
cyk7CiAgICAgICAgIHJldHVybiBzOwogICAgIH0KKyAgICBfZ2V0U2VjdGlvbihuYW1lT3JOdW1i
ZXIpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlb2YobmFtZU9yTnVtYmVyKSkgeworICAgICAgICBk
ZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IGNhbid0IGdl
dCBzZWN0aW9uICIke25hbWVPck51bWJlcn0iYCk7CisgICAgICAgIGNhc2UgInN0cmluZyI6Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCisgICAgICAgICAgICAg
ICAgaWYgKHMubmFtZSA9PT0gbmFtZU9yTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gczsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIGNhc2UgIm51bWJl
ciI6CisgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCisgICAgICAg
ICAgICAgICAgaWYgKHMuaWQgPT09IG5hbWVPck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHM7CisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAg
fQogICAgIG9wdGltaXplKCkgewogICAgICAgICAvLyBGSVhNRSBBZGQgbW9yZSBvcHRpbWl6YXRp
b25zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDI0CiAgICAg
ICAgIHJldHVybiB0aGlzOwpAQCAtMjU0LDUgKzQzMCw1IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAvLyBGSVhNRSBDcmVhdGUgYW4gYXNtLmpzIGVxdWl2YWxlbnQg
c3RyaW5nIHdoaWNoIGNhbiBiZSBldmFsJ2QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM0MjUKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhc20uanMgbm90IGlt
cGxlbWVudGVkIHlldCIpOwogICAgIH0KLSAgICBXZWJBc3NlbWJseSgpIHsgcmV0dXJuIF9CdWls
ZFdlYkFzc2VtYmx5QmluYXJ5KHRoaXMuX3ByZWFtYmxlLCB0aGlzLl9zZWN0aW9ucyk7IH0KKyAg
ICBXZWJBc3NlbWJseSgpIHsgcmV0dXJuIEJ1aWxkV2ViQXNzZW1ibHkuQmluYXJ5KHRoaXMuX3By
ZWFtYmxlLCB0aGlzLl9zZWN0aW9ucyk7IH0KIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
QnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFz
c2VtYmx5QmluYXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjBh
NTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJp
bmFyeS5qcwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2ltcG9ydCBMb3dMZXZlbEJpbmFyeSBmcm9tICdMb3dMZXZlbEJpbmFy
eS5qcyc7CitpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOworCitjb25zdCBwdXQgPSAo
YmluLCB0eXBlLCB2YWx1ZSkgPT4gYmluW3R5cGVdKHZhbHVlKTsKKworY29uc3QgZW1pdHRlcnMg
PSB7CisgICAgVHlwZTogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFy
dWludCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9m
IHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgY29uc3QgZnVuY1R5cGVDb25zdHJ1Y3RvciA9
IC0weDIwOyAvLyBGSVhNRSBNb3ZlIHRoaXMgdG8gd2FzbS5qc29uLgorICAgICAgICAgICAgcHV0
KGJpbiwgInZhcmludDciLCBmdW5jVHlwZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgIHB1dChi
aW4sICJ2YXJ1aW50IiwgZW50cnkucGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGNv
bnN0IHBhcmFtIG9mIGVudHJ5LnBhcmFtcykKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidWlu
dDgiLCBXQVNNLnZhbHVlVHlwZVZhbHVlW3BhcmFtXSk7CisgICAgICAgICAgICBpZiAoZW50cnku
cmV0ID09PSAidm9pZCIpCisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQxIiwgMCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDEi
LCAxKTsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLnZhbHVlVHlwZVZh
bHVlW2VudHJ5LnJldF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICBJ
bXBvcnQ6IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQiLCBz
ZWN0aW9uLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBzZWN0aW9u
LmRhdGEpIHsKKyAgICAgICAgICAgIHB1dChiaW4sICJzdHJpbmciLCBlbnRyeS5tb2R1bGUpOwor
ICAgICAgICAgICAgcHV0KGJpbiwgInN0cmluZyIsIGVudHJ5LmZpZWxkKTsKKyAgICAgICAgICAg
IHB1dChiaW4sICJ1aW50OCIsIFdBU00uZXh0ZXJuYWxLaW5kVmFsdWVbZW50cnkua2luZF0pOwor
ICAgICAgICAgICAgc3dpdGNoIChlbnRyeS5raW5kKSB7CisgICAgICAgICAgICBkZWZhdWx0OiB0
aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVuZXhwZWN0ZWQga2luZCAk
e2VudHJ5LmtpbmR9YCk7CisgICAgICAgICAgICBjYXNlICJGdW5jdGlvbiI6IHB1dChiaW4sICJ2
YXJ1aW50IiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAiVGFibGUiOiB0
aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKKyAgICAgICAgICAgIGNhc2Ug
Ik1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOworICAgICAg
ICAgICAgY2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVk
YCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorICAgIEZ1bmN0aW9uOiAoc2Vj
dGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9
LAorICAgIFRhYmxlOiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOyB9LAorICAgIE1lbW9yeTogKHNlY3Rpb24sIGJpbikgPT4geyB0aHJv
dyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBHbG9iYWw6IChzZWN0
aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0s
CisgICAgRXhwb3J0OiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOyB9LAorICAgIFN0YXJ0OiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93
IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIEVsZW1lbnQ6IChzZWN0
aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0s
CisgICAgQ29kZTogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFydWlu
dCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGZ1bmMgb2Ygc2Vj
dGlvbi5kYXRhKSB7CisgICAgICAgICAgICBsZXQgZnVuY0JpbiA9IGJpbi5uZXdQYXRjaGFibGUo
InZhcnVpbnQiKTsKKyAgICAgICAgICAgIGNvbnN0IGxvY2FsQ291bnQgPSBmdW5jLmxvY2Fscy5s
ZW5ndGg7CisgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInZhcnVpbnQiLCBsb2NhbENvdW50KTsK
KyAgICAgICAgICAgIGlmIChsb2NhbENvdW50ICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYFVuaW1w
bGVtZW50ZWQ6IGxvY2Fsc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNzA2CisgICAgICAgICAgICBmb3IgKGNvbnN0IG9wIG9mIGZ1bmMuY29k
ZSkgeworICAgICAgICAgICAgICAgIHB1dChmdW5jQmluLCAidWludDgiLCBvcC52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wLmFyZ3VtZW50cy5sZW5ndGggIT09IDApIHRocm93IG5ldyBF
cnJvcihgVW5pbXBsZW1lbnRlZDogYXJndW1lbnRzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKKyAgICAgICAgICAgICAgICBpZiAob3Au
aW1tZWRpYXRlcy5sZW5ndGggIT09IDApIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDog
aW1tZWRpYXRlc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyNzA2CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmdW5jQmluLmFwcGx5KCk7
CisgICAgICAgIH0KKyAgICB9LAorICAgIERhdGE6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cg
bmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCit9OworCitleHBvcnQgY29uc3Qg
QmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9ucykgPT4geworICAgIGxldCB3YXNtQmluID0gbmV3
IExvd0xldmVsQmluYXJ5KCk7CisgICAgZm9yIChjb25zdCBwIG9mIFdBU00uZGVzY3JpcHRpb24u
cHJlYW1ibGUpCisgICAgICAgIHB1dCh3YXNtQmluLCBwLnR5cGUsIHByZWFtYmxlW3AubmFtZV0p
OworICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykgeworICAgICAgICBwdXQod2Fz
bUJpbiwgV0FTTS5zZWN0aW9uRW5jb2RpbmdUeXBlLCBzZWN0aW9uLmlkKTsKKyAgICAgICAgbGV0
IHNlY3Rpb25CaW4gPSB3YXNtQmluLm5ld1BhdGNoYWJsZSgidmFydWludCIpOworICAgICAgICBj
b25zdCBlbWl0dGVyID0gZW1pdHRlcnNbc2VjdGlvbi5uYW1lXTsKKyAgICAgICAgaWYgKGVtaXR0
ZXIpCisgICAgICAgICAgICBlbWl0dGVyKHNlY3Rpb24sIHNlY3Rpb25CaW4pOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFVua25vd24gc2VjdGlvbi4KKyAgICAgICAgICAgIHB1dChz
ZWN0aW9uQmluLCAic3RyaW5nIiwgc2VjdGlvbi5uYW1lKTsKKyAgICAgICAgICAgIGZvciAoY29u
c3QgYnl0ZSBvZiBzZWN0aW9uLmRhdGEpCisgICAgICAgICAgICAgICAgcHV0KHNlY3Rpb25CaW4s
ICJ1aW50OCIsIGJ5dGUpOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb25CaW4uYXBwbHkoKTsK
KyAgICB9CisgICAgcmV0dXJuIHdhc21CaW47Cit9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L0xvd0xldmVsQmluYXJ5LmpzIGIvSlNUZXN0cy93YXNtL0xvd0xldmVsQmluYXJ5LmpzCmluZGV4
IDBhODMzYzEuLjcyMDA5NzYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9Mb3dMZXZlbEJpbmFy
eS5qcworKysgYi9KU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMKQEAgLTI3LDYgKzI3LDgg
QEAgY29uc3QgX2luaXRpYWxBbGxvY2F0aW9uU2l6ZSA9IDEwMjQ7CiBjb25zdCBfZ3Jvd0FsbG9j
YXRpb25TaXplID0gYWxsb2NhdGVkID0+IGFsbG9jYXRlZCAqIDI7CiAKIGV4cG9ydCBjb25zdCB2
YXJ1aW50TWluID0gMDsKK2V4cG9ydCBjb25zdCB2YXJpbnQ3TWluID0gLTBiMTAwMDAwMDsKK2V4
cG9ydCBjb25zdCB2YXJpbnQ3TWF4ID0gMGIxMTExMTE7CiBleHBvcnQgY29uc3QgdmFydWludDdN
YXggPSAwYjExMTExMTE7CiBleHBvcnQgY29uc3QgdmFydWludE1heCA9ICgoKCgxIDw8IDMxKSA+
Pj4gMCkgLSAxKSAqIDIpICsgMTsKIGV4cG9ydCBjb25zdCB2YXJpbnRNaW4gPSAtKCgxIDw8IDMx
KSA+Pj4gMCk7CkBAIC0xMjksNiArMTMxLDE2IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIExvd0xl
dmVsQmluYXJ5IHsKICAgICAgICAgICAgIHRoaXMudWludDgoMHg4MCB8IGIpOwogICAgICAgICB9
IHdoaWxlICh0cnVlKTsKICAgICB9CisgICAgdmFydWludDEodikgeworICAgICAgICBpZiAodiAh
PT0gMCAmJiB2ICE9PSAxKQorICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFs
aWQgdmFydWludDEgJHt2fSByYW5nZSBpcyBbMCwgMV1gKTsKKyAgICAgICAgdGhpcy52YXJ1aW50
KHYpOworICAgIH0KKyAgICB2YXJpbnQ3KHYpIHsKKyAgICAgICAgaWYgKHYgPCB2YXJpbnQ3TWlu
IHx8IHZhcmludDdNYXggPCB2KQorICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYElu
dmFsaWQgdmFyaW50NyAke3Z9IHJhbmdlIGlzIFske3ZhcmludDdNaW59LCAke3ZhcmludDdNYXh9
XWApOworICAgICAgICB0aGlzLnZhcmludCh2KTsKKyAgICB9CiAgICAgdmFydWludDcodikgewog
ICAgICAgICBpZiAodiA8IHZhcnVpbnRNaW4gfHwgdmFydWludDdNYXggPCB2KQogICAgICAgICAg
ICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdmFydWludDcgJHt2fSByYW5nZSBpcyBb
JHt2YXJ1aW50TWlufSwgJHt2YXJ1aW50N01heH1dYCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vV0FTTS5qcyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpzCmluZGV4IDhlN2I3ZWYuLmQ4ZWFlZjYg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9XQVNNLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9XQVNN
LmpzCkBAIC0yNSw5ICsyNSwxOCBAQAogCiBpbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAndXRp
bGl0aWVzLmpzJzsKIAorY29uc3QgX21hcFZhbHVlcyA9IGZyb20gPT4geworICAgIGxldCB2YWx1
ZXMgPSB7fTsKKyAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tKQorICAgICAgICB2YWx1ZXNba2V5
XSA9IGZyb21ba2V5XS52YWx1ZTsKKyAgICByZXR1cm4gdmFsdWVzOworfTsKKwogZXhwb3J0IGNv
bnN0IGRlc2NyaXB0aW9uID0gdXRpbGl0aWVzLmpzb24oIndhc20uanNvbiIpOwogZXhwb3J0IGNv
bnN0IHZhbHVlVHlwZSA9IE9iamVjdC5rZXlzKGRlc2NyaXB0aW9uLnZhbHVlX3R5cGUpOwogY29u
c3QgX3ZhbHVlVHlwZVNldCA9IG5ldyBTZXQodmFsdWVUeXBlKTsKIGV4cG9ydCBjb25zdCBpc1Zh
bGlkVmFsdWVUeXBlID0gdiA9PiBfdmFsdWVUeXBlU2V0Lmhhcyh2KTsKK2V4cG9ydCBjb25zdCB2
YWx1ZVR5cGVWYWx1ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24udmFsdWVfdHlwZSk7CitleHBv
cnQgY29uc3QgZXh0ZXJuYWxLaW5kVmFsdWUgPSBfbWFwVmFsdWVzKGRlc2NyaXB0aW9uLmV4dGVy
bmFsX2tpbmQpOwogZXhwb3J0IGNvbnN0IHNlY3Rpb25zID0gT2JqZWN0LmtleXMoZGVzY3JpcHRp
b24uc2VjdGlvbik7CiBleHBvcnQgY29uc3Qgc2VjdGlvbkVuY29kaW5nVHlwZSA9IGRlc2NyaXB0
aW9uLnNlY3Rpb25bc2VjdGlvbnNbMF1dLnR5cGU7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
YXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwppbmRleCAyZWE1ZjcwLi4wN2E4YTcx
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9h
c3NlcnQuanMKQEAgLTM0LDYgKzM0LDExIEBAIGNvbnN0IF9pc1VuZGVmID0gKHYpID0+IHsKIH07
CiAKIGNvbnN0IF9lcSA9IChsaHMsIHJocykgPT4geworICAgIGlmIChBcnJheS5pc0FycmF5KGxo
cykgJiYgQXJyYXkuaXNBcnJheShyaHMpICYmIChsaHMubGVuZ3RoID09PSByaHMubGVuZ3RoKSkg
eworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPT0gbGhzLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgX2VxKGxoc1tpXSwgcmhzW2ldKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBp
ZiAobGhzICE9PSByaHMpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHRoZSBzYW1lOiAi
JHtsaHN9IiBhbmQgIiR7cmhzfSJgKTsKIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3Rlc3RfTW9kdWxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qcwpp
bmRleCA4MjFkYTg0Li4zNDhjODE2IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfTW9kdWxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9Nb2R1bGUuanMKQEAg
LTcsMyArNywxMyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAgICAgYXNzZXJ0Lmlu
c3RhbmNlb2YobW9kdWxlLCBXZWJBc3NlbWJseS5Nb2R1bGUpOwogfSkoKTsKKworKGZ1bmN0aW9u
IE1vZHVsZVdpdGhJbXBvcnRzKCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIiwgImJhciIsIHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCk7
CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIC8vIEZJ
WE1FOiBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cit9KSgpOwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzIGIv
SlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCmluZGV4IDA5MzQyMzEu
LmM2YjhkMzUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVy
SlNPTi5qcworKysgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMK
QEAgLTIsNyArMiw3IEBAIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwog
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKIGNvbnN0IGFzc2VydE9wVGhy
b3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKLSAgICBsZXQgZiA9IChuZXcgQnVpbGRlcigpKS5D
b2RlKCkuRnVuY3Rpb24oKTsKKyAgICBsZXQgZiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5k
KCkuQ29kZSgpLkZ1bmN0aW9uKCk7CiAgICAgYXNzZXJ0LnRocm93cyhvcEZuLCBFcnJvciwgbWVz
c2FnZSwgZik7CiB9OwogCkBAIC04Niw2ICs4NiwxNjggQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3Mg
PSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsw
XSwgMHgxMSk7CiB9KSgpOwogCisoZnVuY3Rpb24gU2VjdGlvbnNXaXRoU2FtZUN1c3RvbU5hbWUo
KSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Vbmtub3duKCJmb28iKS5FbmQoKTsK
KyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGIuVW5rbm93bigiZm9vIiksIEVycm9yLCBgQ2Fubm90
IGhhdmUgdG8gc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lICJmb28iIGFuZCBJRCAwYCk7Cit9
KSgpOworCisoZnVuY3Rpb24gRW1wdHlUeXBlU2VjdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5l
dyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpz
b24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDEpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0ubmFtZSwgIlR5cGUiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGEubGVuZ3RoLCAwKTsKK30pKCk7CisKKyhmdW5jdGlvbiBUd29UeXBlU2VjdGlvbnMoKSB7
CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCk7CisgICAgYXNzZXJ0
LnRocm93cygoKSA9PiBiLlR5cGUoKSwgRXJyb3IsIGBDYW5ub3QgaGF2ZSB0byBzZWN0aW9ucyB3
aXRoIHRoZSBzYW1lIG5hbWUgIlR5cGUiIGFuZCBJRCAxYCk7Cit9KSgpOworCisoZnVuY3Rpb24g
U2ltcGxlVHlwZVNlY3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBl
KCkKKyAgICAgICAgICAgIC5GdW5jKFtdKQorICAgICAgICAgICAgLkZ1bmMoW10sICJ2b2lkIikK
KyAgICAgICAgICAgIC5GdW5jKFtdLCAiaTMyIikKKyAgICAgICAgICAgIC5GdW5jKFtdLCAiaTY0
IikKKyAgICAgICAgICAgIC5GdW5jKFtdLCAiZjMyIikKKyAgICAgICAgICAgIC5GdW5jKFtdLCAi
ZjY0IikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0Il0pCisg
ICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgNyk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzFdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsxXS5yZXQs
ICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzJdLnBhcmFtcywgW10p
OworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5yZXQsICJpMzIiKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbM10ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzNdLnJldCwgImk2NCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMF0uZGF0YVs0XS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbNF0ucmV0LCAiZjMyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzVdLnBh
cmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs1XS5yZXQsICJmNjQi
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNl0ucGFyYW1zLCBbImkzMiIsICJp
NjQiLCAiZjMyIiwgImY2NCJdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNl0u
cmV0LCAidm9pZCIpOworfSkoKTsKKworKGZ1bmN0aW9uIEVtcHR5SW1wb3J0U2VjdGlvbigpIHsK
KyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkltcG9ydCgpLkVuZCgpOworICAgIGNvbnN0
IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0
aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5uYW1lLCAiSW1wb3J0Iik7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7Cit9KSgpOworCisoZnVuY3Rp
b24gSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxk
ZXIoKSkuSW1wb3J0KCkuRW5kKCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiLlR5cGUoKSwg
RXJyb3IsIGBCYWQgc2VjdGlvbiBvcmRlcmluZzogIkltcG9ydCIgY2Fubm90IHByZWNlZGUgIlR5
cGUiYCk7Cit9KSgpOworCisoZnVuY3Rpb24gSW1wb3J0RnVuY3Rpb25XaXRob3V0VHlwZVNlY3Rp
b24oKSB7CisgICAgY29uc3QgaSA9IChuZXcgQnVpbGRlcigpKS5JbXBvcnQoKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IGkuRnVuY3Rpb24oImZvbyIsICJiYXIiLCAwKSwgRXJyb3IsIGBDYW4n
dCB1c2UgdHlwZSAwIGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKK30pKCk7CisK
KyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbldpdGhJbnZhbGlkVHlwZSgpIHsKKyAgICBjb25zdCBp
ID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5JbXBvcnQoKTsKKyAgICBhc3NlcnQudGhy
b3dzKCgpID0+IGkuRnVuY3Rpb24oImZvbyIsICJiYXIiLCAwKSwgRXJyb3IsIGBUeXBlIDAgZG9l
c24ndCBleGlzdCBpbiB0eXBlIHNlY3Rpb25gKTsKK30pKCk7CisKKyhmdW5jdGlvbiBJbXBvcnRG
dW5jdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBl
KCkuRnVuYyhbXSkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImZvbyIsICJiYXIiLCAwKQorICAgICAgICAuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04u
cGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgs
IDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5tb2R1bGUsICJmb28iKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uZmllbGQsICJiYXIiKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLmtpbmQsICJGdW5jdGlvbiIpOworfSkoKTsKKworKGZ1bmN0aW9u
IEltcG9ydEZ1bmN0aW9uc1dpdGhFeGlzdGluZ1R5cGVzKCkgeworICAgIGNvbnN0IGIgPSAobmV3
IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgLkZ1bmMoW10pCisgICAg
ICAgICAgICAuRnVuYyhbXSwgImkzMiIpCisgICAgICAgICAgICAuRnVuYyhbImk2NCIsICJpMzIi
XSkKKyAgICAgICAgICAgIC5GdW5jKFsiaTY0IiwgImk2NCJdKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJiYXIiLCB7IHBh
cmFtczogW10gfSkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJheiIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYm9vIiwg
eyBwYXJhbXM6IFsiaTY0IiwgImk2NCJdIH0pCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBq
ID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
Lmxlbmd0aCwgNCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMyk7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVsxXS50eXBlLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMl0udHlwZSwgMyk7Cit9KSgpOworCisoZnVuY3Rpb24gSW1wb3J0RnVuY3Rp
b25XaXRoTmV3VHlwZSgpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAg
IC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9v
IiwgImJheiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCAiYm9vIiwgeyBwYXJhbXM6IFsiaTY0IiwgImk2NCJdIH0pCisgICAgICAgIC5F
bmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMyk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLnJldCwgInZvaWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLnJldCwg
ImkzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsxXS5wYXJhbXMsIFtdKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMl0ucmV0LCAidm9pZCIpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5wYXJhbXMsIFsiaTY0IiwgImk2NCJdKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBFbXB0eUV4cG9ydFNlY3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChu
ZXcgQnVpbGRlcigpKS5FeHBvcnQoKS5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShi
Lmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDEpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkV4cG9ydCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMF0uZGF0YS5sZW5ndGgsIDApOworfSkoKTsKKworKGZ1bmN0aW9uIEV4cG9ydEZ1bmN0aW9u
V2l0aG91dFR5cGVTZWN0aW9uKCkgeworICAgIGNvbnN0IGUgPSAobmV3IEJ1aWxkZXIoKSkuRXhw
b3J0KCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBlLkZ1bmN0aW9uKCJmb28iLCAwLCAwKSwg
RXJyb3IsIGBDYW4ndCB1c2UgdHlwZSAwIGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRg
KTsKK30pKCk7CisKKyhmdW5jdGlvbiBFeHBvcnRGdW5jdGlvbldpdGhJbnZhbGlkVHlwZSgpIHsK
KyAgICBjb25zdCBlID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5FeHBvcnQoKTsKKyAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IGUuRnVuY3Rpb24oImZvbyIsIDAsIDApLCBFcnJvciwgYFR5
cGUgMCBkb2Vzbid0IGV4aXN0IGluIHR5cGUgc2VjdGlvbmApOworfSkoKTsKKworKGZ1bmN0aW9u
IEV4cG9ydEFuSW1wb3J0KCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAg
ICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImZvbyIsICJiYXIi
LCB7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJFeHBv
cnRBbkltcG9ydCIsIHsgbW9kdWxlOiAiZm9vIiwgZmllbGQ6ICJiYXIiIH0pLkVuZCgpOworICAg
IGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzJdLm5hbWUsICJFeHBvcnQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGEubGVu
Z3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGFbMF0uZmllbGQsICJFeHBv
cnRBbkltcG9ydCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS50eXBlLCAw
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGFbMF0uaW5kZXgsIDApOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS5raW5kLCAiRnVuY3Rpb24iKTsKK30pKCk7CisK
KyhmdW5jdGlvbiBFeHBvcnRNaXNtYXRjaGVkSW1wb3J0KCkgeworICAgIGNvbnN0IGUgPSAobmV3
IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVu
Y3Rpb24oImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZS5GdW5jdGlvbigiZm9vIiwgMCwgeyBwYXJh
bXM6IFsiaTMyIl0gfSksIEVycm9yLCBgUmUtZXhwb3J0aW5nIGltcG9ydCAiYmFyIiBhcyAiZm9v
IiBoYXMgbWlzbWF0Y2hpbmcgdHlwZWApOworfSkoKTsKKwogKGZ1bmN0aW9uIEVtcHR5Q29kZVNl
Y3Rpb24oKSB7CiAgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CiAgICAgYi5Db2RlKCk7CkBA
IC05Nyw5OSArMjU5LDE1NCBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdl
KSA9PiB7CiAKIChmdW5jdGlvbiBDb2RlU2VjdGlvbldpdGhFbXB0eUZ1bmN0aW9uKCkgewogICAg
IGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwotICAgIGIuQ29kZSgpCi0gICAgICAgIC5GdW5jdGlv
bigpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigpOwogICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5u
YW1lLCAiQ29kZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVuZ3RoLCAyKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJUeXBlIik7CiAgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhLmxlbmd0aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLnBhcmFtZXRlckNvdW50LCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0ubG9jYWxzLmxlbmd0aCwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBd
LmNvZGUubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFy
YW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnJldCwgInZvaWQi
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLm5hbWUsICJDb2RlIik7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLm5hbWUsIHVuZGVmaW5lZCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5w
YXJhbWV0ZXJDb3VudCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmxv
Y2Fscy5sZW5ndGgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2Rl
Lmxlbmd0aCwgMCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gQ29kZVNlY3Rpb25XaXRoRW1wdHlGdW5j
dGlvbldpdGhQYXJhbWV0ZXJzKCkgewogICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwotICAg
IGIuQ29kZSgpCi0gICAgICAgIC5GdW5jdGlvbihbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCJd
KTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oeyBwYXJhbXM6IFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0Il0gfSk7CiAgICAgY29u
c3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVu
Z3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJDb2RlIik7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDIpOwogICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YS5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5w
YXJhbWV0ZXJDb3VudCwgNCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxv
Y2Fsc1swXSwgImkzMiIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2Nh
bHNbMV0sICJpNjQiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxz
WzJdLCAiZjMyIik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fsc1sz
XSwgImY2NCIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0
aCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtcywgWyJpMzIi
LCAiaTY0IiwgImYzMiIsICJmNjQiXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLnJldCwgInZvaWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVuZ3Ro
LCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlwZSwgMCk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnBhcmFtZXRlckNvdW50LCA0KTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzWzBdLCAiaTMyIik7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmxvY2Fsc1sxXSwgImk2NCIpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5sb2NhbHNbMl0sICJmMzIiKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzWzNdLCAiZjY0Iik7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAwKTsKIH0pKCk7CiAKIChmdW5jdGlv
biBJbnZhbGlkRnVuY3Rpb25QYXJhbWV0ZXJzKCkgewotICAgIGZvciAobGV0IGludmFsaWQgaW4g
WyIiLCAidm9pZCIsICJib29sIiwgImFueSIsICJzdHJ1Y3QiXSkgeworICAgIGZvciAobGV0IGlu
dmFsaWQgb2YgWyIiLCAidm9pZCIsICJib29sIiwgImFueSIsICJzdHJ1Y3QiLCAwLCAzLjE0LCB1
bmRlZmluZWQsIFtdLCB7fV0pIHsKICAgICAgICAgY29uc3QgYyA9IChuZXcgQnVpbGRlcigpKS5D
b2RlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjLkZ1bmN0aW9uKFtpbnZhbGlkXSk7
Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJy
b3IpIHsgY29udGludWU7IH0KLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQg
YW4gRXJyb3IsIGdvdCAke2V9YCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBFeHBlY3RlZCB0byB0aHJvdyBhbiBFcnJvciBmb3IgJHtpbnZhbGlkfWApOworICAgICAgICBh
c3NlcnQudGhyb3dzKCgpID0+IGMuRnVuY3Rpb24oeyBwYXJhbXM6IFtpbnZhbGlkXSB9KSwgRXJy
b3IsIGBUeXBlIHBhcmFtZXRlciAke2ludmFsaWR9IGlzbid0IGEgdmFsaWQgdmFsdWUgdHlwZWAp
OwogICAgIH0KIH0pKCk7CiAKIChmdW5jdGlvbiBTaW1wbGVGdW5jdGlvbigpIHsKICAgICBjb25z
dCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24oKQot
ICAgICAgICAgICAgLk5vcCgpCi0gICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgLkVuZCgpOwor
ICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigpCisgICAgICAgICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAgICAgLk5vcCgpCisgICAg
ICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOwotICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMF0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5j
b2RlWzBdLm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZVsxXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbMl0ubmFtZSwgImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9uIFR3b1NpbXBsZUZ1bmN0
aW9ucygpIHsKICAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUoKQotICAg
ICAgICAuRnVuY3Rpb24oKQotICAgICAgICAgICAgLk5vcCgpCi0gICAgICAgICAgICAuTm9wKCkK
KyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oKQorICAgICAgICAgICAgICAgIC5Ob3AoKQorICAgICAgICAgICAgICAgIC5Ob3AoKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKQorICAgICAgICAgICAgICAg
IC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNl
KGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVuZ3RoLCAyKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwgMCk7Cisg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIpOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0ubG9jYWxzLmxlbmd0aCwgMCk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLmNvZGUubGVuZ3RoLCAyKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0uY29kZVswXS5uYW1lLCAicmV0dXJuIik7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLmNvZGVbMV0ubmFtZSwgImVuZCIpOworfSko
KTsKKworKGZ1bmN0aW9uIE5hbWVkRnVuY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVp
bGRlcigpLlR5cGUoKS5FbmQoKS5Db2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKCJoZWxsbyIpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigid29ybGQiLCB7IHBhcmFtczogWyJpMzIiXSB9KS5FbmQo
KQorICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLm5hbWUsICJoZWxsbyIpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5wYXJhbWV0ZXJDb3VudCwgMCk7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLm5hbWUsICJ3b3JsZCIpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVsxXS5wYXJhbWV0ZXJDb3VudCwgMSk7Cit9KSgpOworCisoZnVuY3Rp
b24gRXhwb3J0U2ltcGxlRnVuY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIiwgMCwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuRnVuY3Rp
b24oImJhciIpCisgICAgICAgICAgICAuRnVuY3Rpb24oImJldHRlck5hbWVGb3JCYXIiLCAiYmFy
IikKICAgICAgICAgLkVuZCgpCi0gICAgICAgIC5GdW5jdGlvbigpCi0gICAgICAgICAgICAuUmV0
dXJuKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBb
XSB9KS5Ob3AoKS5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiLCB7IHBhcmFtczog
W10gfSkuTm9wKCkuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGogPSBKU09OLnBh
cnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAy
KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwgMCk7
Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKLSAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIpOwot
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ubG9jYWxzLmxlbmd0aCwgMCk7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLmNvZGUubGVuZ3RoLCAyKTsKLSAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0uY29kZVswXS5uYW1lLCAicmV0dXJuIik7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLmNvZGVbMV0ubmFtZSwgImVuZCIpOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5maWVs
ZCwgImZvbyIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uaW5kZXgsIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5raW5kLCAiRnVuY3Rpb24iKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0uZmllbGQsICJiYXIiKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMV0udHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzFdLmluZGV4LCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0ua2lu
ZCwgIkZ1bmN0aW9uIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLmZpZWxk
LCAiYmV0dGVyTmFtZUZvckJhciIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsy
XS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0uaW5kZXgsIDEp
OworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsyXS5raW5kLCAiRnVuY3Rpb24iKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBFeHBvcnRVbmRlZmluZWRGdW5jdGlvbigpIHsKKyAgICBjb25z
dCBjID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5FeHBvcnQoKS5GdW5jdGlvbigiZm9v
IikuRW5kKCkuQ29kZSgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYy5FbmQoKSwgRXJyb3Is
IGBFeHBvcnQgc2VjdGlvbiBjb250YWlucyB1bmRlZmluZWQgZnVuY3Rpb24gImZvbyJgKTsKIH0p
KCk7CiAKIChmdW5jdGlvbiBUd29CdWlsZGVyc0F0VGhlU2FtZVRpbWUoKSB7CiAgICAgY29uc3Qg
YiA9IFtuZXcgQnVpbGRlcigpLCBuZXcgQnVpbGRlcigpXTsKLSAgICBjb25zdCBmID0gYi5tYXAo
YnVpbGRlciA9PiBidWlsZGVyLkNvZGUoKS5GdW5jdGlvbigpKTsKKyAgICBjb25zdCBmID0gYi5t
YXAoYnVpbGRlciA9PiBidWlsZGVyLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKSk7CiAg
ICAgZlswXS5Ob3AoKTsKICAgICBmWzFdLlJldHVybigpLkVuZCgpLkVuZCgpOwogICAgIGZbMF0u
Tm9wKCkuRW5kKCkuRW5kKCk7CiAgICAgY29uc3QgaiA9IGIubWFwKGJ1aWxkZXIgPT4gSlNPTi5w
YXJzZShidWlsZGVyLmpzb24oKSkpOwotICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMF0uZGF0
YVswXS5jb2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblswXS5kYXRh
WzBdLmNvZGVbMF0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlWzFdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7Ci0gICAgYXNzZXJ0LmVxKGpbMV0uc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoalsxXS5zZWN0
aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAicmV0dXJuIik7Ci0gICAgYXNzZXJ0LmVxKGpb
MV0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5l
cShqWzBdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7CisgICAgYXNzZXJ0LmVx
KGpbMF0uc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgIm5vcCIpOworICAgIGFzc2Vy
dC5lcShqWzBdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJub3AiKTsKKyAgICBh
c3NlcnQuZXEoalswXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7Cisg
ICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKKyAg
ICBhc3NlcnQuZXEoalsxXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAicmV0dXJu
Iik7CisgICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwg
ImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9uIENoZWNrZWRPcGNvZGVBcmd1bWVudHNUb29NYW55
KCkgewpAQCAtMTk3LDcgKzQxNCw3IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1l
c3NhZ2UpID0+IHsKIH0pKCk7CiAKIChmdW5jdGlvbiBVbmNoZWNrZWRPcGNvZGVBcmd1bWVudHNU
b29NYW55KCkgewotICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNlKS5Db2RlKCku
RnVuY3Rpb24oKS5Ob3AoIlRoaXMgaXMgZmluZS4iLCAiSSdtIE9LIHdpdGggdGhlIGV2ZW50cyB0
aGF0IGFyZSB1bmZvbGRpbmcgY3VycmVudGx5LiIpOworICAgIChuZXcgQnVpbGRlcigpKS5zZXRD
aGVja2VkKGZhbHNlKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuTm9wKCJUaGlzIGlz
IGZpbmUuIiwgIkknbSBPSyB3aXRoIHRoZSBldmVudHMgdGhhdCBhcmUgdW5mb2xkaW5nIGN1cnJl
bnRseS4iKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBDaGVja2VkT3Bjb2RlQXJndW1lbnRzTm90RW5v
dWdoKCkgewpAQCAtMjA1LDE4ICs0MjIsMTggQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BG
biwgbWVzc2FnZSkgPT4gewogfSkoKTsKIAogKGZ1bmN0aW9uIFVuY2hlY2tlZE9wY29kZUFyZ3Vt
ZW50c05vdEVub3VnaCgpIHsKLSAgICAobmV3IEJ1aWxkZXIoKSkuc2V0Q2hlY2tlZChmYWxzZSku
Q29kZSgpLkZ1bmN0aW9uKCkuSTMyQ29uc3QoKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuc2V0Q2hl
Y2tlZChmYWxzZSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLkkzMkNvbnN0KCk7CiB9
KSgpOwogCiAoZnVuY3Rpb24gQ2FsbE5vQXJndW1lbnRzKCkgewotICAgIGNvbnN0IGIgPSAobmV3
IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuQ2FsbCgwKS5FbmQoKS5FbmQoKTsKKyAgICBj
b25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5D
YWxsKDApLkVuZCgpLkVuZCgpOwogICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDIpOwotICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJjYWxsIik7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uYXJndW1lbnRzLmxlbmd0
aCwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRp
YXRlcy5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2Rl
WzBdLmltbWVkaWF0ZXNbMF0sIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsw
XS5jb2RlWzFdLm5hbWUsICJlbmQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5j
b2RlWzBdLm5hbWUsICJjYWxsIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbMF0uYXJndW1lbnRzLmxlbmd0aCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJlbmQiKTsKIH0pKCk7CiAK
IChmdW5jdGlvbiBDYWxsSW52YWxpZCgpIHsKQEAgLTIyNiwxMiArNDQzLDEyIEBAIGNvbnN0IGFz
c2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIAogKGZ1bmN0aW9uIEkzMkNvbnN0
VmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbMCwgMSwgMiwgNDIsIDEzMzcsIDB4RkYsIDB4
RkZGRiwgMHg3RkZGRkZGRiwgMHhGRkZGRkZGRSwgMHhGRkZGRkZGRl0pIHsKLSAgICAgICAgY29u
c3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5JMzJDb25zdChjKS5SZXR1
cm4oKS5FbmQoKS5FbmQoKTsKKyAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBl
KCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuSTMyQ29uc3QoYykuUmV0dXJuKCkuRW5kKCkuRW5k
KCk7CiAgICAgICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICAgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIpOwot
ICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMu
bGVuZ3RoLCAwKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVb
MF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsKKyAgICAgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIpOworICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAw
KTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRp
YXRlcy5sZW5ndGgsIDEpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsKICAgICB9CiB9KSgpOwogCkBAIC0yNDQsMTIgKzQ2
MSwxMiBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAKIChm
dW5jdGlvbiBGMzJDb25zdFZhbGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWzAsIC0wLiwgMC4y
LCBNYXRoLlBJLCAweDEwMDAwMDAwMF0pIHsKLSAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRl
cigpKS5Db2RlKCkuRnVuY3Rpb24oKS5GMzJDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsK
KyAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1
bmN0aW9uKCkuRjMyQ29uc3QoYykuUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAgICAgIGNvbnN0
IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImYzMi5jb25zdCIpOwotICAgICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAgICAg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5n
dGgsIDEpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5p
bW1lZGlhdGVzWzBdLCBjKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbMF0ubmFtZSwgImYzMi5jb25zdCIpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICAgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwor
ICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVz
WzBdLCBjKTsKICAgICB9CiB9KSgpOwogCkBAIC0yNjAsMTIgKzQ3NywxMiBAQCBjb25zdCBhc3Nl
cnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAKIChmdW5jdGlvbiBGNjRDb25zdFZh
bGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWzAsIC0wLiwgMC4yLCBNYXRoLlBJLCAweDEwMDAw
MDAwMF0pIHsKLSAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rp
b24oKS5GNjRDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKKyAgICAgICAgY29uc3QgYiA9
IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuRjY0Q29uc3Qo
YykuUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAgICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIu
anNvbigpKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0u
bmFtZSwgImY2NC5jb25zdCIpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwotICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsK
KyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImY2
NC5jb25zdCIpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsw
XS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOworICAgICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsKICAgICB9CiB9
KSgpOwogCkBAIC0yNzUsMjEgKzQ5MiwyMSBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZu
LCBtZXNzYWdlKSA9PiB7CiB9KSgpOwogCiAoZnVuY3Rpb24gQ2FsbE9uZUZyb21TdGFjaygpIHsK
LSAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24o
WyJpMzIiXSkKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2Rl
KCkKKyAgICAgICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiJdIH0pCiAgICAgICAgICAgICAu
STMyQ29uc3QoNDIpCiAgICAgICAgICAgICAuQ2FsbCgwKQogICAgICAgICAuRW5kKCkKICAgICAu
RW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIDQyKTsKLSAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiY2FsbCIpOwot
ICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5hcmd1
bWVudHMubGVuZ3RoLCAxKTsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzI2NwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLmltbWVk
aWF0ZXMubGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29k
ZVsxXS5pbW1lZGlhdGVzWzBdLCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVsyXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRh
WzBdLmNvZGUubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZVswXS5uYW1lLCAiaTMyLmNvbnN0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlc1swXSwgNDIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJjYWxsIik7CisgICAgLy8gRklYTUU6IGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLmFyZ3VtZW50cy5sZW5ndGgsIDEpOyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLmltbWVkaWF0ZXNbMF0s
IDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJl
bmQiKTsKIH0pKCk7CiAKIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjMyNjcgYWxsIG9mIHRoZXNlOgpAQCAtMzAxLDIyICs1MTgsMjIgQEAgY29uc3Qg
YXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogLy8gIHRlc3QgZnVuY3Rpb24g
bmFtZXMgKGJvdGggc2V0dGluZyBhbmQgY2FsbGluZyB0aGVtKS4KIAogKGZ1bmN0aW9uIENhbGxN
YW55RnJvbVN0YWNrKCkgewotICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpCi0g
ICAgICAgICAgLkZ1bmN0aW9uKFsiaTMyIiwgImkzMiIsICJpMzIiLCAiaTMyIl0pCisgICAgY29u
c3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpCisgICAgICAgIC5GdW5j
dGlvbih7IHBhcmFtczogWyJpMzIiLCAiaTMyIiwgImkzMiIsICJpMzIiXSB9KQogICAgICAgICAg
ICAgICAuSTMyQ29uc3QoNDIpLkkzMkNvbnN0KDEzMzcpLkkzMkNvbnN0KDB4QkVFRikuSTMyQ29u
c3QoMHhGRkZGKQogICAgICAgICAgICAgICAuQ2FsbCgwKQogICAgICAgICAuRW5kKCkKICAgICAu
RW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgNik7Ci0gICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzBdLmNvZGVbNF0ubmFtZSwgImNhbGwiKTsKLSAgICAvLyBGSVhNRTog
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbNF0uYXJndW1lbnRzLmxlbmd0aCwg
NCk7IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKLSAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVs0XS5pbW1lZGlhdGVzLmxlbmd0aCwg
MSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbNF0uaW1tZWRpYXRl
c1swXSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3Ro
LCA2KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVs0XS5uYW1lLCAi
Y2FsbCIpOworICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZVs0XS5hcmd1bWVudHMubGVuZ3RoLCA0KTsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzI2NworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2Rl
WzRdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0uY29kZVs0XS5pbW1lZGlhdGVzWzBdLCAwKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNv
ZGVBZGQoKSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkKKyAgICBjb25z
dCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkKICAgICAgICAgICAuRnVu
Y3Rpb24oKQogICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpLkkzMkNvbnN0KDEzMzcpCiAgICAg
ICAgICAgICAgIC5JMzJBZGQoKQpAQCAtMzI0LDM5ICs1NDEsMzkgQEAgY29uc3QgYXNzZXJ0T3BU
aHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7
CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgNSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImkzMi5hZGQiKTsKLSAgICAvLyBGSVhNRTogYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0uYXJndW1lbnRzLmxlbmd0aCwgMik7
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVszXS5uYW1lLCAicmV0dXJuIik7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCA1KTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiaTMyLmFkZCIpOworICAg
IC8vIEZJWE1FOiBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5hcmd1bWVu
dHMubGVuZ3RoLCAyKTsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzI2NworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJy
ZXR1cm4iKTsKICAgICAvLyBGSVhNRSBjaGVjayByZXR1cm4uIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNvZGVVbnJl
YWNoYWJsZSgpIHsKLSAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlv
bigpLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRl
cigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5FbmQoKS5F
bmQoKTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAidW5yZWFjaGFibGUiKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJ1bnJlYWNoYWJsZSIpOwogfSko
KTsKIAogKGZ1bmN0aW9uIE9wY29kZVVucmVhY2hhYmxlQ29tYmluYXRpb25zKCkgewotICAgIChu
ZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5Ob3AoKS5VbnJlYWNoYWJsZSgpLkVuZCgp
LkVuZCgpOwotICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJs
ZSgpLk5vcCgpLkVuZCgpLkVuZCgpOwotICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rp
b24oKS5SZXR1cm4oKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpOwotICAgIChuZXcgQnVpbGRl
cigpKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLlJldHVybigpLkVuZCgpLkVuZCgp
OwotICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5DYWxsKDApLlVucmVhY2hh
YmxlKCkuRW5kKCkuRW5kKCk7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigp
LlVucmVhY2hhYmxlKCkuQ2FsbCgwKS5FbmQoKS5FbmQoKTsKKyAgICAobmV3IEJ1aWxkZXIoKSku
VHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLk5vcCgpLlVucmVhY2hhYmxlKCkuRW5kKCku
RW5kKCkuanNvbigpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1
bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5Ob3AoKS5FbmQoKS5FbmQoKS5qc29uKCk7CisgICAgKG5l
dyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5SZXR1cm4oKS5VbnJl
YWNoYWJsZSgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuVHlwZSgp
LkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuUmV0dXJuKCkuRW5kKCkuRW5k
KCkuanNvbigpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0
aW9uKCkuQ2FsbCgwKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3
IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCku
Q2FsbCgwKS5FbmQoKS5FbmQoKS5qc29uKCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gT3Bjb2RlU2Vs
ZWN0KCkgewotICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkK
KyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rp
b24oKQogICAgICAgICAuSTMyQ29uc3QoMSkuSTMyQ29uc3QoMikuSTMyQ29uc3QoMCkKICAgICAg
ICAgLlNlbGVjdCgpCiAgICAgICAgIC5SZXR1cm4oKQogICAgICAgLkVuZCgpCiAgICAgLkVuZCgp
OwogICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDYpOwotICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMF0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJzZWxlY3QiKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDYpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJzZWxlY3QiKTsKIH0pKCk7CiAKIC8vIEZJWE1F
IHRlc3QgdHlwZSBtaXNtYXRjaCB3aXRoIHNlbGVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzI2NwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qcyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVz
dF9CdWlsZGVyV2ViQXNzZW1ibHkuanMKaW5kZXggYTI1MWM0My4uYWM1N2QzNyAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qcworKysg
Yi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzCkBAIC0z
MCwxNiArMzAsMyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICAg
ICAgICAgICAgWyIwMDAwMDAwMCAwMCA2MSA3MyA2ZCAwYyAwMCAwMCAwMCAwMCAwZiAwYSA0ZiAw
MCA0OCAwMCA0OCAgfMK3YXNtwrfCt8K3wrfCt8K3wrdPwrdIwrdIfCIsCiAgICAgICAgICAgICAg
ICAiMDAwMDAwMTAgMDAgNDEgMDAgNDkgMDAgZGUgYWQgYzAgZmUgICAgICAgICAgICAgICAgICAg
ICAgIHzCt0HCt0nCt8K3wrfCt8K3ICAgICAgIHwiXS5qb2luKCJcbiIpKTsKIH0pKCk7Ci0KLShm
dW5jdGlvbiBCYXNpYygpIHsKLSAgICBjb25zdCBiaW4gPSAobmV3IEJ1aWxkZXIoKSkKLSAgICAg
ICAgLkNvZGUoKQotICAgICAgICAgICAgLkZ1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAuTm9w
KCkKLSAgICAgICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgICAgIC5FbmQoKQotICAgICAgICAu
RW5kKCkKLSAgICAgICAgLldlYkFzc2VtYmx5KCk7Ci0gICAgYXNzZXJ0LmVxKGJpbi5oZXhkdW1w
KCkudHJpbSgpLAotICAgICAgICAgICAgICAiMDAwMDAwMDAgMDAgNjEgNzMgNmQgMGMgMDAgMDAg
MDAgMGEgMDYgMDEgMDQgMDAgMGEgMGEgMGYgIHzCt2FzbcK3wrfCt8K3wrfCt8K3wrfCt8K3wrfC
t3wiKTsKLX0pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYmY1YjIx
OC4uMTE3Y2Q2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTEzMiw2
ICsxMTMyLDIzIEBAIGVsc2UgKCkKICAgICApCiBlbmRpZiAoKQogCisjIFdlYkFzc2VtYmx5IGdl
bmVyYXRvcgorCittYWNybyhHRU5FUkFURV9QWVRIT04gX2dlbmVyYXRvciBfaW5wdXQgX291dHB1
dCkKKyAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgICAgIE9VVFBVVCAke19vdXRwdXR9Cisg
ICAgICAgIE1BSU5fREVQRU5ERU5DWSAke19nZW5lcmF0b3J9CisgICAgICAgIERFUEVORFMgJHtf
aW5wdXR9CisgICAgICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtfZ2VuZXJhdG9y
fSAke19pbnB1dH0gJHtfb3V0cHV0fQorICAgICAgICBWRVJCQVRJTSkKKyAgICBsaXN0KEFQUEVO
RCBKYXZhU2NyaXB0Q29yZV9IRUFERVJTICR7X291dHB1dH0pCisgICAgQUREX1NPVVJDRV9ERVBF
TkRFTkNJRVMoJHtfaW5wdXR9ICR7X291dHB1dH0pCitlbmRtYWNybygpCitHRU5FUkFURV9QWVRI
T04oJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVy
LnB5ICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL3dhc20uanNvbiAke0RFUklWRURf
U09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L1dhc21PcHMuaCkKK0dFTkVSQVRFX1BZVEhPTigk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGlu
ZXNIZWFkZXIucHkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7
REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vV2FzbVZhbGlkYXRlSW5saW5lcy5o
KQorCisjIExVVCBnZW5lcmF0b3IKKwogc2V0KEhBU0hfTFVUX0dFTkVSQVRPUiAke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vY3JlYXRlX2hhc2hfdGFibGUpCiBtYWNybyhHRU5FUkFURV9IQVNI
X0xVVCBfaW5wdXQgX291dHB1dCkKICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwppbmRleCA3MGFlZWFmLi5jM2E4YjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw3OSBAQAorMjAxNi0xMS0wMiAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBz
ZWN0aW9ucworCisgICAgICAgIE9uIHRoZSBKU0Mgc2lkZToKKworICAgICAgICAgLSBQdXQgaW4g
cGFyc2VyIHN0dWJzIGZvciBhbGwgV2ViQXNzZW1ibHkgc2VjdGlvbnMuCisgICAgICAgICAtIFBh
cnNlIEltcG9ydCwgRXhwb3J0IHNlY3Rpb25zLgorICAgICAgICAgLSBVc2UgdHJ5UmVzZXJ2ZUNh
cGFjaXR5IGluc3RlYWQgb2YgcmVzZXJ2ZSwgYW5kIGJhaWwgb3V0IG9mIHRoZSBwYXJzZXIgaWYg
aXQgZmFpbHMuIFRoaXMgcHJldmVudHMgdGhlIHBhcnNlciBmcm9tIGJyaW5naW5nIGV2ZXJ5dGhp
bmcgZG93biB3aGVuIGZhY2VkIHdpdGggYSBtYWxpY2lvdXMgaW5wdXQuCisgICAgICAgICAtIEVu
Y2Fwc3VsYXRlIGFsbCBwYXJzZWQgbW9kdWxlIGluZm9ybWF0aW9uIGludG8gaXRzIG93biBzdHJ1
Y3R1cmUsIG1ha2luZyBpdCBlYXNpZXIgdG8gcGFzcyBhcm91bmQgKGZyb20gcGFyc2VyIHRvIFBs
YW4gdG8gTW9kdWxlIHRvIEluc3RhbmNlKS4KKyAgICAgICAgIC0gQ3JlYXRlIFdhc21Gb3JtYXQu
Y3BwIHRvIGhvbGQgcGFyc2VkIG1vZHVsZSBpbmZvcm1hdGlvbidzIGR0b3IgdG8gYXZvaWQgaW5j
bHVkaW5nIFdhc21NZW1vcnkuaCBuZWVkbGVzc2x5LgorICAgICAgICAgLSBSZW1vdmUgYWxsIHJl
bWFpbmRlcnMgb2YgcG9seWZpbGwtcHJvdG90eXBlLTEsIGFuZCB1cGRhdGUgbGljZW5zZS4KKyAg
ICAgICAgIC0gQWRkIG1pc3NpbmcgV2FzbU9wcy5oIGFuZCBXYXNtVmFsaWRhdGVJbmxpbmVzLmgg
YXV0by1nZW5lcmF0aW9uIGZvciBjbWFrZSBidWlsZC4KKworICAgICAgICBPbiB0aGUgQnVpbGRl
ci5qcyB0ZXN0aW5nIHNpZGU6CisKKyAgICAgICAgIC0gSW1wbGVtZW50IFR5cGUsIEltcG9ydCAo
ZnVuY3Rpb24gb25seSksIEV4cG9ydCAoZnVuY3Rpb24gb25seSkgc2VjdGlvbnMuCisgICAgICAg
ICAtIENoZWNrIHNlY3Rpb24gb3JkZXIgYW5kIHVuaXF1ZW5lc3MuCisgICAgICAgICAtIE9wdGlv
bmFsbHkgYXV0by1nZW5lcmF0ZSB0aGUgVHlwZSBzZWN0aW9uIGZyb20gc3Vic2VxdWVudCBFeHBv
cnQgLyBJbXBvcnQgLyBDb2RlIGVudHJpZXMuCisgICAgICAgICAtIEFsbG93IHJlLWV4cG9ydGlu
ZyBhbiBpbXBvcnQuCisKKyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBNb2R1bGUgc2hvdWxk
IGRlY29kZSBzdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBtaXNzaW5nIGF1dG8tZ2VucmF0aW9uCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogbWVyZ2UgY29uZmxp
Y3QKKyAgICAgICAgKiB0ZXN0V2FzbS5jcHA6IHVwZGF0ZSBmb3IgQVBJIGNoYW5nZXMsIG5vIGZ1
bmN0aW9uYWwgY2hhbmdlCisgICAgICAgIChjaGVja1BsYW4pOgorICAgICAgICAocnVuV2FzbVRl
c3RzKToKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuY3BwOiBhZGQgYSBkdG9yIHdoaWNoIHJl
cXVpcmVzIGV4dHJhIGhlYWRlcnMgd2hpY2ggSSdkIHJhdGhlciBub3QgaW5jbHVkZSBpbiBXYXNt
Rm9ybWF0LmgKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJ
bmZvcm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6IEFkZCBFeHRlcm5hbCwg
SW1wb3J0LCBGdW5jdGlvbmluZm9ybWF0aW9uLCBFeHBvcnQsIE1vZHVsZUluZm9ybWF0aW9uLCBD
b21waWxlZEZ1bmN0aW9uLCBhbmQgcmVtb3ZlIG9ic29sZXRlIHN0dWZmIHdoaWNoIHdhcyBhIGhv
bGRvdmVyIGZyb20gdGhlIGZpcnN0IGltcGxlbWVudGF0aW9uIChhbGwgdGhhdCBjb2RlIGlzIG5v
dyBnb25lLCBzbyByZW1vdmUgaXRzIGxpY2Vuc2UpCisgICAgICAgIChKU0M6Oldhc206OkV4dGVy
bmFsOjppc1ZhbGlkKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOiBzaW1w
bGlmeSBzb21lLCBtYWtlIG5hbWVzIGNvbnNpc3RlbnQgd2l0aCB0aGUgV2ViQXNzZW1ibHkgc2Vj
dGlvbiBuYW1lcywgY2hlY2sgbWVtb3J5IGFsbG9jYXRpb25zIHNvIHRoZXkgY2FuIGZhaWwgZWFy
bHkKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBh
cnNlcjo6cGFyc2VGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6
cGFyc2VUYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VNZW1v
cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6CisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
UGFyc2VyOjpwYXJzZUNvZGUpOiBhdm9pZCBvdmVyZmxvdyB0aHJvdWdoIGZ1bmN0aW9uIHNpemUu
CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKToKKyAgICAgICAg
KiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjptb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtUGFyc2VyLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6Y29uc3VtZVVURjhTdHJpbmcpOiBhZGQgYXMgcmVx
dWlyZWQgYnkgc3BlYworICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlRXh0ZXJuYWxL
aW5kKTogYWRkIGFzIHBlciBzcGVjCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OlBsYW4pOiBmaXggc29tZSBvd25lcnNoaXAsIGltcHJvdmUg
c29tZSBlcnJvciBtZXNzYWdlcworICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDogZml4IHNvbWUg
b3duZXJzaGlwCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmdldE1vZHVsZUluZm9ybWF0aW9u
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Z2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6Y29tcGlsZWRGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6Y29tcGlsZWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmdldENv
bXBpbGVkRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9ucy5oOiBtYWNyb2l6
ZSB3aXRoIGRlc2NyaXB0aW9uLCBzbyB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBzdXBlciBwcmV0
dHkuIFRoaXMgY291bGQgYmUgYXV0by1nZW5lcmF0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKTogdGFrZSBtb2R1bGUgaW5mb3JtYXRpb24KKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6IGRpdHRvCisgICAgICAgICogd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1
bGU6Om1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSk6IGNoZWNrIHRoYXQgbW9kdWxlcyB3aXRoIGltcG9ydHMgYXJlIGluc3RhbnRp
YXRlZCB3aXRoIGFuIGltcG9ydCBvYmplY3QsIGFzIHBlciBzcGVjLiBUaGlzIG5lZWRzIHRvIGJl
IHRlc3RlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlUYWJsZSk6CisKIDIwMTYtMTEtMDIgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBPbmUgZmlsZSBwZXIgY2xhc3MgZm9yIENvZGVCbG9jay5o
Ly5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDY1OWRhYi4uYWFhZTYwNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyNzgsNyArMTI3OCw2IEBACiAJCTUz
RkQwNEQ0MUQ3QUIyOTEwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3QUIxODcw
MDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLzsgfTsKIAkJNTNGRjdGOTkxREJG
Q0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxp
ZGF0ZS5oICovOyB9OwogCQk1M0ZGN0Y5QjFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkY3
RjlBMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwICovOyB9OwotCQk1M0ZGN0Y5
RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZGN0Y5QzFEQzAwREIxMDBBMjZDQ0MgLyogV2Fz
bUZvcm1hdC5jcHAgKi87IH07CiAJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5j
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLzsgfTsKIAkJ
NUI3MENGREYxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEOTFEQjY5RTVDMDBF
QzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmNwcCAqLzsgfTsKIAkJNUI3MENGRTAxREI2OUU2NjAw
RUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkRBMURCNjlFNUMwMEVDMjNGOSAvKiBBc3lu
Y0Z1bmN0aW9uUHJvdG90eXBlLmggKi87IH07CkBAIC0xOTczLDYgKzE5NzIsNyBAQAogCQlBRDJG
Q0MyRDFEQjgzOEZEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzI3MURCODM4QzQwMEIz
RTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oICovOyB9OwogCQlBRDJGQ0MzMDFEQjgzRDQ5
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseS5jcHAgKi87IH07CiAJCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJG
Q0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovOyB9OworCQlBRDJGQ0Mz
MzFEQzQwNDU0MDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2Fz
bUZvcm1hdC5jcHAgKi87IH07CiAJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NN
YXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDg2QTkzRDFBQTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEREIxRjYzMThENzdE
QkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9v
dFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMUNGMDY4MTZEQ0FCMkQwMEI5
NzEyMyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCAqLzsgfTsKQEAgLTM2MjcsNyArMzYyNyw2IEBACiAJ
CTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkY3Rjk4MURCRkNEOTAwMEEyNkNDQyAvKiBX
YXNtVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVZhbGlk
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkY3RjlBMURCRkQyQjkwMEEy
NkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbVZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTNG
RjdGOUMxREMwMERCMTAwQTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0Fz
eW5jRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNB
c3luY0Z1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGREEx
REI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDQwNCw2ICs0NDAzLDcgQEAKIAkJQUQyRkNDMjcxREI4MzhD
NDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJs
eVByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MyRTFEQjgz
OUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRm9ybWF0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8q
IFdlYWtHQ01hcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a0dDTWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERCMUY2MjE4
RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5MTksNyArNTkxOSw3IEBACiAJ
CQkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggKi8sCiAJ
CQkJNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAg
Ki8sCiAJCQkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlv
bi5oICovLAotCQkJCTUzRkY3RjlDMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCAq
LywKKwkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgKi8sCiAJ
CQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLywKIAkJCQk1M0Y0
MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCiAJCQkJNTM1
NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuY3BwICovLApAQCAtOTgwNyw2ICs5
ODA3LDcgQEAKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJl
ZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBRDJGQ0MzMzFEQzQw
NDU0MDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQw
NzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2Ny
aXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0V2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCmlu
ZGV4IGQxYjg4ZDguLjI5NzQ1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0V2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcApAQCAt
Mjc2LDEzICsyNzYsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tQbGFuKFBsYW4mIHBsYW4sIHVuc2ln
bmVkIGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpCiAgICAgICAgIENSQVNIKCk7CiAgICAgfQog
Ci0gICAgaWYgKHBsYW4ucmVzdWx0U2l6ZSgpICE9IGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMp
IHsKKyAgICBpZiAocGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKSAhPSBleHBlY3RlZE51bWJl
ck9mRnVuY3Rpb25zKSB7CiAgICAgICAgIGRhdGFMb2dMbigiSW5jb3JyZWN0IG51bWJlciBvZiBm
dW5jdGlvbnMiKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhwZWN0ZWROdW1iZXJPZkZ1bmN0aW9uczsgKytpKSB7Ci0gICAgICAgIGlm
ICghcGxhbi5yZXN1bHQoaSkpIHsKKyAgICAgICAgaWYgKCFwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
aSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiRnVuY3Rpb24gYXQgaW5kZXgsICIgLCBpLCAi
IGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseSIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAg
ICAgICAgfQpAQCAtMzE0LDEwICszMTQsMTAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkK
ICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDIpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vz
bid0IGNyYXNoLgotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFu
LnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41
ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3Vs
dCgxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42
MjM0ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41Zikp
OwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0
ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwg
LTEuNWYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYo
MTIuNSkgfSksIDg3LjYyMzRmKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxm
bG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4w
KSwgYm94ZigxLjUpIH0pLCAtMS41ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZv
a2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hm
KDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgODcuNjIzNGYpKTsKICAgICB9CiAKICAgICB7CkBA
IC0zNDAsMTAgKzM0MCwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBj
aGVja1BsYW4ocGxhbiwgMik7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEp
LT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEuNWYpKTsKLSAgICAg
ICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSktPmpzRW50
cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYyMzRmKSk7Ci0g
ICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEuNWYpKTsKLSAgICAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYyMzRmKSk7CisgICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAxLjVmKSk7Cisg
ICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAx
MTIuNjIzNGYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEu
NSkgfSksIDEuNWYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCks
IGJveGYoMTIuNSkgfSksIDExMi42MjM0ZikpOwogICAgIH0KIAogICAgIHsKQEAgLTM3MSwxMSAr
MzcxLDExIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihw
bGFuLCAyKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEyMDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEy
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwg
Ym94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBi
b3goNyksIGJveCg4KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigx
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSB9KSwgMTIwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEyKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUpLCBib3goNiksIGJveCg3
KSwgYm94KDgpLCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJveCgxMikgfSksIDc4KTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUpLCBib3go
NiksIGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJveCgxMDApIH0p
LCAxNjYpOwogICAgIH0KIAogICAgIHsKQEAgLTQwMiwxMCArNDAyLDEwIEBAIHN0YXRpYyB2b2lk
IHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAxKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0pLCAyNCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSB9KSwgMik7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNCkg
fSksIDI0KTsKICAgICB9CiAKICAgICB7CkBAIC00MjUsMTggKzQyNSwxOCBAQCBzdGF0aWMgdm9p
ZCBydW5XYXNtVGVzdHMoKQogICAgICAgICB9OwogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZl
Y3Rvcik7Ci0gICAgICAgIGlmIChwbGFuLnJlc3VsdFNpemUoKSAhPSAyIHx8ICFwbGFuLnJlc3Vs
dCgwKSB8fCAhcGxhbi5yZXN1bHQoMSkpIHsKKyAgICAgICAgaWYgKHBsYW4uY29tcGlsZWRGdW5j
dGlvbkNvdW50KCkgIT0gMiB8fCAhcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApIHx8ICFwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxl
ZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MSktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDApIH0pLCAxMDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgxNSkgfSksIDE2KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkg
fSksIDIwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJv
eCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDApIH0pLCAxMDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTUpIH0pLCAxNik7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDIwMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSkgfSksIDIpOwogICAgIH0KIAogICAgIHsKQEAgLTQ1OSwxMiArNDU5LDEy
IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAy
KTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0p
LCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSks
IDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNDg4LDkgKzQ4
OCw5IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFu
LCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
LCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkg
fSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTUx
NSw5ICs1MTUsOSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1Bs
YW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKICAgICB9CiAKICAgICB7
CkBAIC01NTAsMTMgKzU1MCwxMyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAg
ICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsK
LSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChw
bGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3Rh
dGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgIGlu
dm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3Rh
dGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLmdldE1lbW9yeSgpLT5tZW1vcnkoKSk7CisgICAgICAg
IGludm9rZTx2b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAgICAgb2Zmc2V0IC89
IHNpemVvZih1aW50MzJfdCk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwg
MHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwpAQCAt
NTY1LDcgKzU2NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAgICAgbGVu
Z3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDUgKiBzaXplb2YodWludDMyX3QpOwotICAgICAg
ICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBi
b3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwg
Ym94KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwogICAg
ICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAgICAgICBDSEVDS19F
UShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwpAQCAtNjAyLDEzICs2MDIsMTMgQEAgc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3Ip
OwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VSVChwbGFuLm1lbW9y
eSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnkoKS0+c2l6ZSgpKTsK
IAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKLSAgICAgICAgdWludDhf
dCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgp
KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIHVpbnQ4X3Qq
IG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLmdldE1lbW9yeSgpLT5tZW1vcnko
KSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1l
bW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKQEAgLTYxNiw3ICs2MTYsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNt
VGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgICAgICBvZmZzZXQgPSA1OwotICAg
ICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUp
LCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0
KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwg
MTAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKQEAgLTY0MywxMiAr
NjQzLDEyIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAgICAgUGxhbiBwbGFu
KCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBBU1NF
UlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBsYW4uZ2V0TWVtb3J5
KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKICAgICB9CiAKICAgICB7
CkBAIC02NzMsOSArNjczLDkgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAg
Y2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNo
LgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CiAgICAg
fQogCiAgICAgewpAQCAtNzAwLDEwICs3MDAsMTAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KC0xMiksIGJveChwbGFuLm1lbW9yeSgpLT5zaXplKCkgLSBzaXplb2YodWludDY0X3QpKSB9
KSwgLTEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goLTEyKSwgYm94KHBsYW4uZ2V0
TWVtb3J5KCktPnNpemUoKSAtIHNpemVvZih1aW50NjRfdCkpIH0pLCAtMTIpOwogICAgIH0KIAog
ICAgIHsKQEAgLTcyOCw5ICs3MjgsOSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAg
ICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKICAg
ICB9CiAKICAgICB7CkBAIC03NjMsMTMgKzc2MywxMyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVz
dHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CiAgICAgICAgIGNoZWNrUGxh
bihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7CisgICAg
ICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB1aW50MzJfdCog
bWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7
Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50MzJfdCog
bWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwbGFuLmdldE1lbW9yeSgpLT5tZW1vcnko
KSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAg
ICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtv
ZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3Ro
XSwgMHUpOwpAQCAtNzc4LDcgKzc3OCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAK
ICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDUgKiBzaXplb2YodWludDMy
X3QpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9rZTx2
b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUpLCBi
b3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWlu
dDMyX3QpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAg
ICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwpAQCAtODE1LDEzICs4
MTUsMTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4o
KnZtLCB2ZWN0b3IpOwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VS
VChwbGFuLm1lbW9yeSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnko
KS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKLSAg
ICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5
KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAg
ICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLmdldE1lbW9y
eSgpLT5tZW1vcnkoKSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3Ro
KSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMg
dm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgICAgICBvZmZz
ZXQgPSA1OwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9r
ZTx2b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDUp
LCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtv
ZmZzZXQgLSAxXSwgMTAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5n
dGhdLCAwdSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
QEAgLTg1NiwxMiArODU2LDEyIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAg
ICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwot
ICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBs
YW4uZ2V0TWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKICAg
ICB9CiAKICAgICB7CkBAIC04ODYsOSArODg2LDkgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9
KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtOTEzLDE0ICs5MTMsMTQgQEAgc3RhdGljIHZvaWQg
cnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8v
IFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDApIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDEpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSksIDEpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDIpLCBib3goNikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwg
MSk7CiAgICAgfQogCiAgICAgewpAQCAtOTUxLDE0ICs5NTEsMTQgQEAgc3RhdGljIHZvaWQgcnVu
V2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3go
MSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIp
LCBib3goNikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7
CiAgICAgfQogCiAKQEAgLTk3NSw3ICs5NzUsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IH0pLCA1KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IH0pLCA1KTsKICAgICB9
CiAKIApAQCAtOTkzLDcgKzk5Myw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAg
ICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgfSksIDExKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAg
ICAgewpAQCAtMTAxMCw3ICsxMDEwLDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAg
ICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyB9KSwgMTEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKICAgICB9CiAK
ICAgICB7CkBAIC0xMDI3LDcgKzEwMjcsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQog
ICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwogICAgIH0K
IAogICAgIHsKQEAgLTEwNDMsMTAgKzEwNDMsMTAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goMSkgfSksIDEwMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgtMSksIGJveCgxKX0pLCAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWluKCkpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSks
IDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9KSwgMTAxKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgtMSksIGJveCgxKX0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveChzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKSwgYm94KDEpIH0pLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpKTsKICAgICB9CiAKICAgICB7CkBAIC0xMDY5LDggKzEwNjksOCBAQCBzdGF0
aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMCkgfSksIDEwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTApIH0pLCAxMCk7CiAgICAgfQogCiAgICAgewpAQCAtMTEwMiwxMCAr
MTEwMiwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4o
cGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAzKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCkgfSksIDUwNTApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMil9KSwgMyk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgNTA1MCk7CiAgICAgfQogCiAgICAgewpAQCAt
MTE0MywxNCArMTE0MywxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBj
aGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAy
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDQpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwg
MTIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCA2MDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KDEwMCkgfSksIDEwMDAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgyKSwgYm94KDEpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAy
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCA0KTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDYpIH0pLCAxMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYp
IH0pLCA2MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxMDApIH0pLCAxMDAwMCk7
CiAgICAgfQogCiAgICAgewpAQCAtMTE5MywxNCArMTE5MywxNCBAQCBzdGF0aWMgdm9pZCBydW5X
YXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgx
KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgyKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiks
IGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsK
ICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKaW5k
ZXggMmJkYzgwMC4uYmY4ZTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5jcHAKQEAgLTI0LDEwICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
KwogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAor
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAogY29uc3QgY2hhciogdG9TdHJpbmcoVHlwZSB0eXBlKQpAQCAtNDYsNiArNDksOCBAQCBj
b25zdCBjaGFyKiB0b1N0cmluZyhUeXBlIHR5cGUpCiAgICAgfQogfQogCitNb2R1bGVJbmZvcm1h
dGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCA4Mjg2YWVm
Li40OTk2NDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0y
MSwyMyArMjEsNiBAQAogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
KgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0aGUg
cmVwb3NpdG9yeSBhdXRob3JzIG9mCi0gKiBXZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUt
MS4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KICAqLwogCiAjcHJhZ21hIG9uY2UKQEAgLTk4LDM3ICs4MSw4MyBAQCBpbmxpbmUgYm9vbCBp
c1ZhbHVlVHlwZShUeXBlIHR5cGUpCiB9CiAKIGNvbnN0IGNoYXIqIHRvU3RyaW5nKFR5cGUpOwor
ICAgIAorc3RydWN0IEV4dGVybmFsIHsKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAg
ICAgRnVuY3Rpb24gPSAwLAorICAgICAgICBUYWJsZSA9IDEsCisgICAgICAgIE1lbW9yeSA9IDIs
CisgICAgICAgIEdsb2JhbCA9IDMsCisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZChJbnQgdmFsKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh2YWwpIHsKKyAgICAgICAgY2FzZSBGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBUYWJsZToKKyAg
ICAgICAgY2FzZSBNZW1vcnk6CisgICAgICAgIGNhc2UgR2xvYmFsOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljX2Fzc2VydChGdW5jdGlvbiA9PSAwLCAi
V2FzbSBuZWVkcyBGdW5jdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSAwIik7CisgICAgc3RhdGljX2Fz
c2VydChUYWJsZSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAx
Iik7CisgICAgc3RhdGljX2Fzc2VydChNZW1vcnkgICA9PSAyLCAiV2FzbSBuZWVkcyBNZW1vcnkg
dG8gaGF2ZSB0aGUgdmFsdWUgMiIpOworICAgIHN0YXRpY19hc3NlcnQoR2xvYmFsICAgPT0gMywg
Ildhc20gbmVlZHMgR2xvYmFsIHRvIGhhdmUgdGhlIHZhbHVlIDMiKTsKK307CiAKIHN0cnVjdCBT
aWduYXR1cmUgewogICAgIFR5cGUgcmV0dXJuVHlwZTsKICAgICBWZWN0b3I8VHlwZT4gYXJndW1l
bnRzOwogfTsKLQotc3RydWN0IEZ1bmN0aW9uSW1wb3J0IHsKLSAgICBTdHJpbmcgZnVuY3Rpb25O
YW1lOworICAgIAorc3RydWN0IEltcG9ydCB7CisgICAgU3RyaW5nIG1vZHVsZTsKKyAgICBTdHJp
bmcgZmllbGQ7CisgICAgRXh0ZXJuYWw6OktpbmQga2luZDsKKyAgICB1bmlvbiB7CisgICAgICAg
IFNpZ25hdHVyZSogZnVuY3Rpb25TaWduYXR1cmU7CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVu
dCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Cisg
ICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEzNAorICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgR2xvYmFs
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKKyAgICB9Owog
fTsKIAotc3RydWN0IEZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIHsKLSAgICB1aW50MzJfdCBzaWdu
YXR1cmVJbmRleDsKLSAgICB1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4Oworc3RydWN0IEZ1
bmN0aW9uSW5mb3JtYXRpb24geworICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOworICAgIHNpemVf
dCBzdGFydDsKKyAgICBzaXplX3QgZW5kOwogfTsKIAotc3RydWN0IEZ1bmN0aW9uRGVjbGFyYXRp
b24gewotICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworY2xhc3MgTWVtb3J5OworCitzdHJ1
Y3QgRXhwb3J0IHsKKyAgICBTdHJpbmcgZmllbGQ7CisgICAgRXh0ZXJuYWw6OktpbmQga2luZDsK
KyAgICB1bmlvbiB7CisgICAgICAgIFNpZ25hdHVyZSogZnVuY3Rpb25TaWduYXR1cmU7CisgICAg
ICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAorICAgICAgICAvLyBG
SVhNRSBpbXBsZW1lbnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQxMzMKKyAgICB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9uUG9pbnRlclRhYmxlIHsK
LSAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmN0
aW9uSW5kaWNlczsKLSAgICBWZWN0b3I8SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKLX07CitzdHJ1
Y3QgTW9kdWxlSW5mb3JtYXRpb24geworICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXM7
CisgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0czsKKyAgICBWZWN0b3I8RnVuY3Rpb25JbmZvcm1h
dGlvbj4gZnVuY3Rpb25zOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1lbW9yeTsKKyAg
ICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogCi1zdHJ1Y3QgRnVuY3Rpb25JbmZvcm1hdGlvbiB7
Ci0gICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7Ci0gICAgc2l6ZV90IHN0YXJ0OwotICAgIHNpemVf
dCBlbmQ7CisgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwogCitzdHJ1Y3QgRnVuY3Rpb25D
b21waWxhdGlvbjsKK3R5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBp
bGF0aW9uPj4gQ29tcGlsZWRGdW5jdGlvbnM7CisKIHN0cnVjdCBVbmxpbmtlZENhbGwgewogICAg
IENvZGVMb2NhdGlvbkNhbGwgY2FsbExvY2F0aW9uOwogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcApp
bmRleCA1NWMyMTJlLi5lZDFiNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlUGFyc2VyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCkBA
IC00MCw2ICs0MSw4IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKIHsKKyAgICBtX21vZHVsZSA9IHN0ZDo6bWFrZV91bmlx
dWU8TW9kdWxlSW5mb3JtYXRpb24+KCk7CisKICAgICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7
CiAgICAgaWYgKGxlbmd0aCgpIDwgbWluU2l6ZSkgewogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9
ICJNb2R1bGUgaXMgIiArIFN0cmluZzo6bnVtYmVyKGxlbmd0aCgpKSArICIgYnl0ZXMsIGV4cGVj
dGVkIGF0IGxlYXN0ICIgKyBTdHJpbmc6Om51bWJlcihtaW5TaXplKSArICIgYnl0ZXMiOwpAQCAt
MTExLDU0ICsxMTQsMjAgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgYXV0
byBlbmQgPSBtX29mZnNldCArIHNlY3Rpb25MZW5ndGg7CiAKICAgICAgICAgc3dpdGNoIChzZWN0
aW9uKSB7Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgTWVtb3J5LiIp
OwotICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM5MTkKLSAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3Vs
ZG4ndCBwYXJzZSBtZW1vcnkiOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBT
ZWN0aW9uczo6RnVuY3Rpb25UeXBlczogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIHR5cGVzLiIpOwotICAgICAgICAgICAgaWYg
KCFwYXJzZUZ1bmN0aW9uVHlwZXMoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJv
dmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzOTE5Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2Ug
dHlwZXMiOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6U2ln
bmF0dXJlczogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIik7Ci0gICAgICAgICAgICBpZiAo
IXBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBp
bXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzkxOQotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBh
cnNlIGZ1bmN0aW9uIHNpZ25hdHVyZXMiOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBTZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBkZWZpbml0aW9ucy4i
KTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIGZ1bmN0aW9uIGRlZmluaXRpb25zIjsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgU2VjdGlvbnM6OlVua25vd246Ci0gICAgICAgIC8v
IEZJWE1FOiBEZWxldGUgdGhpcyB3aGVuIHdlIHN1cHBvcnQgYWxsIHRoZSBzZWN0aW9ucy4KLSAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2Ug
aW4gbWFjcm8gYmVsb3cgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzkxOQorI2RlZmluZSBXQVNNX1NFQ1RJT05fUEFSU0UoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBc
CisgICAgICAgIGNhc2UgU2VjdGlvbnM6Ok5BTUU6IHsgXAorICAgICAgICAgICAgaWYgKHZlcmJv
c2UpIFwKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgIiBERVNDUklQVElPTik7
IFwKKyAgICAgICAgICAgIGlmICghcGFyc2UgIyMgTkFNRSgpKSB7IFwKKyAgICAgICAgICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uICIgI05BTUUgIjogIiBE
RVNDUklQVElPTjsgXAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgXAorICAgICAgICAg
ICAgfSBcCisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihX
QVNNX1NFQ1RJT05fUEFSU0UpCisjdW5kZWYgV0FTTV9TRUNUSU9OX1BBUlNFCisKKyAgICAgICAg
Y2FzZSBTZWN0aW9uczo6VW5rbm93bjogewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJVbmtub3duIHNlY3Rpb24sIHNraXBwaW5nLiIpOwogICAg
ICAgICAgICAgLy8gSWdub3JlIHNlY3Rpb24ncyBuYW1lIExFQiBhbmQgYnl0ZXM6IHRoZXkncmUg
YWxyZWFkeSBpbmNsdWRlZCBpbiBzZWN0aW9uTGVuZ3RoLgpAQCAtMTg0LDc4ICsxNTMsNTAgQEAg
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkKLXsKLSAgICB1aW50OF90IGZsYWdzOwotICAgIGlm
ICghcGFyc2VWYXJVSW50MShmbGFncykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVp
bnQzMl90IHNpemU7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihzaXplKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChzaXplID4gbWF4UGFnZUNvdW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICB1aW50MzJfdCBjYXBhY2l0eSA9IG1heFBhZ2VDb3VudDsKLSAgICBpZiAo
ZmxhZ3MpIHsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjYXBhY2l0eSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkgfHwgY2FwYWNp
dHkgPiBtYXhQYWdlQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgY2FwYWNpdHkgKj0gcGFnZVNpemU7Ci0gICAgc2l6ZSAqPSBwYWdlU2l6ZTsKLQotICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKLSAgICBtX21lbW9yeSA9IHN0ZDo6
bWFrZV91bmlxdWU8TWVtb3J5PihzaXplLCBjYXBhY2l0eSwgcGlubmVkU2l6ZXMpOwotICAgIHJl
dHVybiBtX21lbW9yeS0+bWVtb3J5KCk7Ci19Ci0KLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1
bmN0aW9uVHlwZXMoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpCiB7CiAgICAgdWlu
dDMyX3QgY291bnQ7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nTG4oImNvdW50
OiAiLCBjb3VudCk7Ci0KLSAgICBtX3NpZ25hdHVyZXMucmVzaXplKGNvdW50KTsKLQorICAgIGlm
ICghbV9tb2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CiAgICAgICAgIHVpbnQ4X3QgdHlwZTsKICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3
KHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodHlwZSAhPSAw
eDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50LgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCisgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dM
bigiR290IGZ1bmN0aW9uIHR5cGUuIik7Ci0KKyAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IGFy
Z3VtZW50Q291bnQ7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJhcmd1bWVudENvdW50OiAiLCBhcmd1bWVudENv
dW50KTsKLQorICAgICAgICAKICAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0g
ICAgICAgIGFyZ3VtZW50VHlwZXMucmVzaXplKGFyZ3VtZW50Q291bnQpOworICAgICAgICBpZiAo
IWFyZ3VtZW50VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBh
cmd1bWVudENvdW50OyArK2kpIHsKICAgICAgICAgICAgIGlmICghcGFyc2VVSW50Nyh0eXBlKSB8
fCAhaXNWYWx1ZVR5cGUoc3RhdGljX2Nhc3Q8VHlwZT4odHlwZSkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXNbaV0gPSBzdGF0aWNfY2Fz
dDxUeXBlPih0eXBlKTsKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMudW5jaGVja2VkQXBwZW5k
KHN0YXRpY19jYXN0PFR5cGU+KHR5cGUpKTsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDEodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIFR5cGUgcmV0dXJuVHlwZTsKLQorICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmICh0
eXBlKSB7CiAgICAgICAgICAgICBUeXBlIHZhbHVlOwogICAgICAgICAgICAgaWYgKCFwYXJzZVZh
bHVlVHlwZSh2YWx1ZSkpCkBAIC0yNjQsNDggKzIwNSwxOTUgQEAgYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlRnVuY3Rpb25UeXBlcygpCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJu
VHlwZSA9IFR5cGU6OlZvaWQ7CiAKLSAgICAgICAgbV9zaWduYXR1cmVzW2ldID0geyByZXR1cm5U
eXBlLCBXVEZNb3ZlKGFyZ3VtZW50VHlwZXMpIH07CisgICAgICAgIG1fbW9kdWxlLT5zaWduYXR1
cmVzLnVuY2hlY2tlZEFwcGVuZCh7IHJldHVyblR5cGUsIFdURk1vdmUoYXJndW1lbnRUeXBlcykg
fSk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFy
c2VGdW5jdGlvblNpZ25hdHVyZXMoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkK
IHsKLSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkK
KyAgICB1aW50MzJfdCBpbXBvcnRDb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGltcG9y
dENvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9tb2R1bGUtPmltcG9y
dHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbV9mdW5jdGlvbnMucmVzaXplKGNvdW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGlt
cG9ydE51bWJlciA9IDA7IGltcG9ydE51bWJlciAhPSBpbXBvcnRDb3VudDsgKytpbXBvcnROdW1i
ZXIpIHsKKyAgICAgICAgSW1wb3J0IGk7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAg
ICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobW9k
dWxlTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjb25zdW1l
VVRGOFN0cmluZyhpLm1vZHVsZSwgbW9kdWxlTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghY29uc3VtZVVURjhTdHJpbmcoaS5maWVsZCwgZmll
bGRMZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXBhcnNlRXh0
ZXJuYWxLaW5kKGkua2luZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3
aXRjaCAoaS5raW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6OkZ1bmN0aW9uOiB7CisgICAg
ICAgICAgICB1aW50MzJfdCBmdW5jdGlvblNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+
IG1fbW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpLmZ1bmN0aW9uU2lnbmF0dXJlID0gJm1fbW9kdWxlLT5zaWduYXR1
cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdOworICAgICAgICB9IGJyZWFrOworICAgICAgICBj
YXNlIEV4dGVybmFsOjpUYWJsZToKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOgorICAgICAgICAgICAgLy8gRklYTUUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgICAgICAg
ICAgLy8gSW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFsIHZhcmlhYmxlcyBjYW4gYmUg
aW1wb3J0ZWQuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIG1fbW9k
dWxlLT5pbXBvcnRzLnVuY2hlY2tlZEFwcGVuZChpKTsKKyAgICB9CiAKLSAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgIHJldHVybiB0cnVlOworfQorICAgIAor
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24oKQoreworICAgIHVpbnQzMl90IGNvdW50
OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFtX21vZHVsZS0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
ICE9IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKICAgICAgICAg
aWYgKCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBpZiAodHlwZU51bWJlciA+PSBtX3NpZ25hdHVyZXMuc2l6ZSgpKQorICAg
ICAgICAKKyAgICAgICAgaWYgKHR5cGVOdW1iZXIgPj0gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fZnVuY3Rpb25zW2ld
LnNpZ25hdHVyZSA9ICZtX3NpZ25hdHVyZXNbdHlwZU51bWJlcl07CisgICAgICAgIG1fbW9kdWxl
LT5mdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHsgJm1fbW9kdWxlLT5zaWduYXR1cmVzW3R5cGVO
dW1iZXJdLCAwLCAwIH0pOwogICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAK
K2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkKK3sKKyAgICAvLyBGSVhNRQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQoreworICAg
IHVpbnQ4X3QgZmxhZ3M7CisgICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNpemUgPiBtYXhQYWdl
Q291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIHVpbnQzMl90IGNhcGFjaXR5ID0g
bWF4UGFnZUNvdW50OworICAgIGlmIChmbGFncykgeworICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNp
emUgPiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKKyAgICBzaXpl
ICo9IHBhZ2VTaXplOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9
OworICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lbW9yeT4oc2l6ZSwg
Y2FwYWNpdHksIHBpbm5lZFNpemVzKTsKKyAgICByZXR1cm4gbV9tb2R1bGUtPm1lbW9yeS0+bWVt
b3J5KCk7Cit9CisgICAgCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKQoreworICAg
IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9y
dCgpCit7CisgICAgdWludDMyX3QgZXhwb3J0Q291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQz
MihleHBvcnRDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fbW9kdWxl
LT5leHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBvcnRDb3VudCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4cG9y
dE51bWJlciAhPSBleHBvcnRDb3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgRXhwb3J0
IGU7CisgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOworICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKGZpZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFj
b25zdW1lVVRGOFN0cmluZyhlLmZpZWxkLCBmaWVsZExlbikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtpbmQoZS5raW5kKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChlLmtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBFeHRlcm5hbDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2ln
bmF0dXJlSW5kZXg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2ln
bmF0dXJlSW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChmdW5jdGlvblNpZ25hdHVyZUluZGV4ID4gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGUuZnVuY3Rpb25T
aWduYXR1cmUgPSAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF07
CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOgorICAgICAg
ICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDEzNQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1lbW9yeToK
KyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQxMzQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4dGVybmFsOjpH
bG9iYWw6CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MTMzCisgICAgICAgICAgICAvLyBJbiB0aGUgTVZQLCBvbmx5IGltbXV0
YWJsZSBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSBleHBvcnRlZC4KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX21vZHVsZS0+ZXhwb3J0cy51bmNoZWNr
ZWRBcHBlbmQoZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlU3RhcnQoKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJu
IHRydWU7Cit9CisgICAgCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkKK3sKKyAg
ICAvLyBGSVhNRQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFy
c2VGdW5jdGlvbkRlZmluaXRpb25zKCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKQog
ewogICAgIHVpbnQzMl90IGNvdW50OwogICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY291bnQgIT0gbV9mdW5jdGlvbnMuc2l6
ZSgpKQorICAgIGlmIChjb3VudCAhPSBtX21vZHVsZS0+ZnVuY3Rpb25zLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpICE9IGNvdW50OyArK2kpIHsKICAgICAg
ICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwogICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1
bmN0aW9uU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmdW5j
dGlvblNpemUgPiBsZW5ndGgoKSB8fCBmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEZ1bmN0aW9uSW5mb3JtYXRp
b24mIGluZm8gPSBtX2Z1bmN0aW9uc1tpXTsKKyAgICAgICAgRnVuY3Rpb25JbmZvcm1hdGlvbiYg
aW5mbyA9IG1fbW9kdWxlLT5mdW5jdGlvbnNbaV07CiAgICAgICAgIGluZm8uc3RhcnQgPSBtX29m
ZnNldDsKICAgICAgICAgaW5mby5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKICAgICAg
ICAgbV9vZmZzZXQgPSBpbmZvLmVuZDsKQEAgLTMxMyw2ICs0MDEsMTIgQEAgYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
KyAgICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKQoreworICAgIC8vIEZJWE1FCisg
ICAgcmV0dXJuIHRydWU7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCAzODI5M2Fj
Li44OTliZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUg
Ildhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNTYsMjcgKzU2LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXJyb3JN
ZXNzYWdlOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYg
ZnVuY3Rpb25JbmZvcm1hdGlvbigpIGNvbnN0CisgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUlu
Zm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24oKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25zOwotICAgIH0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiYgbWVtb3J5KCkKLSAgICB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX21lbW9yeTsKKyAgICAgICAg
cmV0dXJuIG1fbW9kdWxlOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZU1lbW9yeSgpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNl
RnVuY3Rpb25UeXBlcygpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rp
b25TaWduYXR1cmVzKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlv
bkRlZmluaXRpb25zKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlv
bkRlZmluaXRpb24odWludDMyX3QgbnVtYmVyKTsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xB
UkVfUEFSU0VSKE5BTUUsIElELCBERVNDUklQVElPTikgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
cGFyc2UgIyMgTkFNRSgpOworICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05f
REVDTEFSRV9QQVJTRVIpCisjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKLSAg
ICBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4gbV9mdW5jdGlvbnM7Ci0gICAgVmVjdG9yPFNp
Z25hdHVyZT4gbV9zaWduYXR1cmVzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1fbWVt
b3J5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAg
ICAgYm9vbCBtX2ZhaWxlZCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCmluZGV4IDQ2YTdiMzkuLjE3
MmJkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgi
CiAjaW5jbHVkZSA8d3RmL0xFQkRlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNDIsNiArNDMs
NyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1lQ2hh
cmFjdGVyKGNoYXIpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVTdHJpbmco
Y29uc3QgY2hhciopOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNvbnN1bWVVVEY4U3Ry
aW5nKFN0cmluZyAmLCBzaXplX3QpOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KTsKQEAgLTUwLDYgKzUyLDcgQEAgcHJvdGVjdGVk
OgogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiBy
ZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLCBt
X3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7IH0KIAogICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWw6OktpbmQmIHJlc3VsdCk7CiAK
ICAgICBjb25zdCB1aW50OF90KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQog
ICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUxlbmd0aDsgfQpAQCAt
OTIsNiArOTUsMjEgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVN0cmluZyhj
b25zdCBjaGFyKiBzdHIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9v
bCBQYXJzZXI6OmNvbnN1bWVVVEY4U3RyaW5nKFN0cmluZyAmcmVzdWx0LCBzaXplX3Qgc3RyaW5n
TGVuZ3RoKQoreworICAgIGlmIChzdHJpbmdMZW5ndGggPT0gMCkgeworICAgICAgICByZXN1bHQg
PSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChsZW5ndGgo
KSA8IHN0cmluZ0xlbmd0aCB8fCBtX29mZnNldCA+IGxlbmd0aCgpIC0gc3RyaW5nTGVuZ3RoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChzdGF0
aWNfY2FzdDxjb25zdCBMQ2hhcio+KCZzb3VyY2UoKVttX29mZnNldF0pLCBzdHJpbmdMZW5ndGgp
OworICAgIG1fb2Zmc2V0ICs9IHN0cmluZ0xlbmd0aDsKKyAgICBpZiAocmVzdWx0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCiBBTFdBWVNf
SU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogewogICAg
IGlmIChsZW5ndGgoKSA8IDQgfHwgbV9vZmZzZXQgPiBsZW5ndGgoKSAtIDQpCkBAIC0xMjgsNiAr
MTQ2LDE3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFR5cGUm
IHJlc3VsdCkKICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CisgICAgCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZUV4dGVy
bmFsS2luZChFeHRlcm5hbDo6S2luZCYgcmVzdWx0KQoreworICAgIHVpbnQ4X3QgdmFsdWU7Cisg
ICAgaWYgKCFwYXJzZVVJbnQ3KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghRXh0ZXJuYWw6OmlzVmFsaWQodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8RXh0ZXJuYWw6OktpbmQ+KHZhbHVlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwCmluZGV4IDczOWJlNDIuLjJlMDI4ZDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTMxLDkgKzMxLDExIEBACiAjaW5jbHVk
ZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgog
I2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIKICNpbmNsdWRlICJXYXNtVmFsaWRhdGUuaCIK
ICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNDgsNDAgKzUw
LDUwIEBAIFBsYW46OlBsYW4oVk0mIHZtLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBz
b3VyY2VMZW5ndGgpCiB7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiU3Rh
cnRpbmcgcGxhbi4iKTsKLSAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSwgc291
cmNlTGVuZ3RoKTsKLSAgICBpZiAoIW1vZHVsZVBhcnNlci5wYXJzZSgpKSB7Ci0gICAgICAgIGRh
dGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkOiAiLCBtb2R1bGVQYXJzZXIuZXJyb3JNZXNz
YWdlKCkpOwotICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1vZHVsZVBhcnNlci5lcnJvck1lc3Nh
Z2UoKTsKLSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVs
ZVBhcnNlcihzb3VyY2UsIHNvdXJjZUxlbmd0aCk7CisgICAgICAgIGlmICghbW9kdWxlUGFyc2Vy
LnBhcnNlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVk
OiAiLCBtb2R1bGVQYXJzZXIuZXJyb3JNZXNzYWdlKCkpOworICAgICAgICAgICAgbV9lcnJvck1l
c3NhZ2UgPSBtb2R1bGVQYXJzZXIuZXJyb3JNZXNzYWdlKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbV9tb2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUobW9kdWxl
UGFyc2VyLm1vZHVsZUluZm9ybWF0aW9uKCkpOwogICAgIH0KLQogICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nTG4oIlBhcnNlZCBtb2R1bGUuIik7CiAKLSAgICBmb3IgKGNvbnN0IEZ1
bmN0aW9uSW5mb3JtYXRpb24mIGluZm8gOiBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1hdGlv
bigpKSB7CisgICAgaWYgKCFtX2NvbXBpbGVkRnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eSht
X21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpKSkgeworICAgICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIGFs
bG9jYXRpbmcgZW5vdWdoIHNwYWNlIGZvciAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1i
ZXIobV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbXBpbGVkIGZ1bmN0aW9ucyIpOworICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmZ1bmN0aW9ucykgewogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jaW9uIHN0YXJ0aW5nIGF0OiAiLCBpbmZvLnN0YXJ0LCAi
IGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8uZW5kKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUHJv
Y2Vzc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwgIiBhbmQgZW5kaW5n
IGF0OiAiLCBpbmZvLmVuZCk7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQg
PSBzb3VyY2UgKyBpbmZvLnN0YXJ0OwogICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBp
bmZvLmVuZCAtIGluZm8uc3RhcnQ7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBz
b3VyY2VMZW5ndGgpOwogCi0gICAgICAgIFN0cmluZyBlcnJvciA9IHZhbGlkYXRlRnVuY3Rpb24o
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIGluZm8uc2lnbmF0dXJlLCBtb2R1bGVQYXJz
ZXIuZnVuY3Rpb25JbmZvcm1hdGlvbigpKTsKKyAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRh
dGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgaW5mby5zaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucyk7CiAgICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3I7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3Jlc3VsdC5hcHBlbmQocGFyc2VBbmRD
b21waWxlKHZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbW9kdWxlUGFyc2VyLm1l
bW9yeSgpLmdldCgpLCBpbmZvLnNpZ25hdHVyZSwgbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3Jt
YXRpb24oKSkpOworICAgICAgICBtX2NvbXBpbGVkRnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChw
YXJzZUFuZENvbXBpbGUodm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5tZW1vcnkuZ2V0KCksIGluZm8uc2lnbmF0dXJlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnMpKTsKICAgICB9CiAKICAgICAvLyBQYXRjaCB0aGUgY2FsbCBzaXRl
cyBmb3IgZWFjaCBmdW5jdGlvbi4KLSAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
bXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIgOiBtX3Jlc3VsdCkgeworICAgIGZvciAoc3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlvblB0ciA6IG1fY29tcGlsZWRGdW5j
dGlvbnMpIHsKICAgICAgICAgRnVuY3Rpb25Db21waWxhdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlv
blB0ci5nZXQoKTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogZnVuY3Rpb24tPnVubGlua2Vk
Q2FsbHMpCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKG1fcmVzdWx0W2NhbGwuZnVuY3Rpb25JbmRleF0t
PmNvZGUtPmNvZGUoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChtX2NvbXBpbGVkRnVuY3Rpb25z
W2NhbGwuZnVuY3Rpb25JbmRleF0tPmNvZGUtPmNvZGUoKSkpOwogICAgIH0KIAotICAgIG1fbWVt
b3J5ID0gV1RGTW92ZShtb2R1bGVQYXJzZXIubWVtb3J5KCkpOwogICAgIG1fZmFpbGVkID0gZmFs
c2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IGI4NGY5ZDcu
LmE3YzgwNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMzgsOCAr
MzgsNiBAQCBjbGFzcyBNZW1vcnk7CiAKIGNsYXNzIFBsYW4gewogcHVibGljOgotICAgIHR5cGVk
ZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPj4gQ29tcGlsZWRG
dW5jdGlvbnM7Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVpbnQ4
X3Q+KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNJiwgY29uc3QgdWludDhfdCosIHNp
emVfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKQEAgLTUwLDM2ICs0OCwzNyBA
QCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhaWxlZCgpKTsKICAgICAgICAgcmV0
dXJuIG1fZXJyb3JNZXNzYWdlOwogICAgIH0KLSAgICBzaXplX3QgcmVzdWx0U2l6ZSgpIGNvbnN0
CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYgZ2V0TW9kdWxl
SW5mb3JtYXRpb24oKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsK
LSAgICAgICAgcmV0dXJuIG1fcmVzdWx0LnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxl
SW5mb3JtYXRpb247CiAgICAgfQotICAgIGNvbnN0IEZ1bmN0aW9uQ29tcGlsYXRpb24qIHJlc3Vs
dChzaXplX3QgbikgY29uc3QKKyAgICBjb25zdCBNZW1vcnkqIGdldE1lbW9yeSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4g
bV9yZXN1bHQuYXQobikuZ2V0KCk7CisgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9u
LT5tZW1vcnkuZ2V0KCk7CiAgICAgfQotICAgIGNvbnN0IE1lbW9yeSogbWVtb3J5KCkgY29uc3QK
KyAgICBzaXplX3QgY29tcGlsZWRGdW5jdGlvbkNvdW50KCkgY29uc3QKICAgICB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX21lbW9yeS5nZXQo
KTsKKyAgICAgICAgcmV0dXJuIG1fY29tcGlsZWRGdW5jdGlvbnMuc2l6ZSgpOwogICAgIH0KLSAg
ICAKLSAgICBDb21waWxlZEZ1bmN0aW9ucyogZ2V0RnVuY3Rpb25zKCkKKyAgICBjb25zdCBGdW5j
dGlvbkNvbXBpbGF0aW9uKiBjb21waWxlZEZ1bmN0aW9uKHNpemVfdCBpKSBjb25zdAogICAgIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuICZtX3Jl
c3VsdDsKKyAgICAgICAgcmV0dXJuIG1fY29tcGlsZWRGdW5jdGlvbnMuYXQoaSkuZ2V0KCk7CiAg
ICAgfQotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+KiBnZXRNZW1vcnkoKQorICAgIENvbXBp
bGVkRnVuY3Rpb25zJiBnZXRDb21waWxlZEZ1bmN0aW9ucygpCiAgICAgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gJm1fbWVtb3J5OworICAgICAg
ICByZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9uczsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29t
cGlsZWRGdW5jdGlvbnMgbV9yZXN1bHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbV9t
ZW1vcnk7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUlu
Zm9ybWF0aW9uOworICAgIENvbXBpbGVkRnVuY3Rpb25zIG1fY29tcGlsZWRGdW5jdGlvbnM7CisK
ICAgICBib29sIG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCmluZGV4IDcyNTc4
NjcuLjk5NjA1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
ZWN0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5o
CkBAIC0yOSwxMiArMjksMjQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
IAorI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NFQ1RJT04obWFjcm8pIFwKKyAgICBtYWNybyhUeXBl
LCAgICAgMSwgIkZ1bmN0aW9uIHNpZ25hdHVyZSBkZWNsYXJhdGlvbnMiKSBcCisgICAgbWFjcm8o
SW1wb3J0LCAgIDIsICJJbXBvcnQgZGVjbGFyYXRpb25zIikgXAorICAgIG1hY3JvKEZ1bmN0aW9u
LCAzLCAiRnVuY3Rpb24gZGVjbGFyYXRpb25zIikgXAorICAgIG1hY3JvKFRhYmxlLCAgICA0LCAi
SW5kaXJlY3QgZnVuY3Rpb24gdGFibGUgYW5kIG90aGVyIHRhYmxlcyIpIFwKKyAgICBtYWNybyhN
ZW1vcnksICAgNSwgIk1lbW9yeSBhdHRyaWJ1dGVzIikgXAorICAgIG1hY3JvKEdsb2JhbCwgICA2
LCAiR2xvYmFsIGRlY2xhcmF0aW9ucyIpIFwKKyAgICBtYWNybyhFeHBvcnQsICAgNywgIkV4cG9y
dHMiKSBcCisgICAgbWFjcm8oU3RhcnQsICAgIDgsICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlv
biIpIFwKKyAgICBtYWNybyhFbGVtZW50LCAgOSwgIkVsZW1lbnRzIHNlY3Rpb24iKSBcCisgICAg
bWFjcm8oQ29kZSwgICAgMTAsICJGdW5jdGlvbiBib2RpZXMgKGNvZGUpIikgXAorICAgIG1hY3Jv
KERhdGEsICAgIDExLCAiRGF0YSBzZWdtZW50cyIpCisKIHN0cnVjdCBTZWN0aW9ucyB7CiAgICAg
ZW51bSBTZWN0aW9uIDogdWludDhfdCB7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZXMgPSAxLAotICAg
ICAgICBTaWduYXR1cmVzID0gMywKLSAgICAgICAgTWVtb3J5ID0gNSwKLSAgICAgICAgRGVmaW5p
dGlvbnMgPSAxMCwKKyNkZWZpbmUgREVGSU5FX1dBU01fU0VDVElPTl9FTlVNKE5BTUUsIElELCBE
RVNDUklQVElPTikgTkFNRSA9IElELAorICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT04oREVG
SU5FX1dBU01fU0VDVElPTl9FTlVNKQorI3VuZGVmIERFRklORV9XQVNNX1NFQ1RJT05fRU5VTQog
ICAgICAgICBVbmtub3duCiAgICAgfTsKICAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZU9yZGVyKFNl
Y3Rpb24gcHJldmlvdXMsIFNlY3Rpb24gbmV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggNjVjY2E5NS4uZDZi
YTM4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1vZHVsZS5jcHAKQEAgLTM1LDkgKzM1LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0
aW9uQ29tcGlsYXRpb24+PiogY29tcGlsZWRGdW5jdGlvbnMsIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNZW1vcnk+KiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRy
PFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIFdhc206OkNvbXBp
bGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucykKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXAp
KSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIGNvbXBpbGVkRnVuY3Rpb25zLCBt
ZW1vcnkpOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0
cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24sIGNvbXBpbGVkRnVuY3Rpb25zKTsKICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTQ3
LDEwICs0NywxMCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1vZHVsZTo6
SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiogY29tcGlsZWRGdW5j
dGlvbnMsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+KiBtZW1vcnkpCitKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9y
bWF0aW9uLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMpCiAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1vdmUo
KmNvbXBpbGVkRnVuY3Rpb25zKSkKLSAgICAsIG1fbWVtb3J5KFdURk1vdmUoKm1lbW9yeSkpCisg
ICAgLCBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pKQorICAg
ICwgbV9jb21waWxlZEZ1bmN0aW9ucyhXVEZNb3ZlKGNvbXBpbGVkRnVuY3Rpb25zKSkKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5oCmluZGV4IGE0MzhhNjEuLjlkYTIxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTI5LDMyICsyOSwzMiBA
QAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVz
cGFjZSBXYXNtIHsKLXN0cnVjdCBGdW5jdGlvbkNvbXBpbGF0aW9uOwotY2xhc3MgTWVtb3J5Owot
fQotCiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAK
LSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4qLCBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24+JiwgV2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
CiAgICAgREVDTEFSRV9JTkZPOwogCisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24q
IG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpOworICAgIH0KKwogcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1i
bHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1
bmN0aW9uQ29tcGlsYXRpb24+PiosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+Kik7Cisg
ICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYpOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKLQogcHJpdmF0ZToKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9u
Q29tcGlsYXRpb24+PiBtX2NvbXBpbGVkRnVuY3Rpb25zOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNZW1vcnk+IG1fbWVtb3J5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKKyAgICBXYXNtOjpDb21waWxlZEZ1bmN0
aW9ucyBtX2NvbXBpbGVkRnVuY3Rpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCBhOWZmMTFkLi5jOGFlYTJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTY0LDggKzY0LDkgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4
ZWNTdGF0ZSogc3QKICAgICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWlt
cG9ydE9iamVjdCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNv
bmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRlZmluZWQgb3Ig
YW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShp
bXBvcnRBcmd1bWVudCkpKSk7CiAKLSAgICAvLyBGSVhNRSB1c2UgdGhlIGltcG9ydE9iamVjdC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDAzOQogICAgIC8vIElm
IHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBvcnRP
YmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KKyAgICBpZiAobW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLT5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBz
Y29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVu
dCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIE9iamVjdCBiZWNhdXNlIHRoZSBXZWJB
c3NlbWJseS5Nb2R1bGUgaGFzIGltcG9ydHMiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50
aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKIAogICAgIC8vIEZJWE1FIFN0cmlu
ZyB0aGluZ3MgZnJvbSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
MDIzCiAgICAgLy8gTGV0IGV4cG9ydHMgYmUgYSBsaXN0IG9mIChzdHJpbmcsIEpTIHZhbHVlKSBw
YWlycyB0aGF0IGlzIG1hcHBlZCBmcm9tIGVhY2ggZXh0ZXJuYWwgdmFsdWUgZSBpbiBpbnN0YW5j
ZS5leHBvcnRzIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDFj
NTgyYjQuLmNmY2FjNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC00Nyw2ICs0
Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBzdGF0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIEZJ
WE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRl
RXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVt
ZW50IHRoZSBNZW1vcnkgY29uc3RydWN0b3IgcHJvcGVydHkiKSkpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZUNvbnN0cnVjdG9yLmNwcAppbmRleCAwYjA1NWEwLi5iYjY4NGUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmNwcApAQCAtNzMsMTMgKzczLDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0
CiAgICAgaWYgKHBsYW4uZmFpbGVkKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVXZWJBc3NlbWJseUNvbXBpbGVFcnJv
cihzdGF0ZSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpKTsKIAotICAgIC8vIFRoZSBzcGVjIHN0cmlu
ZyB2YWx1ZXMgaW5zaWRlIEFzdC5tb2R1bGUgYXJlIGRlY29kZWQgYXMgVVRGOCBhcyBkZXNjcmli
ZWQgaW4gV2ViLm1kLiBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MDIzCi0KICAgICAvLyBPbiBzdWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUg
b2JqZWN0IGlzIHJldHVybmVkIHdpdGggW1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBB
c3QubW9kdWxlLgogICAgIGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGFzSW50ZXJuYWxG
dW5jdGlvbihzdGF0ZS0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1
bGVTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNb2R1
bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBwbGFuLmdldEZ1bmN0aW9ucygpLCBwbGFuLmdldE1l
bW9yeSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TW9kdWxl
OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFu
LmdldENvbXBpbGVkRnVuY3Rpb25zKCkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlQ29uc3RydWN0b3IuY3BwCmluZGV4IGNhYTdlOWUuLmM5NTgwYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJs
ZUNvbnN0cnVjdG9yLmNwcApAQCAtNDcsNiArNDcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0
ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgVGFibGUgY29uc3RydWN0b3IgcHJv
cGVydHkiKSkpKTsKIH0KIAotLSAKMi4xMC4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293726</attachid>
            <date>2016-11-02 17:42:23 -0700</date>
            <delta_ts>2016-11-03 17:29:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-more-sections.patch</filename>
            <type>text/plain</type>
            <size>138055</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBkNDhmZTI0MzI3NmMzMDBiZTVhOWEwMjhkMzBkZWQyN2VkNDQwOTc3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDI3IE9jdCAyMDE2IDE0OjM0OjA0IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0aW9ucwoKT24gdGhlIEpTQyBzaWRlOgoK
IC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgogLSBQ
YXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0aW9ucy4KIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBp
bnN0ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxz
LiBUaGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24g
d2hlbiBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgogLSBFbmNhcHN1bGF0ZSBhbGwgcGFy
c2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQg
ZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJ
bnN0YW5jZSkuCiAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1bGUg
aW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVlZGxl
c3NseS4KIC0gUmVtb3ZlIGFsbCByZW1haW5kZXJzIG9mIHBvbHlmaWxsLXByb3RvdHlwZS0xLCBh
bmQgdXBkYXRlIGxpY2Vuc2UuCiAtIEFkZCBtaXNzaW5nIFdhc21PcHMuaCBhbmQgV2FzbVZhbGlk
YXRlSW5saW5lcy5oIGF1dG8tZ2VuZXJhdGlvbiBmb3IgY21ha2UgYnVpbGQuCgpPbiB0aGUgQnVp
bGRlci5qcyB0ZXN0aW5nIHNpZGU6CgogLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KIC0gQ2hlY2sgc2VjdGlv
biBvcmRlciBhbmQgdW5pcXVlbmVzcy4KIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRoZSBU
eXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50cmll
cy4KIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1OSArKysKIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjc4ICsrKysrKysrKyst
LS0KIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzICAgICAgICAgIHwg
MTA3ICsrKysrCiBKU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMgICAgICAgICAgICAgICAg
ICAgICB8ICAxMiArCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgOSArCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNSArCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzICAg
ICAgICAgICAgICAgICB8ICAxMCArCiBKU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRl
ckpTT04uanMgICAgICAgICB8IDQ1NSArKysrKysrKysrKysrKystLS0tLS0KIEpTVGVzdHMvd2Fz
bS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanMgIHwgIDEzIC0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgIHwgIDE3ICsKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgIDc2ICsrKysK
IC4uLi9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAgIHwgICA3
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwICAgICAgICAgICAgICAgICB8
IDI0MiArKysrKy0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5j
cHAgICAgICAgICAgfCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaCAgICAgICAgICAgIHwgIDk3ICsrKy0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8IDMxNiArKysrKysrKystLS0tLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oICAgICAgfCAgMjMgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCAgICAgICAgICAgIHwgIDQwICsrCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAgICB8ICAzOCArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAgMjkg
Ky0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oICAgICAgICAgIHwg
IDIwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cCB8ICAxMCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oICAgfCAgMjAgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rv
ci5jcHAgICAgIHwgICAzICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmNwcCAgICAgICB8ICAgMSArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcCAgICAgICB8ICAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNv
bnN0cnVjdG9yLmNwcCAgICAgICAgfCAgIDEgKwogMjcgZmlsZXMgY2hhbmdlZCwgMTM4MCBpbnNl
cnRpb25zKCspLCA1MTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93
YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBmNWRjNzEuLmNmOGY5NTUgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNjIgQEAKKzIwMTYtMTEtMDIgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IG1vcmUgc2VjdGlvbnMKKwor
ICAgICAgICBPbiB0aGUgSlNDIHNpZGU6CisKKyAgICAgICAgIC0gUHV0IGluIHBhcnNlciBzdHVi
cyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgorICAgICAgICAgLSBQYXJzZSBJbXBvcnQs
IEV4cG9ydCBzZWN0aW9ucy4KKyAgICAgICAgIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBpbnN0
ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxzLiBU
aGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24gd2hl
biBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgorICAgICAgICAgLSBFbmNhcHN1bGF0ZSBh
bGwgcGFyc2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtp
bmcgaXQgZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVs
ZSB0byBJbnN0YW5jZSkuCisgICAgICAgICAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xk
IHBhcnNlZCBtb2R1bGUgaW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNt
TWVtb3J5LmggbmVlZGxlc3NseS4KKyAgICAgICAgIC0gcGFyc2VDb2RlOiBhdm9pZCBvdmVyZmxv
dyB0aHJvdWdoIGZ1bmN0aW9uIHNpemUuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVy
cyBvZiBwb2x5ZmlsbC1wcm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAg
LSBBZGQgbWlzc2luZyBXYXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdl
bmVyYXRpb24gZm9yIGNtYWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRl
c3Rpbmcgc2lkZToKKworICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hl
Y2sgc2VjdGlvbiBvcmRlciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBh
dXRvLWdlbmVyYXRlIHRoZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIElt
cG9ydCAvIENvZGUgZW50cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGlt
cG9ydC4KKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IE1vZHVsZSBzaG91bGQgZGVjb2Rl
IHN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd2FzbS9CdWlsZGVyLmpzOiBidWlsZCB0eXBlLCBpbXBvcnQsIGFuZCBleHBvcnQgc2VjdGlv
bnMKKyAgICAgICAgKGNvbnN0Ll9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZSk6CisgICAgICAg
ICogd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOiBBZGRlZC4gRm9ya2VkIGZyb20g
QnVpbGRlci5qcworICAgICAgICAoY29uc3QuZW1pdHRlcnMuVHlwZSk6CisgICAgICAgIChjb25z
dC5lbWl0dGVycy5JbXBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRnVuY3Rpb24pOgor
ICAgICAgICAoY29uc3QuZW1pdHRlcnMuVGFibGUpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMu
TWVtb3J5KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkdsb2JhbCk6CisgICAgICAgIChjb25z
dC5lbWl0dGVycy5FeHBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuU3RhcnQpOgorICAg
ICAgICAoY29uc3QuZW1pdHRlcnMuRWxlbWVudCk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5D
b2RlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkRhdGEpOgorICAgICAgICAoZXhwb3J0LmNv
bnN0LkJpbmFyeSk6CisgICAgICAgICogd2FzbS9Mb3dMZXZlbEJpbmFyeS5qczogQWRkIGEgZmV3
IHVzZWZ1bCBvdXRwdXRzCisgICAgICAgIChleHBvcnQuZGVmYXVsdC5Mb3dMZXZlbEJpbmFyeS5w
cm90b3R5cGUudmFydWludDEpOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTG93TGV2ZWxCaW5h
cnkucHJvdG90eXBlLnZhcmludDcpOgorICAgICAgICAqIHdhc20vV0FTTS5qczogdmFsdWUgdHlw
ZSBhbmQgZXh0ZXJuYWwga2luZCBoZWxwZXJzCisgICAgICAgICogd2FzbS9hc3NlcnQuanM6IGFy
cmF5IGVsZW1lbnQtd2lzZSBlcXVhbGl0eSBjb21wYXJpc29uCisgICAgICAgIChjb25zdC5fZXEp
OgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzOgorICAgICAgICAoTW9kdWxl
V2l0aEltcG9ydHMpOgorICAgICAgICAqIHdhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04u
anM6IG1hbnkgbW9yZSB0ZXN0cyBmb3IgYWxsIHRoZSBuZXcgQnVpbGRlciBBUElzLCBhbmQgdXBk
YXRlIHRvIHNvbWUgb2xkZXIgdGVzdHMgd2hpY2ggbm93IHJlcXVpcmUgYSBUeXBlIHNlY3Rpb24g
b3IgcmVqaWdnZXJlZCBGdW5jdGlvbiBzaWduYXR1cmUKKyAgICAgICAgKGNvbnN0LmFzc2VydE9w
VGhyb3dzKToKKyAgICAgICAgKFNlY3Rpb25zV2l0aFNhbWVDdXN0b21OYW1lKToKKyAgICAgICAg
KFR3b1R5cGVTZWN0aW9ucyk6CisgICAgICAgIChFbXB0eUltcG9ydFNlY3Rpb24pOgorICAgICAg
ICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90
ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qczogcmVtb3ZlIGEgdGVzdCB3aGljaCB3YXNuJ3QgaGVs
cGZ1bCBhbmQgaXMgbm93IG9ic29sZXRlCisgICAgICAgIChDdXN0b21TZWN0aW9uKToKKwogMjAx
Ni0xMS0wMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBz
aG91bGQgYmUgYWJsZSB0byBlbGltaW5hdGUgcmVzdCBwYXJhbWV0ZXIgYWxsb2NhdGlvbnMKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIu
anMKaW5kZXggMDU2ZDcyZC4uNjg3NDFlNCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKQEAgLTIzLDcgKzIzLDcgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotaW1wb3J0IExvd0xldmVsQmluYXJ5IGZyb20gJ0xvd0xldmVs
QmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIEJ1aWxkV2ViQXNzZW1ibHkgZnJvbSAnQnVpbGRlcl9X
ZWJBc3NlbWJseUJpbmFyeS5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOwog
CiBjb25zdCBfdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUgPT4gewpAQCAtNDMsNTEgKzQzLDEwNSBA
QCBjb25zdCBfaXNWYWxpZFZhbHVlID0gKHZhbHVlLCB0eXBlKSA9PiB7CiB9OwogY29uc3QgX3Vu
a25vd25TZWN0aW9uSWQgPSAwOwogCi1jb25zdCBfQnVpbGRXZWJBc3NlbWJseUJpbmFyeSA9IChw
cmVhbWJsZSwgc2VjdGlvbnMpID0+IHsKLSAgICBsZXQgd2FzbUJpbiA9IG5ldyBMb3dMZXZlbEJp
bmFyeSgpOwotICAgIGNvbnN0IHB1dCA9IChiaW4sIHR5cGUsIHZhbHVlKSA9PiBiaW5bdHlwZV0o
dmFsdWUpOwotICAgIGZvciAoY29uc3QgcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnByZWFtYmxlKQot
ICAgICAgICBwdXQod2FzbUJpbiwgcC50eXBlLCBwcmVhbWJsZVtwLm5hbWVdKTsKLSAgICBmb3Ig
KGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHsKLSAgICAgICAgcHV0KHdhc21CaW4sIFdBU00u
c2VjdGlvbkVuY29kaW5nVHlwZSwgc2VjdGlvbi5pZCk7Ci0gICAgICAgIGxldCBzZWN0aW9uQmlu
ID0gd2FzbUJpbi5uZXdQYXRjaGFibGUoInZhcnVpbnQiKTsKLSAgICAgICAgc3dpdGNoIChzZWN0
aW9uLm5hbWUpIHsKLSAgICAgICAgY2FzZSAiVHlwZSI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2Ug
IkltcG9ydCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIk
e3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIkZ1bmN0aW9uIjogdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAg
ICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rp
b24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJNZW1vcnkiOiB0aHJv
dyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9
ImApOwotICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50
ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJFeHBv
cnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0
aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJTdGFydCI6IHRocm93IG5ldyBFcnJvcihgVW5p
bXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNh
c2UgIkVsZW1lbnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlw
ZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJDb2RlIjoKLSAgICAgICAgICAg
IGNvbnN0IG51bWJlck9mRnVuY3Rpb25Cb2RpZXMgPSBzZWN0aW9uLmRhdGEubGVuZ3RoOwotICAg
ICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJ2YXJ1aW50IiwgbnVtYmVyT2ZGdW5jdGlvbkJvZGll
cyk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGZ1bmMgb2Ygc2VjdGlvbi5kYXRhKSB7Ci0gICAg
ICAgICAgICAgICAgbGV0IGZ1bmNCaW4gPSBzZWN0aW9uQmluLm5ld1BhdGNoYWJsZSgidmFydWlu
dCIpOwotICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsQ291bnQgPSBmdW5jLmxvY2Fscy5sZW5n
dGg7Ci0gICAgICAgICAgICAgICAgcHV0KGZ1bmNCaW4sICJ2YXJ1aW50IiwgbG9jYWxDb3VudCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsQ291bnQgIT09IDApIHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogbG9jYWxzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wIG9m
IGZ1bmMuY29kZSkgewotICAgICAgICAgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInVpbnQ4Iiwg
b3AudmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAob3AuYXJndW1lbnRzLmxlbmd0aCAh
PT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBhcmd1bWVudHNgKTsgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjcwNgotICAgICAg
ICAgICAgICAgICAgICBpZiAob3AuaW1tZWRpYXRlcy5sZW5ndGggIT09IDApIHRocm93IG5ldyBF
cnJvcihgVW5pbXBsZW1lbnRlZDogaW1tZWRpYXRlc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzA2Citjb25zdCBfbm9ybWFsaXplRnVuY3Rp
b25TaWduYXR1cmUgPSAocGFyYW1zLCByZXQpID0+IHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXko
cGFyYW1zKSkgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBhIHBhcmFtZXRlciBhcnJheSwgZ290
ICIke3BhcmFtc30iYCk7CisgICAgZm9yIChjb25zdCBwIG9mIHBhcmFtcykgaWYgKCFXQVNNLmlz
VmFsaWRWYWx1ZVR5cGUocCkpIHRocm93IG5ldyBFcnJvcihgVHlwZSBwYXJhbWV0ZXIgJHtwfSBp
c24ndCBhIHZhbGlkIHZhbHVlIHR5cGVgKTsKKyAgICBpZiAodHlwZW9mKHJldCkgPT09ICJ1bmRl
ZmluZWQiKSByZXQgPSAidm9pZCI7CisgICAgaWYgKEFycmF5LmlzQXJyYXkocmV0KSkgdGhyb3cg
bmV3IEVycm9yKGBNdWx0aXBsZSByZXR1cm4gdmFsdWVzIGFyZW4ndCBzdXBwb3J0ZWQgYnkgV2Vi
QXNzZW1ibHkgeWV0YCk7CisgICAgaWYgKHJldCAhPT0gInZvaWQiICYmICFXQVNNLmlzVmFsaWRW
YWx1ZVR5cGUocmV0KSkgdGhyb3cgbmV3IEVycm9yKGBUeXBlIHJldHVybiAke3JldH0gaXNuJ3Qg
YSB2YWxpZCB2YWx1ZSB0eXBlYCk7CisgICAgcmV0dXJuIFtwYXJhbXMsIHJldF07Cit9OworCitj
b25zdCBfbWF5YmVSZWdpc3RlclR5cGUgPSAoYnVpbGRlciwgdHlwZSkgPT4geworICAgIGNvbnN0
IHR5cGVTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiVHlwZSIpOworICAgIGlmICh0eXBl
b2YodHlwZSkgPT09ICJudW1iZXIiKSB7CisgICAgICAgIC8vIFR5cGUgbnVtYmVycyBhbHJlYWR5
IHJlZmVyIHRvIHRoZSB0eXBlIHNlY3Rpb24sIG5vIG5lZWQgdG8gcmVnaXN0ZXIgdGhlbS4KKyAg
ICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YodHlw
ZVNlY3Rpb24pID09PSAidW5kZWZpbmVkIikgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCB1c2UgdHlw
ZSAke3R5cGV9IGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2YodHlwZVNlY3Rpb24uZGF0YVt0eXBlXSkgPT09ICJ1bmRlZmluZWQiKSB0aHJv
dyBuZXcgRXJyb3IoYFR5cGUgJHt0eXBlfSBkb2Vzbid0IGV4aXN0IGluIHR5cGUgc2VjdGlvbmAp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKyAgICBpZiAodHlwZW9m
KHR5cGUpICE9PSAib2JqZWN0IiB8fCB0eXBlb2YodHlwZS5wYXJhbXMpID09PSAidW5kZWZpbmVk
IikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0eXBlIHRvIGJlIGEgbnVtYmVyIG9yIG9iamVj
dCB3aXRoICdwYXJhbXMnIGFuZCBvcHRpb25hbGx5ICdyZXQnIGZpZWxkc2ApOworICAgIGNvbnN0
IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUodHlwZS5wYXJhbXMs
IHR5cGUucmV0KTsKKyAgICBpZiAodHlwZW9mKHR5cGVTZWN0aW9uKSA9PT0gInVuZGVmaW5lZCIp
IHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgYWRkIHR5cGUgaWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3Qg
cHJlc2VudGApOworICAgIC8vIFRyeSByZXVzaW5nIGFuIGVxdWl2YWxlbnQgdHlwZSBmcm9tIHRo
ZSB0eXBlIHNlY3Rpb24uCisgICAgdHlwZXM6CisgICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IHR5
cGVTZWN0aW9uLmRhdGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29uc3QgdCA9IHR5cGVTZWN0
aW9uLmRhdGFbaV07CisgICAgICAgIGlmICh0LnJldCA9PT0gcmV0ICYmIHBhcmFtcy5sZW5ndGgg
PT09IHQucGFyYW1zLmxlbmd0aCkgeworICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogIT09
IHQucGFyYW1zLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbal0gIT09
IHQucGFyYW1zW2pdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0eXBlczsKKyAgICAg
ICAgICAgIHR5cGUgPSBpOworICAgICAgICAgICAgYnJlYWsgdHlwZXM7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKHR5cGVvZih0eXBlKSAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgLy8gQ291
bGRuJ3QgcmV1c2UgYSBwcmUtZXhpc3RpbmcgdHlwZSwgcmVnaXN0ZXIgdGhpcyB0eXBlIGluIHRo
ZSB0eXBlIHNlY3Rpb24uCisgICAgICAgIHR5cGVTZWN0aW9uLmRhdGEucHVzaCh7IHBhcmFtczog
cGFyYW1zLCByZXQ6IHJldCB9KTsKKyAgICAgICAgdHlwZSA9IHR5cGVTZWN0aW9uLmRhdGEubGVu
Z3RoIC0gMTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGU7Cit9OworCitjb25zdCBfaW1wb3J0RnVu
Y3Rpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsK
KyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+IHsKKyAgICAgICAgaWYgKHR5cGVv
Zihtb2R1bGUpICE9PSAic3RyaW5nIikgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgZnVuY3Rpb24g
bW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke21vZHVsZX0iYCk7CisgICAgICAgIGlm
ICh0eXBlb2YoZmllbGQpICE9PSAic3RyaW5nIikgdGhyb3cgbmV3IEVycm9yKGBJbXBvcnQgZnVu
Y3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAg
ICBjb25zdCB0eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICAg
ICAgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsKKyAgICAgICAgc2Vj
dGlvbi5kYXRhLnB1c2goeyBmaWVsZDogZmllbGQsIHR5cGU6IHR5cGUsIGtpbmQ6ICJGdW5jdGlv
biIsIG1vZHVsZTogbW9kdWxlIH0pOworICAgICAgICAvLyBJbXBvcnRzIGFsc28gY291bnQgaW4g
dGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlLiBNYXAgdGhlbSBhcyBvYmplY3RzIHRvIGF2b2lkIGNs
YXNoaW5nIHdpdGggQ29kZSBmdW5jdGlvbnMnIG5hbWVzLgorICAgICAgICBidWlsZGVyLl9yZWdp
c3RlckZ1bmN0aW9uVG9JbmRleFNwYWNlKHsgbW9kdWxlOiBtb2R1bGUsIGZpZWxkOiBmaWVsZCB9
KTsKKyAgICAgICAgcmV0dXJuIG5leHRCdWlsZGVyOworICAgIH07Cit9OworCitjb25zdCBfZXhw
b3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIp
ID0+IHsKKyAgICByZXR1cm4gKGZpZWxkLCBpbmRleCwgdHlwZSkgPT4geworICAgICAgICBpZiAo
dHlwZW9mKGZpZWxkKSAhPT0gInN0cmluZyIpIHRocm93IG5ldyBFcnJvcihgRXhwb3J0IGZ1bmN0
aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAg
Y29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAgICAg
IGlmICh0eXBlb2YodHlwZSkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBFeHBv
cnRzIGNhbiBsZWF2ZSB0aGUgdHlwZSB1bnNwZWNpZmllZCwgbGV0dGluZyB0aGUgQ29kZSBidWls
ZGVyIHBhdGNoIHRoZW0gdXAgbGF0ZXIuCisgICAgICAgICAgICB0eXBlID0gX21heWJlUmVnaXN0
ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGNo
ZWNrIG11Y2ggYWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhlIENvZGUgc2VjdGlvbiBzdWNj
ZWVkcyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBkb25lIGF0IENvZGUoKS5FbmQo
KSB0aW1lLgorICAgICAgICBzd2l0Y2ggKHR5cGVvZihpbmRleCkpIHsKKyAgICAgICAgY2FzZSAi
c3RyaW5nIjogYnJlYWs7IC8vIEFzc3VtZSBpdCdzIGEgZnVuY3Rpb24gbmFtZSB3aGljaCB3aWxs
IGJlIHJldmVhbGVkIGluIHRoZSBDb2RlIHNlY3Rpb24uCisgICAgICAgIGNhc2UgIm51bWJlciI6
IGJyZWFrOyAvLyBBc3N1bWUgaXQncyBhIG51bWJlciBpbiB0aGUgImZ1bmN0aW9uIGluZGV4IHNw
YWNlIi4KKyAgICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgICAgIC8vIFJlLWV4cG9ydGlu
ZyBhbiBpbXBvcnQuCisgICAgICAgICAgICBpZiAodHlwZW9mKGluZGV4Lm1vZHVsZSkgPT09ICJ1
bmRlZmluZWQiIHx8IHR5cGVvZihpbmRleC5maWVsZCkgPT09ICJ1bmRlZmluZWQiKSB0aHJvdyBu
ZXcgRXJyb3IoYFJlLWV4cG9ydGluZyAiJHtmaWVsZH0iIGZyb20gYW4gaW1wb3J0IHJlcXVpcmVz
IGFuIG9iamVjdCB3aXRoIG1vZHVsZSBhbmQgZmllbGRgKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJ1bmRlZmluZWQiOiBpbmRleCA9IGZpZWxkOyBicmVhazsgLy8gQXNzdW1l
IGl0J3MgdGhlIHNhbWUgYXMgdGhlIGZpZWxkIChpLmUuIGl0J3Mgbm90IGJlaW5nIHJlbmFtZWQp
LgorICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBzZWN0aW9uJ3MgaW5k
ZXggbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgZ290ICR7aW5kZXh9YCk7CisgICAgICAg
IH0KKyAgICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0ltcG9ydCA9IGJ1aWxkZXIuX2dldEZ1bmN0
aW9uRnJvbUluZGV4U3BhY2UoaW5kZXgpOworICAgICAgICBjb25zdCBpbXBvcnRTZWN0aW9uID0g
YnVpbGRlci5fZ2V0U2VjdGlvbigiSW1wb3J0Iik7CisgICAgICAgIGlmICh0eXBlb2YoaW5kZXgp
ID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgLy8gUmUtZXhwb3J0aW5nIGFuIGltcG9ydCB1
c2luZyBpdHMgbW9kdWxlK2ZpZWxkIG5hbWUuCisgICAgICAgICAgICBpZiAodHlwZW9mKGNvcnJl
c3BvbmRpbmdJbXBvcnQpID09PSAidW5kZWZpbmVkIikgdGhyb3cgbmV3IEVycm9yKGBSZS1leHBv
cnRpbmcgIiR7ZmllbGR9IiBjb3VsZG4ndCBmaW5kIGltcG9ydCBmcm9tIG1vZHVsZSAiJHtpbmRl
eC5tb2R1bGV9IiBmaWVsZCAiJHtpbmRleC5maWVsZH0iYCk7CisgICAgICAgICAgICBpbmRleCA9
IGNvcnJlc3BvbmRpbmdJbXBvcnQ7CisgICAgICAgICAgICBpZiAodHlwZW9mKHR5cGUpID09PSAi
dW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICB0eXBlID0gaW1wb3J0U2VjdGlvbi5kYXRhW2lu
ZGV4XS50eXBlOworICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQgJiYgdHlwZSAhPT0g
aW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS50eXBlKSB0aHJvdyBuZXcgRXJyb3IoYFJlLWV4cG9y
dGluZyBpbXBvcnQgIiR7aW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS5maWVsZH0iIGFzICIke2Zp
ZWxkfSIgaGFzIG1pc21hdGNoaW5nIHR5cGVgKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yo
Y29ycmVzcG9uZGluZ0ltcG9ydCkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBS
ZS1leHBvcnRpbmcgYW4gaW1wb3J0IHVzaW5nIGl0cyBpbmRleC4KKyAgICAgICAgICAgIGxldCBl
eHBvcnRlZEltcG9ydDsKKyAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpbXBvcnRTZWN0aW9u
LmRhdGEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaS5tb2R1bGUgPT09IGNvcnJlc3BvbmRpbmdJ
bXBvcnQubW9kdWxlICYmIGkuZmllbGQgPT09IGNvcnJlc3BvbmRpbmdJbXBvcnQuZmllbGQpIHsK
KyAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRJbXBvcnQgPSBpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnVuY0Jpbi5h
cHBseSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
IkRhdGEiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtz
ZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHNlY3Rp
b24uaWQgIT09IF91bmtub3duU2VjdGlvbklkKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2Vj
dGlvbiAiJHtzZWN0aW9uLm5hbWV9IiB3aXRoIG51bWJlciAke3NlY3Rpb24uaWR9YCk7Ci0gICAg
ICAgICAgICBwdXQoc2VjdGlvbkJpbiwgInN0cmluZyIsIHNlY3Rpb24ubmFtZSk7Ci0gICAgICAg
ICAgICBmb3IgKGNvbnN0IGJ5dGUgb2Ygc2VjdGlvbi5kYXRhKQotICAgICAgICAgICAgICAgIHB1
dChzZWN0aW9uQmluLCAidWludDgiLCBieXRlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKHR5cGVvZih0eXBlKSA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICAgICAg
dHlwZSA9IGV4cG9ydGVkSW1wb3J0LnR5cGU7CisgICAgICAgICAgICBpZiAoYnVpbGRlci5fY2hl
Y2tlZCAmJiB0eXBlICE9PSBleHBvcnRlZEltcG9ydC50eXBlKSB0aHJvdyBuZXcgRXJyb3IoYFJl
LWV4cG9ydGluZyBpbXBvcnQgIiR7ZXhwb3J0ZWRJbXBvcnQuZmllbGR9IiBhcyAiJHtmaWVsZH0i
IGhhcyBtaXNtYXRjaGluZyB0eXBlYCk7CiAgICAgICAgIH0KLSAgICAgICAgc2VjdGlvbkJpbi5h
cHBseSgpOwotICAgIH0KLSAgICByZXR1cm4gd2FzbUJpbjsKKyAgICAgICAgc2VjdGlvbi5kYXRh
LnB1c2goeyBmaWVsZDogZmllbGQsIHR5cGU6IHR5cGUsIGtpbmQ6ICJGdW5jdGlvbiIsIGluZGV4
OiBpbmRleCB9KTsKKyAgICAgICAgcmV0dXJuIG5leHRCdWlsZGVyOworICAgIH07CiB9OwogCiBl
eHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKQEAgLTk4LDYgKzE1Miw4IEBAIGV4cG9ydCBk
ZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgcHJlYW1ibGVbcC5uYW1lXSA9IHAu
dmFsdWU7CiAgICAgICAgIHRoaXMuc2V0UHJlYW1ibGUocHJlYW1ibGUpOwogICAgICAgICB0aGlz
Ll9zZWN0aW9ucyA9IFtdOworICAgICAgICB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2UgPSB7fTsK
KyAgICAgICAgdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlQ291bnQgPSAwOwogICAgICAgICB0aGlz
Ll9yZWdpc3RlclNlY3Rpb25CdWlsZGVycygpOwogICAgIH0KICAgICBzZXRDaGVja2VkKGNoZWNr
ZWQpIHsKQEAgLTEwOCwyNSArMTY0LDExNCBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVy
IHsKICAgICAgICAgdGhpcy5fcHJlYW1ibGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX3ByZWFtYmxl
IHx8IHt9LCBwKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQorICAgIF9yZWdpc3RlckZ1
bmN0aW9uVG9JbmRleFNwYWNlKG5hbWUpIHsKKyAgICAgICAgLy8gQ29sbGlzaW9ucyBhcmUgZmlu
ZTogd2UnbGwgc2ltcGx5IGNvdW50IHRoZSBmdW5jdGlvbiBhbmQgZm9yZ2V0IHRoZSBwcmV2aW91
cyBvbmUuCisgICAgICAgIHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZVtuYW1lXSA9IHRoaXMuX2Z1
bmN0aW9uSW5kZXhTcGFjZUNvdW50Kys7CisgICAgICAgIC8vIE1hcCBpdCBib3RoIHdheXMsIHRo
ZSBudW1iZXIgc3BhY2UgaXMgZGlzdGluY3QgZnJvbSB0aGUgbmFtZSBzcGFjZS4KKyAgICAgICAg
dGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlW3RoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZVtuYW1lXV0g
PSBuYW1lOworICAgIH0KKyAgICBfZ2V0RnVuY3Rpb25Gcm9tSW5kZXhTcGFjZShuYW1lKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2VbbmFtZV07CisgICAgfQogICAg
IF9yZWdpc3RlclNlY3Rpb25CdWlsZGVycygpIHsKICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9u
IGluIFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbikgewogICAgICAgICAgICAgc3dpdGNoIChzZWN0
aW9uKSB7CisgICAgICAgICAgICBjYXNlICJUeXBlIjoKKyAgICAgICAgICAgICAgICB0aGlzW3Nl
Y3Rpb25dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlz
Ll9hZGRTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZGVy
ID0gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZUJ1aWxkZXIgPSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IGJ1aWxkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBGdW5jOiAocGFyYW1zLCByZXQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbcGFyYW1zLCByZXRdID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHBhcmFtcywg
cmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaCh7IHBhcmFtczog
cGFyYW1zLCByZXQ6IHJldCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZUJ1aWxkZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUJ1aWxkZXI7CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIklt
cG9ydCI6CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW1wb3J0QnVpbGRlciA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxl
OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0IHRhYmxlYCk7
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnk6ICgpID0+IHsgdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgbWVtb3J5YCk7IH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICBHbG9iYWw6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBp
bXBvcnQgZ2xvYmFsYCk7IH0sCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgIGltcG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRp
b24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
bXBvcnRCdWlsZGVyOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlICJFeHBvcnQiOgorICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlv
bl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2Fk
ZFNlY3Rpb24oc2VjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydEJ1aWxk
ZXIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICBUYWJsZTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVt
ZW50ZWQ6IGV4cG9ydCB0YWJsZWApOyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5
OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogZXhwb3J0IG1lbW9yeWAp
OyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsOiAoKSA9PiB7IHRocm93IG5ldyBF
cnJvcihgVW5pbXBsZW1lbnRlZDogZXhwb3J0IGdsb2JhbGApOyB9LAorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICBleHBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2V4
cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0QnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAiQ29kZSI6CiAgICAgICAg
ICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYnVpbGRlciA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVC
dWlsZGVyID0gIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gYnVpbGRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiBwYXJhbWV0ZXJzID0+IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkUGFyYW1ldGVyVHlwZXMgPSBw
YXJhbWV0ZXJzLmZpbHRlcihwID0+ICFXQVNNLmlzVmFsaWRWYWx1ZVR5cGUocCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnZhbGlkUGFyYW1ldGVyVHlwZXMubGVuZ3RoICE9
PSAwKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIGRlY2xhcmVkIHdpdGggcGFyYW1ldGVycyBb
JHtwYXJhbWV0ZXJzfV0sIGludmFsaWQ6IFske2ludmFsaWRQYXJhbWV0ZXJUeXBlc31dYCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBub3cgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcmVtYXAgdGhlIGV4
cG9ydCBzZWN0aW9uJ3MgInR5cGUiIGFuZCAiaW5kZXgiIGFjY29yZGluZyB0byB0aGUgQ29kZSBz
ZWN0aW9uIHdlJ3JlIGN1cnJlbnRseSBlbmRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1wb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dl
dFNlY3Rpb24oIkltcG9ydCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4
cG9ydFNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJFeHBvcnQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjb2RlU2VjdGlvbiA9IHM7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4cG9ydFNlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBlIG9mIGV4cG9ydFNlY3Rpb24uZGF0YSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YoZS5pbmRleCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJv
cihgVW5leHBlY3RlZCBleHBvcnQgaW5kZXggIiR7ZS5pbmRleH0iYCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJpbmciOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBidWlsZGVyLl9nZXRGdW5jdGlv
bkZyb21JbmRleFNwYWNlKGUuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlb2YoaW5kZXgpICE9PSAibnVtYmVyIikgdGhyb3cgbmV3IEVycm9y
KGBFeHBvcnQgc2VjdGlvbiBjb250YWlucyB1bmRlZmluZWQgZnVuY3Rpb24gIiR7ZS5pbmRleH0i
YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pbmRleCA9IGlu
ZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBGYWxsdGhyb3Vn
aC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIm51bWJlciI6IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGJ1
aWxkZXIuX2dldEZ1bmN0aW9uRnJvbUluZGV4U3BhY2UoZS5pbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQgJiYgaW5kZXgg
PT09ICJ1bmRlZmluZWQiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCAiJHtlLmZpZWxkfSIgZG9l
c24ndCBjb3JyZXNwb25kIHRvIGEgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2Vg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1l
bnRlZDogRnVuY3Rpb24oKS5FbmQoKSB3aXRoIHVuZGVmaW5lZCBleHBvcnQgaW5kZXhgKTsgLy8g
RklYTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoZS50eXBlKSA9PT0gInVuZGVmaW5l
ZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG11
c3QgYmUgYSBmdW5jdGlvbiBleHBvcnQgZnJvbSB0aGUgQ29kZSBzZWN0aW9uIChyZS1leHBvcnRz
IHdlcmUgaGFuZGxlZCBlYXJsaWVyKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4U3BhY2VPZmZzZXQgPSBpbXBvcnRTZWN0aW9uID8g
aW1wb3J0U2VjdGlvbi5kYXRhLmxlbmd0aCA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25JbmRleCA9IGUuaW5kZXggLSBmdW5jdGlvbklu
ZGV4U3BhY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZS50eXBlID0gY29kZVNlY3Rpb24uZGF0YVtmdW5jdGlvbkluZGV4XS50eXBlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBidWlsZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiAoYTAsIGExKSA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHR5cGVvZihhMCkgPT09ICJzdHJpbmci
ID8gYTEgOiBhMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5h
bWUgPSB0eXBlb2YoYTApID09PSAic3RyaW5nIiA/IGEwIDogdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0dXJlKSA9PT0gInVuZGVmaW5lZCIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1zOiBb
XSB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0dXJlKSAh
PT0gIm9iamVjdCIgfHwgdHlwZW9mKHNpZ25hdHVyZS5wYXJhbXMpID09PSAidW5kZWZpbmVkIikg
dGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIGJlIGFuIG9iamVj
dCB3aXRoIGEgInBhcmFtcyIgZmllbGQsIGdvdCAiJHtzaWduYXR1cmV9ImApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rp
b25TaWduYXR1cmUoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJlLnJldCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0geyBwYXJhbXM6IHBhcmFtcywgcmV0OiByZXQg
fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jID0gewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHBhcmFtZXRlcnMsIC8vIFBhcmFtZXRlcnMg
YXJlIHRoZSBmaXJzdCBsb2NhbHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtZXRlckNvdW50OiBwYXJhbWV0ZXJzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogZnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBfbWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgc2lnbmF0dXJlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsczogcGFyYW1zLCAvLyBQYXJhbWV0ZXJzIGFy
ZSB0aGUgZmlyc3QgbG9jYWxzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJDb3VudDogcGFyYW1zLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZTogW10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuX3JlZ2lzdGVyRnVuY3Rpb25Ub0luZGV4U3BhY2UoZnVuY3Rpb25OYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25CdWlsZGVyID0ge307
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcCBpbiBXQVNNLmRlc2Ny
aXB0aW9uLm9wY29kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
YW1lID0gX3RvSmF2YVNjcmlwdE5hbWUob3ApOwpAQCAtMjM0LDEwICszNzksNDEgQEAgZXhwb3J0
IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgX2FkZFNlY3Rpb24obmFtZU9yTnVtYmVyLCBl
eHRyYU9iamVjdCkgewogICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9mKG5hbWVPck51bWJlcikg
PT09ICJzdHJpbmciID8gbmFtZU9yTnVtYmVyIDogIiI7CiAgICAgICAgIGNvbnN0IG51bWJlciA9
IHR5cGVvZihuYW1lT3JOdW1iZXIpID09PSAibnVtYmVyIiA/IG5hbWVPck51bWJlciA6IChXQVNN
LmRlc2NyaXB0aW9uLnNlY3Rpb25bbmFtZV0gPyBXQVNNLmRlc2NyaXB0aW9uLnNlY3Rpb25bbmFt
ZV0udmFsdWUgOiBfdW5rbm93blNlY3Rpb25JZCk7CisgICAgICAgIGlmICh0aGlzLl9jaGVja2Vk
KSB7CisgICAgICAgICAgICAvLyBDaGVjayB1bmlxdWVuZXNzLgorICAgICAgICAgICAgZm9yIChj
b25zdCBzIG9mIHRoaXMuX3NlY3Rpb25zKQorICAgICAgICAgICAgICAgIGlmIChzLm5hbWUgPT09
IG5hbWUgJiYgcy5pZCA9PT0gbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYENhbm5vdCBoYXZlIHRvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSAiJHtuYW1l
fSIgYW5kIElEICR7bnVtYmVyfWApOworICAgICAgICAgICAgLy8gQ2hlY2sgb3JkZXJpbmcuCisg
ICAgICAgICAgICBpZiAoKG51bWJlciAhPT0gX3Vua25vd25TZWN0aW9uSWQpICYmICh0aGlzLl9z
ZWN0aW9ucy5sZW5ndGggIT09IDApKSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRo
aXMuX3NlY3Rpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9zZWN0aW9uc1tpXS5pZCA9PT0gX3Vua25vd25TZWN0aW9uSWQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3NlY3Rpb25zW2ldLmlkID4gbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKGBCYWQgc2VjdGlvbiBvcmRlcmluZzogIiR7dGhpcy5fc2VjdGlvbnNbaV0u
bmFtZX0iIGNhbm5vdCBwcmVjZWRlICIke25hbWV9ImApOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAg
ICAgY29uc3QgcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lOiBuYW1lLCBpZDogbnVtYmVyLCBkYXRh
OiBbXSB9LCBleHRyYU9iamVjdCB8fCB7fSk7CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zLnB1c2go
cyk7CiAgICAgICAgIHJldHVybiBzOwogICAgIH0KKyAgICBfZ2V0U2VjdGlvbihuYW1lT3JOdW1i
ZXIpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlb2YobmFtZU9yTnVtYmVyKSkgeworICAgICAgICBk
ZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IGNhbid0IGdl
dCBzZWN0aW9uICIke25hbWVPck51bWJlcn0iYCk7CisgICAgICAgIGNhc2UgInN0cmluZyI6Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCisgICAgICAgICAgICAg
ICAgaWYgKHMubmFtZSA9PT0gbmFtZU9yTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gczsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIGNhc2UgIm51bWJl
ciI6CisgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCisgICAgICAg
ICAgICAgICAgaWYgKHMuaWQgPT09IG5hbWVPck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHM7CisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAg
fQogICAgIG9wdGltaXplKCkgewogICAgICAgICAvLyBGSVhNRSBBZGQgbW9yZSBvcHRpbWl6YXRp
b25zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDI0CiAgICAg
ICAgIHJldHVybiB0aGlzOwpAQCAtMjU0LDUgKzQzMCw1IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAvLyBGSVhNRSBDcmVhdGUgYW4gYXNtLmpzIGVxdWl2YWxlbnQg
c3RyaW5nIHdoaWNoIGNhbiBiZSBldmFsJ2QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM0MjUKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhc20uanMgbm90IGlt
cGxlbWVudGVkIHlldCIpOwogICAgIH0KLSAgICBXZWJBc3NlbWJseSgpIHsgcmV0dXJuIF9CdWls
ZFdlYkFzc2VtYmx5QmluYXJ5KHRoaXMuX3ByZWFtYmxlLCB0aGlzLl9zZWN0aW9ucyk7IH0KKyAg
ICBXZWJBc3NlbWJseSgpIHsgcmV0dXJuIEJ1aWxkV2ViQXNzZW1ibHkuQmluYXJ5KHRoaXMuX3By
ZWFtYmxlLCB0aGlzLl9zZWN0aW9ucyk7IH0KIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
QnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFz
c2VtYmx5QmluYXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjBh
NTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJp
bmFyeS5qcwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2ltcG9ydCBMb3dMZXZlbEJpbmFyeSBmcm9tICdMb3dMZXZlbEJpbmFy
eS5qcyc7CitpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOworCitjb25zdCBwdXQgPSAo
YmluLCB0eXBlLCB2YWx1ZSkgPT4gYmluW3R5cGVdKHZhbHVlKTsKKworY29uc3QgZW1pdHRlcnMg
PSB7CisgICAgVHlwZTogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFy
dWludCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9m
IHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgY29uc3QgZnVuY1R5cGVDb25zdHJ1Y3RvciA9
IC0weDIwOyAvLyBGSVhNRSBNb3ZlIHRoaXMgdG8gd2FzbS5qc29uLgorICAgICAgICAgICAgcHV0
KGJpbiwgInZhcmludDciLCBmdW5jVHlwZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgIHB1dChi
aW4sICJ2YXJ1aW50IiwgZW50cnkucGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGNv
bnN0IHBhcmFtIG9mIGVudHJ5LnBhcmFtcykKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidWlu
dDgiLCBXQVNNLnZhbHVlVHlwZVZhbHVlW3BhcmFtXSk7CisgICAgICAgICAgICBpZiAoZW50cnku
cmV0ID09PSAidm9pZCIpCisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQxIiwgMCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDEi
LCAxKTsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLnZhbHVlVHlwZVZh
bHVlW2VudHJ5LnJldF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICBJ
bXBvcnQ6IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQiLCBz
ZWN0aW9uLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBzZWN0aW9u
LmRhdGEpIHsKKyAgICAgICAgICAgIHB1dChiaW4sICJzdHJpbmciLCBlbnRyeS5tb2R1bGUpOwor
ICAgICAgICAgICAgcHV0KGJpbiwgInN0cmluZyIsIGVudHJ5LmZpZWxkKTsKKyAgICAgICAgICAg
IHB1dChiaW4sICJ1aW50OCIsIFdBU00uZXh0ZXJuYWxLaW5kVmFsdWVbZW50cnkua2luZF0pOwor
ICAgICAgICAgICAgc3dpdGNoIChlbnRyeS5raW5kKSB7CisgICAgICAgICAgICBkZWZhdWx0OiB0
aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVuZXhwZWN0ZWQga2luZCAk
e2VudHJ5LmtpbmR9YCk7CisgICAgICAgICAgICBjYXNlICJGdW5jdGlvbiI6IHB1dChiaW4sICJ2
YXJ1aW50IiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAiVGFibGUiOiB0
aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKKyAgICAgICAgICAgIGNhc2Ug
Ik1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOworICAgICAg
ICAgICAgY2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVk
YCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorICAgIEZ1bmN0aW9uOiAoc2Vj
dGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9
LAorICAgIFRhYmxlOiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOyB9LAorICAgIE1lbW9yeTogKHNlY3Rpb24sIGJpbikgPT4geyB0aHJv
dyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBHbG9iYWw6IChzZWN0
aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0s
CisgICAgRXhwb3J0OiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOyB9LAorICAgIFN0YXJ0OiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93
IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIEVsZW1lbnQ6IChzZWN0
aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0s
CisgICAgQ29kZTogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFydWlu
dCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGZ1bmMgb2Ygc2Vj
dGlvbi5kYXRhKSB7CisgICAgICAgICAgICBsZXQgZnVuY0JpbiA9IGJpbi5uZXdQYXRjaGFibGUo
InZhcnVpbnQiKTsKKyAgICAgICAgICAgIGNvbnN0IGxvY2FsQ291bnQgPSBmdW5jLmxvY2Fscy5s
ZW5ndGg7CisgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInZhcnVpbnQiLCBsb2NhbENvdW50KTsK
KyAgICAgICAgICAgIGlmIChsb2NhbENvdW50ICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYFVuaW1w
bGVtZW50ZWQ6IGxvY2Fsc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNzA2CisgICAgICAgICAgICBmb3IgKGNvbnN0IG9wIG9mIGZ1bmMuY29k
ZSkgeworICAgICAgICAgICAgICAgIHB1dChmdW5jQmluLCAidWludDgiLCBvcC52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG9wLmFyZ3VtZW50cy5sZW5ndGggIT09IDApIHRocm93IG5ldyBF
cnJvcihgVW5pbXBsZW1lbnRlZDogYXJndW1lbnRzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKKyAgICAgICAgICAgICAgICBpZiAob3Au
aW1tZWRpYXRlcy5sZW5ndGggIT09IDApIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDog
aW1tZWRpYXRlc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyNzA2CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmdW5jQmluLmFwcGx5KCk7
CisgICAgICAgIH0KKyAgICB9LAorICAgIERhdGE6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cg
bmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCit9OworCitleHBvcnQgY29uc3Qg
QmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9ucykgPT4geworICAgIGxldCB3YXNtQmluID0gbmV3
IExvd0xldmVsQmluYXJ5KCk7CisgICAgZm9yIChjb25zdCBwIG9mIFdBU00uZGVzY3JpcHRpb24u
cHJlYW1ibGUpCisgICAgICAgIHB1dCh3YXNtQmluLCBwLnR5cGUsIHByZWFtYmxlW3AubmFtZV0p
OworICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykgeworICAgICAgICBwdXQod2Fz
bUJpbiwgV0FTTS5zZWN0aW9uRW5jb2RpbmdUeXBlLCBzZWN0aW9uLmlkKTsKKyAgICAgICAgbGV0
IHNlY3Rpb25CaW4gPSB3YXNtQmluLm5ld1BhdGNoYWJsZSgidmFydWludCIpOworICAgICAgICBj
b25zdCBlbWl0dGVyID0gZW1pdHRlcnNbc2VjdGlvbi5uYW1lXTsKKyAgICAgICAgaWYgKGVtaXR0
ZXIpCisgICAgICAgICAgICBlbWl0dGVyKHNlY3Rpb24sIHNlY3Rpb25CaW4pOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFVua25vd24gc2VjdGlvbi4KKyAgICAgICAgICAgIHB1dChz
ZWN0aW9uQmluLCAic3RyaW5nIiwgc2VjdGlvbi5uYW1lKTsKKyAgICAgICAgICAgIGZvciAoY29u
c3QgYnl0ZSBvZiBzZWN0aW9uLmRhdGEpCisgICAgICAgICAgICAgICAgcHV0KHNlY3Rpb25CaW4s
ICJ1aW50OCIsIGJ5dGUpOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb25CaW4uYXBwbHkoKTsK
KyAgICB9CisgICAgcmV0dXJuIHdhc21CaW47Cit9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L0xvd0xldmVsQmluYXJ5LmpzIGIvSlNUZXN0cy93YXNtL0xvd0xldmVsQmluYXJ5LmpzCmluZGV4
IDBhODMzYzEuLjcyMDA5NzYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9Mb3dMZXZlbEJpbmFy
eS5qcworKysgYi9KU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMKQEAgLTI3LDYgKzI3LDgg
QEAgY29uc3QgX2luaXRpYWxBbGxvY2F0aW9uU2l6ZSA9IDEwMjQ7CiBjb25zdCBfZ3Jvd0FsbG9j
YXRpb25TaXplID0gYWxsb2NhdGVkID0+IGFsbG9jYXRlZCAqIDI7CiAKIGV4cG9ydCBjb25zdCB2
YXJ1aW50TWluID0gMDsKK2V4cG9ydCBjb25zdCB2YXJpbnQ3TWluID0gLTBiMTAwMDAwMDsKK2V4
cG9ydCBjb25zdCB2YXJpbnQ3TWF4ID0gMGIxMTExMTE7CiBleHBvcnQgY29uc3QgdmFydWludDdN
YXggPSAwYjExMTExMTE7CiBleHBvcnQgY29uc3QgdmFydWludE1heCA9ICgoKCgxIDw8IDMxKSA+
Pj4gMCkgLSAxKSAqIDIpICsgMTsKIGV4cG9ydCBjb25zdCB2YXJpbnRNaW4gPSAtKCgxIDw8IDMx
KSA+Pj4gMCk7CkBAIC0xMjksNiArMTMxLDE2IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIExvd0xl
dmVsQmluYXJ5IHsKICAgICAgICAgICAgIHRoaXMudWludDgoMHg4MCB8IGIpOwogICAgICAgICB9
IHdoaWxlICh0cnVlKTsKICAgICB9CisgICAgdmFydWludDEodikgeworICAgICAgICBpZiAodiAh
PT0gMCAmJiB2ICE9PSAxKQorICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFs
aWQgdmFydWludDEgJHt2fSByYW5nZSBpcyBbMCwgMV1gKTsKKyAgICAgICAgdGhpcy52YXJ1aW50
KHYpOworICAgIH0KKyAgICB2YXJpbnQ3KHYpIHsKKyAgICAgICAgaWYgKHYgPCB2YXJpbnQ3TWlu
IHx8IHZhcmludDdNYXggPCB2KQorICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYElu
dmFsaWQgdmFyaW50NyAke3Z9IHJhbmdlIGlzIFske3ZhcmludDdNaW59LCAke3ZhcmludDdNYXh9
XWApOworICAgICAgICB0aGlzLnZhcmludCh2KTsKKyAgICB9CiAgICAgdmFydWludDcodikgewog
ICAgICAgICBpZiAodiA8IHZhcnVpbnRNaW4gfHwgdmFydWludDdNYXggPCB2KQogICAgICAgICAg
ICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdmFydWludDcgJHt2fSByYW5nZSBpcyBb
JHt2YXJ1aW50TWlufSwgJHt2YXJ1aW50N01heH1dYCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vV0FTTS5qcyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpzCmluZGV4IDhlN2I3ZWYuLmQ4ZWFlZjYg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9XQVNNLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9XQVNN
LmpzCkBAIC0yNSw5ICsyNSwxOCBAQAogCiBpbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAndXRp
bGl0aWVzLmpzJzsKIAorY29uc3QgX21hcFZhbHVlcyA9IGZyb20gPT4geworICAgIGxldCB2YWx1
ZXMgPSB7fTsKKyAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tKQorICAgICAgICB2YWx1ZXNba2V5
XSA9IGZyb21ba2V5XS52YWx1ZTsKKyAgICByZXR1cm4gdmFsdWVzOworfTsKKwogZXhwb3J0IGNv
bnN0IGRlc2NyaXB0aW9uID0gdXRpbGl0aWVzLmpzb24oIndhc20uanNvbiIpOwogZXhwb3J0IGNv
bnN0IHZhbHVlVHlwZSA9IE9iamVjdC5rZXlzKGRlc2NyaXB0aW9uLnZhbHVlX3R5cGUpOwogY29u
c3QgX3ZhbHVlVHlwZVNldCA9IG5ldyBTZXQodmFsdWVUeXBlKTsKIGV4cG9ydCBjb25zdCBpc1Zh
bGlkVmFsdWVUeXBlID0gdiA9PiBfdmFsdWVUeXBlU2V0Lmhhcyh2KTsKK2V4cG9ydCBjb25zdCB2
YWx1ZVR5cGVWYWx1ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24udmFsdWVfdHlwZSk7CitleHBv
cnQgY29uc3QgZXh0ZXJuYWxLaW5kVmFsdWUgPSBfbWFwVmFsdWVzKGRlc2NyaXB0aW9uLmV4dGVy
bmFsX2tpbmQpOwogZXhwb3J0IGNvbnN0IHNlY3Rpb25zID0gT2JqZWN0LmtleXMoZGVzY3JpcHRp
b24uc2VjdGlvbik7CiBleHBvcnQgY29uc3Qgc2VjdGlvbkVuY29kaW5nVHlwZSA9IGRlc2NyaXB0
aW9uLnNlY3Rpb25bc2VjdGlvbnNbMF1dLnR5cGU7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
YXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwppbmRleCAyZWE1ZjcwLi4wN2E4YTcx
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9h
c3NlcnQuanMKQEAgLTM0LDYgKzM0LDExIEBAIGNvbnN0IF9pc1VuZGVmID0gKHYpID0+IHsKIH07
CiAKIGNvbnN0IF9lcSA9IChsaHMsIHJocykgPT4geworICAgIGlmIChBcnJheS5pc0FycmF5KGxo
cykgJiYgQXJyYXkuaXNBcnJheShyaHMpICYmIChsaHMubGVuZ3RoID09PSByaHMubGVuZ3RoKSkg
eworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPT0gbGhzLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgX2VxKGxoc1tpXSwgcmhzW2ldKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBp
ZiAobGhzICE9PSByaHMpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHRoZSBzYW1lOiAi
JHtsaHN9IiBhbmQgIiR7cmhzfSJgKTsKIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3Rlc3RfTW9kdWxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qcwpp
bmRleCA4MjFkYTg0Li45NGRiMWE0IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfTW9kdWxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9Nb2R1bGUuanMKQEAg
LTcsMyArNywxMyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAgICAgYXNzZXJ0Lmlu
c3RhbmNlb2YobW9kdWxlLCBXZWJBc3NlbWJseS5Nb2R1bGUpOwogfSkoKTsKKworKGZ1bmN0aW9u
IE1vZHVsZVdpdGhJbXBvcnRzKCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIiwgImJhciIsIHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCk7
CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKK30pKCk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMgYi9KU1Rlc3RzL3dh
c20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKaW5kZXggMDkzNDIzMS4uYzZiOGQzNSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCisr
KyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwpAQCAtMiw3ICsy
LDcgQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIAogY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BG
biwgbWVzc2FnZSkgPT4gewotICAgIGxldCBmID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5j
dGlvbigpOworICAgIGxldCBmID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCku
RnVuY3Rpb24oKTsKICAgICBhc3NlcnQudGhyb3dzKG9wRm4sIEVycm9yLCBtZXNzYWdlLCBmKTsK
IH07CiAKQEAgLTg2LDYgKzg2LDE2OCBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBt
ZXNzYWdlKSA9PiB7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLCAweDExKTsK
IH0pKCk7CiAKKyhmdW5jdGlvbiBTZWN0aW9uc1dpdGhTYW1lQ3VzdG9tTmFtZSgpIHsKKyAgICBj
b25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlVua25vd24oImZvbyIpLkVuZCgpOworICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gYi5Vbmtub3duKCJmb28iKSwgRXJyb3IsIGBDYW5ub3QgaGF2ZSB0byBz
ZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgImZvbyIgYW5kIElEIDBgKTsKK30pKCk7CisKKyhm
dW5jdGlvbiBFbXB0eVR5cGVTZWN0aW9uKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIo
KSkuVHlwZSgpLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5uYW1lLCAiVHlwZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5n
dGgsIDApOworfSkoKTsKKworKGZ1bmN0aW9uIFR3b1R5cGVTZWN0aW9ucygpIHsKKyAgICBjb25z
dCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IGIuVHlwZSgpLCBFcnJvciwgYENhbm5vdCBoYXZlIHRvIHNlY3Rpb25zIHdpdGggdGhlIHNh
bWUgbmFtZSAiVHlwZSIgYW5kIElEIDFgKTsKK30pKCk7CisKKyhmdW5jdGlvbiBTaW1wbGVUeXBl
U2VjdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKQorICAgICAg
ICAgICAgLkZ1bmMoW10pCisgICAgICAgICAgICAuRnVuYyhbXSwgInZvaWQiKQorICAgICAgICAg
ICAgLkZ1bmMoW10sICJpMzIiKQorICAgICAgICAgICAgLkZ1bmMoW10sICJpNjQiKQorICAgICAg
ICAgICAgLkZ1bmMoW10sICJmMzIiKQorICAgICAgICAgICAgLkZ1bmMoW10sICJmNjQiKQorICAg
ICAgICAgICAgLkZ1bmMoWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiXSkKKyAgICAgICAgLkVu
ZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCA3KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGFbMF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBd
LnJldCwgInZvaWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ucGFyYW1z
LCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLnJldCwgInZvaWQiKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMl0ucGFyYW1zLCBbXSk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzJdLnJldCwgImkzMiIpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVszXS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbM10ucmV0LCAiaTY0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzRdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs0XS5yZXQs
ICJmMzIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNV0ucGFyYW1zLCBbXSk7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzVdLnJldCwgImY2NCIpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs2XS5wYXJhbXMsIFsiaTMyIiwgImk2NCIsICJmMzIi
LCAiZjY0Il0pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs2XS5yZXQsICJ2b2lk
Iik7Cit9KSgpOworCisoZnVuY3Rpb24gRW1wdHlJbXBvcnRTZWN0aW9uKCkgeworICAgIGNvbnN0
IGIgPSAobmV3IEJ1aWxkZXIoKSkuSW1wb3J0KCkuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04u
cGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVuZ3RoLCAxKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJJbXBvcnQiKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAwKTsKK30pKCk7CisKKyhmdW5jdGlvbiBJbXBvcnRC
ZWZvcmVUeXBlU2VjdGlvbnMoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5JbXBv
cnQoKS5FbmQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGIuVHlwZSgpLCBFcnJvciwgYEJh
ZCBzZWN0aW9uIG9yZGVyaW5nOiAiSW1wb3J0IiBjYW5ub3QgcHJlY2VkZSAiVHlwZSJgKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbldpdGhvdXRUeXBlU2VjdGlvbigpIHsKKyAg
ICBjb25zdCBpID0gKG5ldyBCdWlsZGVyKCkpLkltcG9ydCgpOworICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gaS5GdW5jdGlvbigiZm9vIiwgImJhciIsIDApLCBFcnJvciwgYENhbid0IHVzZSB0eXBl
IDAgaWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3QgcHJlc2VudGApOworfSkoKTsKKworKGZ1bmN0aW9u
IEltcG9ydEZ1bmN0aW9uV2l0aEludmFsaWRUeXBlKCkgeworICAgIGNvbnN0IGkgPSAobmV3IEJ1
aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkltcG9ydCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
aS5GdW5jdGlvbigiZm9vIiwgImJhciIsIDApLCBFcnJvciwgYFR5cGUgMCBkb2Vzbid0IGV4aXN0
IGluIHR5cGUgc2VjdGlvbmApOworfSkoKTsKKworKGZ1bmN0aW9uIEltcG9ydEZ1bmN0aW9uKCkg
eworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5GdW5jKFtd
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwg
ImJhciIsIDApCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpz
b24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMSk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLm1vZHVsZSwgImZvbyIpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5maWVsZCwgImJhciIpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFd
LmRhdGFbMF0ua2luZCwgIkZ1bmN0aW9uIik7Cit9KSgpOworCisoZnVuY3Rpb24gSW1wb3J0RnVu
Y3Rpb25zV2l0aEV4aXN0aW5nVHlwZXMoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigp
KQorICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAuRnVuYyhbXSkKKyAgICAgICAgICAgIC5G
dW5jKFtdLCAiaTMyIikKKyAgICAgICAgICAgIC5GdW5jKFsiaTY0IiwgImkzMiJdKQorICAgICAg
ICAgICAgLkZ1bmMoWyJpNjQiLCAiaTY0Il0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuSW1w
b3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJhciIsIHsgcGFyYW1zOiBbXSB9
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYmF6IiwgeyBwYXJhbXM6IFtdLCByZXQ6
ICJpMzIiIH0pCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJib28iLCB7IHBhcmFtczog
WyJpNjQiLCAiaTY0Il0gfSkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBh
cnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCA0
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVuZ3RoLCAzKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzFdLnR5cGUsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVsyXS50eXBlLCAzKTsKK30pKCk7CisKKyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbldpdGhOZXdU
eXBlKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5F
bmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJh
ciIsIHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYmF6Iiwg
eyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIs
ICJib28iLCB7IHBhcmFtczogWyJpNjQiLCAiaTY0Il0gfSkKKyAgICAgICAgLkVuZCgpOworICAg
IGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGEubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0u
cmV0LCAidm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbXMs
IFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ucmV0LCAiaTMyIik7Cisg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLnBhcmFtcywgW10pOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzJdLnBhcmFtcywgWyJpNjQiLCAiaTY0Il0pOworfSkoKTsKKworKGZ1
bmN0aW9uIEVtcHR5RXhwb3J0U2VjdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVy
KCkpLkV4cG9ydCgpLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5uYW1lLCAiRXhwb3J0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
Lmxlbmd0aCwgMCk7Cit9KSgpOworCisoZnVuY3Rpb24gRXhwb3J0RnVuY3Rpb25XaXRob3V0VHlw
ZVNlY3Rpb24oKSB7CisgICAgY29uc3QgZSA9IChuZXcgQnVpbGRlcigpKS5FeHBvcnQoKTsKKyAg
ICBhc3NlcnQudGhyb3dzKCgpID0+IGUuRnVuY3Rpb24oImZvbyIsIDAsIDApLCBFcnJvciwgYENh
bid0IHVzZSB0eXBlIDAgaWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3QgcHJlc2VudGApOworfSkoKTsK
KworKGZ1bmN0aW9uIEV4cG9ydEZ1bmN0aW9uV2l0aEludmFsaWRUeXBlKCkgeworICAgIGNvbnN0
IGUgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkV4cG9ydCgpOworICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gZS5GdW5jdGlvbigiZm9vIiwgMCwgMCksIEVycm9yLCBgVHlwZSAwIGRvZXNu
J3QgZXhpc3QgaW4gdHlwZSBzZWN0aW9uYCk7Cit9KSgpOworCisoZnVuY3Rpb24gRXhwb3J0QW5J
bXBvcnQoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiZm9vIiwgImJhciIsIHsgcGFyYW1z
OiBbXSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oIkV4cG9ydEFuSW1wb3J0
IiwgeyBtb2R1bGU6ICJmb28iLCBmaWVsZDogImJhciIgfSkuRW5kKCk7CisgICAgY29uc3QgaiA9
IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0ubmFtZSwg
IkV4cG9ydCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YS5sZW5ndGgsIDEpOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS5maWVsZCwgIkV4cG9ydEFuSW1wb3J0
Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsyXS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS5pbmRleCwgMCk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsyXS5kYXRhWzBdLmtpbmQsICJGdW5jdGlvbiIpOworfSkoKTsKKworKGZ1bmN0aW9u
IEV4cG9ydE1pc21hdGNoZWRJbXBvcnQoKSB7CisgICAgY29uc3QgZSA9IChuZXcgQnVpbGRlcigp
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5GdW5jdGlvbigiZm9v
IiwgImJhciIsIHsgcGFyYW1zOiBbXSB9KS5FbmQoKQorICAgICAgICAuRXhwb3J0KCk7CisgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBlLkZ1bmN0aW9uKCJmb28iLCAwLCB7IHBhcmFtczogWyJpMzIi
XSB9KSwgRXJyb3IsIGBSZS1leHBvcnRpbmcgaW1wb3J0ICJiYXIiIGFzICJmb28iIGhhcyBtaXNt
YXRjaGluZyB0eXBlYCk7Cit9KSgpOworCiAoZnVuY3Rpb24gRW1wdHlDb2RlU2VjdGlvbigpIHsK
ICAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKICAgICBiLkNvZGUoKTsKQEAgLTk3LDk5ICsy
NTksMTU0IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIAog
KGZ1bmN0aW9uIENvZGVTZWN0aW9uV2l0aEVtcHR5RnVuY3Rpb24oKSB7CiAgICAgY29uc3QgYiA9
IG5ldyBCdWlsZGVyKCk7Ci0gICAgYi5Db2RlKCkKLSAgICAgICAgLkZ1bmN0aW9uKCk7CisgICAg
Yi5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCk7
CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNl
Y3Rpb24ubGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJDb2Rl
Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0ubmFtZSwgIlR5cGUiKTsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGEubGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1l
dGVyQ291bnQsIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHMu
bGVuZ3RoLCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5n
dGgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbXMsIFtdKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucmV0LCAidm9pZCIpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMV0ubmFtZSwgIkNvZGUiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGEubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0ubmFtZSwgdW5kZWZpbmVkKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
dHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnBhcmFtZXRlckNv
dW50LCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzLmxlbmd0
aCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAw
KTsKIH0pKCk7CiAKIChmdW5jdGlvbiBDb2RlU2VjdGlvbldpdGhFbXB0eUZ1bmN0aW9uV2l0aFBh
cmFtZXRlcnMoKSB7CiAgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Ci0gICAgYi5Db2RlKCkK
LSAgICAgICAgLkZ1bmN0aW9uKFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0Il0pOworICAgIGIu
VHlwZSgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7IHBh
cmFtczogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiXSB9KTsKICAgICBjb25zdCBqID0gSlNP
Ti5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDEpOwot
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkNvZGUiKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uLmxlbmd0aCwgMik7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxl
bmd0aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtZXRlckNv
dW50LCA0KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzBdLCAi
aTMyIik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fsc1sxXSwgImk2
NCIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHNbMl0sICJmMzIi
KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzNdLCAiZjY0Iik7
Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAwKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1zLCBbImkzMiIsICJpNjQiLCAi
ZjMyIiwgImY2NCJdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucmV0LCAi
dm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgsIDEpOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0ucGFyYW1ldGVyQ291bnQsIDQpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5sb2NhbHNbMF0sICJpMzIiKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzWzFdLCAiaTY0Iik7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzBdLmxvY2Fsc1syXSwgImYzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5sb2NhbHNbM10sICJmNjQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEludmFsaWRG
dW5jdGlvblBhcmFtZXRlcnMoKSB7Ci0gICAgZm9yIChsZXQgaW52YWxpZCBpbiBbIiIsICJ2b2lk
IiwgImJvb2wiLCAiYW55IiwgInN0cnVjdCJdKSB7CisgICAgZm9yIChsZXQgaW52YWxpZCBvZiBb
IiIsICJ2b2lkIiwgImJvb2wiLCAiYW55IiwgInN0cnVjdCIsIDAsIDMuMTQsIHVuZGVmaW5lZCwg
W10sIHt9XSkgewogICAgICAgICBjb25zdCBjID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKTsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGMuRnVuY3Rpb24oW2ludmFsaWRdKTsKLSAgICAgICAg
fSBjYXRjaCAoZSkgewotICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgeyBjb250
aW51ZTsgfQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhbiBFcnJvciwg
Z290ICR7ZX1gKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVk
IHRvIHRocm93IGFuIEVycm9yIGZvciAke2ludmFsaWR9YCk7CisgICAgICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gYy5GdW5jdGlvbih7IHBhcmFtczogW2ludmFsaWRdIH0pLCBFcnJvciwgYFR5cGUg
cGFyYW1ldGVyICR7aW52YWxpZH0gaXNuJ3QgYSB2YWxpZCB2YWx1ZSB0eXBlYCk7CiAgICAgfQog
fSkoKTsKIAogKGZ1bmN0aW9uIFNpbXBsZUZ1bmN0aW9uKCkgewogICAgIGNvbnN0IGIgPSBuZXcg
QnVpbGRlcigpOwotICAgIGIuQ29kZSgpCi0gICAgICAgIC5GdW5jdGlvbigpCi0gICAgICAgICAg
ICAuTm9wKCkKLSAgICAgICAgICAgIC5Ob3AoKQotICAgICAgICAuRW5kKCk7CisgICAgYi5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkKKyAgICAg
ICAgICAgICAgICAuTm9wKCkKKyAgICAgICAgICAgICAgICAuTm9wKCkKKyAgICAgICAgICAgIC5F
bmQoKTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLmxvY2Fscy5sZW5ndGgsIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLmNvZGVbMF0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YVswXS5jb2RlWzFdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmxvY2Fs
cy5sZW5ndGgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxl
bmd0aCwgMyk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFt
ZSwgIm5vcCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLm5h
bWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5u
YW1lLCAiZW5kIik7CiB9KSgpOwogCiAoZnVuY3Rpb24gVHdvU2ltcGxlRnVuY3Rpb25zKCkgewog
ICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpOwotICAgIGIuQ29kZSgpCi0gICAgICAgIC5GdW5j
dGlvbigpCi0gICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgICAgIC5Ob3AoKQorICAgIGIuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpCisgICAg
ICAgICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpCisgICAgICAgICAgICAgICAgLlJldHVybigp
CisgICAgICAgICAgICAuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkp
OworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgsIDIpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVsxXS5sb2NhbHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMV0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVsxXS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMV0uY29kZVsxXS5uYW1lLCAiZW5kIik7Cit9KSgpOworCisoZnVu
Y3Rpb24gTmFtZWRGdW5jdGlvbnMoKSB7CisgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCkuVHlw
ZSgpLkVuZCgpLkNvZGUoKQorICAgICAgICAuRnVuY3Rpb24oImhlbGxvIikuRW5kKCkKKyAgICAg
ICAgLkZ1bmN0aW9uKCJ3b3JsZCIsIHsgcGFyYW1zOiBbImkzMiJdIH0pLkVuZCgpCisgICAgLkVu
ZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0ubmFtZSwgImhlbGxvIik7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzBdLnBhcmFtZXRlckNvdW50LCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMV0ubmFtZSwgIndvcmxkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzFdLnBhcmFtZXRlckNvdW50LCAxKTsKK30pKCk7CisKKyhmdW5jdGlvbiBFeHBvcnRT
aW1wbGVGdW5jdGlvbnMoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKQorICAgICAg
ICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJmb28iLCAwLCB7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIikK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiYmV0dGVyTmFtZUZvckJhciIsICJiYXIiKQogICAgICAg
ICAuRW5kKCkKLSAgICAgICAgLkZ1bmN0aW9uKCkKLSAgICAgICAgICAgIC5SZXR1cm4oKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oeyBwYXJhbXM6IFtdIH0pLk5vcCgp
LkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImJhciIsIHsgcGFyYW1zOiBbXSB9KS5Ob3Ao
KS5FbmQoKQogICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29u
KCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDIpOwotICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOwotICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVsxXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0uY29kZS5sZW5ndGgsIDIpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVsxXS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0uY29kZVsxXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLnJldCwgInZvaWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0
aCwgMyk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmZpZWxkLCAiZm9vIik7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5pbmRleCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzBdLmtpbmQsICJGdW5jdGlvbiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVsxXS5maWVsZCwgImJhciIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVsxXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0uaW5k
ZXgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsxXS5raW5kLCAiRnVuY3Rp
b24iKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0uZmllbGQsICJiZXR0ZXJO
YW1lRm9yQmFyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLnR5cGUsIDAp
OworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsyXS5pbmRleCwgMSk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLmtpbmQsICJGdW5jdGlvbiIpOworfSkoKTsKKwor
KGZ1bmN0aW9uIEV4cG9ydFVuZGVmaW5lZEZ1bmN0aW9uKCkgeworICAgIGNvbnN0IGMgPSAobmV3
IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkV4cG9ydCgpLkZ1bmN0aW9uKCJmb28iKS5FbmQoKS5D
b2RlKCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBjLkVuZCgpLCBFcnJvciwgYEV4cG9ydCBz
ZWN0aW9uIGNvbnRhaW5zIHVuZGVmaW5lZCBmdW5jdGlvbiAiZm9vImApOwogfSkoKTsKIAogKGZ1
bmN0aW9uIFR3b0J1aWxkZXJzQXRUaGVTYW1lVGltZSgpIHsKICAgICBjb25zdCBiID0gW25ldyBC
dWlsZGVyKCksIG5ldyBCdWlsZGVyKCldOwotICAgIGNvbnN0IGYgPSBiLm1hcChidWlsZGVyID0+
IGJ1aWxkZXIuQ29kZSgpLkZ1bmN0aW9uKCkpOworICAgIGNvbnN0IGYgPSBiLm1hcChidWlsZGVy
ID0+IGJ1aWxkZXIuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpKTsKICAgICBmWzBdLk5v
cCgpOwogICAgIGZbMV0uUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAgZlswXS5Ob3AoKS5FbmQo
KS5FbmQoKTsKICAgICBjb25zdCBqID0gYi5tYXAoYnVpbGRlciA9PiBKU09OLnBhcnNlKGJ1aWxk
ZXIuanNvbigpKSk7Ci0gICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGUu
bGVuZ3RoLCAzKTsKLSAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsw
XS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblswXS5kYXRhWzBdLmNv
ZGVbMV0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMF0uZGF0YVsw
XS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKLSAgICBhc3NlcnQuZXEoalsxXS5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZS5sZW5ndGgsIDIpOwotICAgIGFzc2VydC5lcShqWzFdLnNlY3Rpb25bMF0uZGF0
YVswXS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKLSAgICBhc3NlcnQuZXEoalsxXS5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGpbMF0uc2Vj
dGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoalswXS5zZWN0
aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGpbMF0u
c2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIpOworICAgIGFzc2VydC5lcShq
WzBdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKKyAgICBhc3NlcnQu
ZXEoalsxXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5l
cShqWzFdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJyZXR1cm4iKTsKKyAgICBh
c3NlcnQuZXEoalsxXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiZW5kIik7CiB9
KSgpOwogCiAoZnVuY3Rpb24gQ2hlY2tlZE9wY29kZUFyZ3VtZW50c1Rvb01hbnkoKSB7CkBAIC0x
OTcsNyArNDE0LDcgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4g
ewogfSkoKTsKIAogKGZ1bmN0aW9uIFVuY2hlY2tlZE9wY29kZUFyZ3VtZW50c1Rvb01hbnkoKSB7
Ci0gICAgKG5ldyBCdWlsZGVyKCkpLnNldENoZWNrZWQoZmFsc2UpLkNvZGUoKS5GdW5jdGlvbigp
Lk5vcCgiVGhpcyBpcyBmaW5lLiIsICJJJ20gT0sgd2l0aCB0aGUgZXZlbnRzIHRoYXQgYXJlIHVu
Zm9sZGluZyBjdXJyZW50bHkuIik7CisgICAgKG5ldyBCdWlsZGVyKCkpLnNldENoZWNrZWQoZmFs
c2UpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5Ob3AoIlRoaXMgaXMgZmluZS4iLCAi
SSdtIE9LIHdpdGggdGhlIGV2ZW50cyB0aGF0IGFyZSB1bmZvbGRpbmcgY3VycmVudGx5LiIpOwog
fSkoKTsKIAogKGZ1bmN0aW9uIENoZWNrZWRPcGNvZGVBcmd1bWVudHNOb3RFbm91Z2goKSB7CkBA
IC0yMDUsMTggKzQyMiwxOCBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdl
KSA9PiB7CiB9KSgpOwogCiAoZnVuY3Rpb24gVW5jaGVja2VkT3Bjb2RlQXJndW1lbnRzTm90RW5v
dWdoKCkgewotICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNlKS5Db2RlKCkuRnVu
Y3Rpb24oKS5JMzJDb25zdCgpOworICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNl
KS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuSTMyQ29uc3QoKTsKIH0pKCk7CiAKIChm
dW5jdGlvbiBDYWxsTm9Bcmd1bWVudHMoKSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigp
KS5Db2RlKCkuRnVuY3Rpb24oKS5DYWxsKDApLkVuZCgpLkVuZCgpOworICAgIGNvbnN0IGIgPSAo
bmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuRW5k
KCkuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImNhbGwiKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0
aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRp
YXRlc1swXSwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0u
bmFtZSwgImVuZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxl
bmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFt
ZSwgImNhbGwiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5h
cmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlc1swXSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9u
IENhbGxJbnZhbGlkKCkgewpAQCAtMjI2LDEyICs0NDMsMTIgQEAgY29uc3QgYXNzZXJ0T3BUaHJv
d3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogCiAoZnVuY3Rpb24gSTMyQ29uc3RWYWxpZCgpIHsK
ICAgICBmb3IgKGxldCBjIG9mIFswLCAxLCAyLCA0MiwgMTMzNywgMHhGRiwgMHhGRkZGLCAweDdG
RkZGRkZGLCAweEZGRkZGRkZFLCAweEZGRkZGRkZGXSkgewotICAgICAgICBjb25zdCBiID0gKG5l
dyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLkkzMkNvbnN0KGMpLlJldHVybigpLkVuZCgp
LkVuZCgpOworICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5D
b2RlKCkuRnVuY3Rpb24oKS5JMzJDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKICAgICAg
ICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgICAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiaTMyLmNvbnN0Iik7Ci0gICAgICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDAp
OwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlh
dGVzLmxlbmd0aCwgMSk7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5j
b2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFd
LmRhdGFbMF0uY29kZVswXS5uYW1lLCAiaTMyLmNvbnN0Iik7CisgICAgICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOworICAgICAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0
aCwgMSk7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmlt
bWVkaWF0ZXNbMF0sIGMpOwogICAgIH0KIH0pKCk7CiAKQEAgLTI0NCwxMiArNDYxLDEyIEBAIGNv
bnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIAogKGZ1bmN0aW9uIEYz
MkNvbnN0VmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbMCwgLTAuLCAwLjIsIE1hdGguUEks
IDB4MTAwMDAwMDAwXSkgewotICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUo
KS5GdW5jdGlvbigpLkYzMkNvbnN0KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOworICAgICAgICBj
b25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5G
MzJDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKICAgICAgICAgY29uc3QgaiA9IEpTT04u
cGFyc2UoYi5qc29uKCkpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0u
Y29kZVswXS5uYW1lLCAiZjMyLmNvbnN0Iik7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOwotICAgICAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0g
ICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNb
MF0sIGMpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5u
YW1lLCAiZjMyLmNvbnN0Iik7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsw
XS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOwog
ICAgIH0KIH0pKCk7CiAKQEAgLTI2MCwxMiArNDc3LDEyIEBAIGNvbnN0IGFzc2VydE9wVGhyb3dz
ID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIAogKGZ1bmN0aW9uIEY2NENvbnN0VmFsaWQoKSB7CiAg
ICAgZm9yIChsZXQgYyBvZiBbMCwgLTAuLCAwLjIsIE1hdGguUEksIDB4MTAwMDAwMDAwXSkgewot
ICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLkY2NENv
bnN0KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOworICAgICAgICBjb25zdCBiID0gKG5ldyBCdWls
ZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5GNjRDb25zdChjKS5SZXR1cm4o
KS5FbmQoKS5FbmQoKTsKICAgICAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwot
ICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiZjY0
LmNvbnN0Iik7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBd
LmFyZ3VtZW50cy5sZW5ndGgsIDApOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0gICAgICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOworICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiZjY0LmNvbnN0Iik7
CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50
cy5sZW5ndGgsIDApOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOwogICAgIH0KIH0pKCk7CiAKQEAg
LTI3NSwyMSArNDkyLDIxIEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2Up
ID0+IHsKIH0pKCk7CiAKIChmdW5jdGlvbiBDYWxsT25lRnJvbVN0YWNrKCkgewotICAgIGNvbnN0
IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpCi0gICAgICAgIC5GdW5jdGlvbihbImkzMiJdKQor
ICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKQorICAgICAg
ICAuRnVuY3Rpb24oeyBwYXJhbXM6IFsiaTMyIl0gfSkKICAgICAgICAgICAgIC5JMzJDb25zdCg0
MikKICAgICAgICAgICAgIC5DYWxsKDApCiAgICAgICAgIC5FbmQoKQogICAgIC5FbmQoKTsKICAg
ICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGFbMF0uY29kZVswXS5uYW1lLCAiaTMyLmNvbnN0Iik7Ci0gICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlc1swXSwgNDIpOwotICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJjYWxsIik7Ci0gICAgLy8gRklY
TUU6IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLmFyZ3VtZW50cy5sZW5n
dGgsIDEpOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0uaW1tZWRpYXRlcy5sZW5n
dGgsIDEpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLmltbWVk
aWF0ZXNbMF0sIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzJd
Lm5hbWUsICJlbmQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5s
ZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5h
bWUsICJpMzIuY29uc3QiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZVswXS5pbW1lZGlhdGVzWzBdLCA0Mik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRh
WzBdLmNvZGVbMV0ubmFtZSwgImNhbGwiKTsKKyAgICAvLyBGSVhNRTogYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzBdLmNvZGVbMV0uYXJndW1lbnRzLmxlbmd0aCwgMSk7IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0uaW1tZWRpYXRlc1swXSwgMCk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOwogfSko
KTsKIAogLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzI2NyBhbGwgb2YgdGhlc2U6CkBAIC0zMDEsMjIgKzUxOCwyMiBAQCBjb25zdCBhc3NlcnRPcFRo
cm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAvLyAgdGVzdCBmdW5jdGlvbiBuYW1lcyAoYm90
aCBzZXR0aW5nIGFuZCBjYWxsaW5nIHRoZW0pLgogCiAoZnVuY3Rpb24gQ2FsbE1hbnlGcm9tU3Rh
Y2soKSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkKLSAgICAgICAgICAu
RnVuY3Rpb24oWyJpMzIiLCAiaTMyIiwgImkzMiIsICJpMzIiXSkKKyAgICBjb25zdCBiID0gKG5l
dyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKHsgcGFy
YW1zOiBbImkzMiIsICJpMzIiLCAiaTMyIiwgImkzMiJdIH0pCiAgICAgICAgICAgICAgIC5JMzJD
b25zdCg0MikuSTMyQ29uc3QoMTMzNykuSTMyQ29uc3QoMHhCRUVGKS5JMzJDb25zdCgweEZGRkYp
CiAgICAgICAgICAgICAgIC5DYWxsKDApCiAgICAgICAgIC5FbmQoKQogICAgIC5FbmQoKTsKICAg
ICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCA2KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGFbMF0uY29kZVs0XS5uYW1lLCAiY2FsbCIpOwotICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVs0XS5hcmd1bWVudHMubGVuZ3RoLCA0KTsgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzRdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKLSAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVs0XS5pbW1lZGlhdGVzWzBdLCAwKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDYpOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzRdLm5hbWUsICJjYWxsIik7Cisg
ICAgLy8gRklYTUU6IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzRdLmFyZ3Vt
ZW50cy5sZW5ndGgsIDQpOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzMjY3CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbNF0uaW1tZWRp
YXRlcy5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2Rl
WzRdLmltbWVkaWF0ZXNbMF0sIDApOwogfSkoKTsKIAogKGZ1bmN0aW9uIE9wY29kZUFkZCgpIHsK
LSAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKQorICAgIGNvbnN0IGIgPSAobmV3
IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKQogICAgICAgICAgIC5GdW5jdGlvbigpCiAg
ICAgICAgICAgICAgIC5JMzJDb25zdCg0MikuSTMyQ29uc3QoMTMzNykKICAgICAgICAgICAgICAg
LkkzMkFkZCgpCkBAIC0zMjQsMzkgKzU0MSwzOSBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChv
cEZuLCBtZXNzYWdlKSA9PiB7CiAgICAgICAgIC5FbmQoKQogICAgIC5FbmQoKTsKICAgICBjb25z
dCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhWzBdLmNvZGUubGVuZ3RoLCA1KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVsyXS5uYW1lLCAiaTMyLmFkZCIpOwotICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsyXS5hcmd1bWVudHMubGVuZ3RoLCAyKTsgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NwotICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJyZXR1cm4iKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDUpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJpMzIuYWRkIik7CisgICAgLy8gRklYTUU6
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLmFyZ3VtZW50cy5sZW5ndGgs
IDIpOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbM10ubmFtZSwgInJldHVybiIpOwog
ICAgIC8vIEZJWE1FIGNoZWNrIHJldHVybi4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzI2NwogfSkoKTsKIAogKGZ1bmN0aW9uIE9wY29kZVVucmVhY2hhYmxlKCkg
ewotICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFj
aGFibGUoKS5FbmQoKS5FbmQoKTsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUo
KS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpOwogICAg
IGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlWzBdLm5hbWUsICJ1bnJlYWNoYWJsZSIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgInVucmVhY2hhYmxlIik7CiB9KSgpOwogCiAoZnVu
Y3Rpb24gT3Bjb2RlVW5yZWFjaGFibGVDb21iaW5hdGlvbnMoKSB7Ci0gICAgKG5ldyBCdWlsZGVy
KCkpLkNvZGUoKS5GdW5jdGlvbigpLk5vcCgpLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7Ci0g
ICAgKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuTm9wKCku
RW5kKCkuRW5kKCk7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlJldHVy
bigpLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLkNvZGUo
KS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuUmV0dXJuKCkuRW5kKCkuRW5kKCk7Ci0gICAgKG5l
dyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuVW5yZWFjaGFibGUoKS5FbmQo
KS5FbmQoKTsKLSAgICAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFi
bGUoKS5DYWxsKDApLkVuZCgpLkVuZCgpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5k
KCkuQ29kZSgpLkZ1bmN0aW9uKCkuTm9wKCkuVW5yZWFjaGFibGUoKS5FbmQoKS5FbmQoKS5qc29u
KCk7CisgICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5V
bnJlYWNoYWJsZSgpLk5vcCgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3IEJ1aWxkZXIo
KSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLlJldHVybigpLlVucmVhY2hhYmxlKCku
RW5kKCkuRW5kKCkuanNvbigpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29k
ZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5SZXR1cm4oKS5FbmQoKS5FbmQoKS5qc29uKCk7
CisgICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5DYWxs
KDApLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCkuanNvbigpOworICAgIChuZXcgQnVpbGRlcigp
KS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5DYWxsKDApLkVu
ZCgpLkVuZCgpLmpzb24oKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNvZGVTZWxlY3QoKSB7Ci0g
ICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKQorICAgIGNvbnN0
IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpCiAgICAg
ICAgIC5JMzJDb25zdCgxKS5JMzJDb25zdCgyKS5JMzJDb25zdCgwKQogICAgICAgICAuU2VsZWN0
KCkKICAgICAgICAgLlJldHVybigpCiAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7CiAgICAgY29u
c3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlLmxlbmd0aCwgNik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLmNvZGVbM10ubmFtZSwgInNlbGVjdCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVswXS5jb2RlLmxlbmd0aCwgNik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRh
WzBdLmNvZGVbM10ubmFtZSwgInNlbGVjdCIpOwogfSkoKTsKIAogLy8gRklYTUUgdGVzdCB0eXBl
IG1pc21hdGNoIHdpdGggc2VsZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzMjY3CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVp
bGRlcldlYkFzc2VtYmx5LmpzIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJX
ZWJBc3NlbWJseS5qcwppbmRleCBhMjUxYzQzLi5hYzU3ZDM3IDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzCisrKyBiL0pTVGVzdHMv
d2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanMKQEAgLTMwLDE2ICszMCwz
IEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogICAgICAgICAgICAgICBb
IjAwMDAwMDAwIDAwIDYxIDczIDZkIDBjIDAwIDAwIDAwIDAwIDBmIDBhIDRmIDAwIDQ4IDAwIDQ4
ICB8wrdhc23Ct8K3wrfCt8K3wrfCt0/Ct0jCt0h8IiwKICAgICAgICAgICAgICAgICIwMDAwMDAx
MCAwMCA0MSAwMCA0OSAwMCBkZSBhZCBjMCBmZSAgICAgICAgICAgICAgICAgICAgICAgfMK3QcK3
ScK3wrfCt8K3wrcgICAgICAgfCJdLmpvaW4oIlxuIikpOwogfSkoKTsKLQotKGZ1bmN0aW9uIEJh
c2ljKCkgewotICAgIGNvbnN0IGJpbiA9IChuZXcgQnVpbGRlcigpKQotICAgICAgICAuQ29kZSgp
Ci0gICAgICAgICAgICAuRnVuY3Rpb24oKQotICAgICAgICAgICAgICAgIC5Ob3AoKQotICAgICAg
ICAgICAgICAgIC5Ob3AoKQotICAgICAgICAgICAgLkVuZCgpCi0gICAgICAgIC5FbmQoKQotICAg
ICAgICAuV2ViQXNzZW1ibHkoKTsKLSAgICBhc3NlcnQuZXEoYmluLmhleGR1bXAoKS50cmltKCks
Ci0gICAgICAgICAgICAgICIwMDAwMDAwMCAwMCA2MSA3MyA2ZCAwYyAwMCAwMCAwMCAwYSAwNiAw
MSAwNCAwMCAwYSAwYSAwZiAgfMK3YXNtwrfCt8K3wrfCt8K3wrfCt8K3wrfCt8K3fCIpOwotfSko
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiZjViMjE4Li4xMTdjZDZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTMyLDYgKzExMzIsMjMg
QEAgZWxzZSAoKQogICAgICkKIGVuZGlmICgpCiAKKyMgV2ViQXNzZW1ibHkgZ2VuZXJhdG9yCisK
K21hY3JvKEdFTkVSQVRFX1BZVEhPTiBfZ2VuZXJhdG9yIF9pbnB1dCBfb3V0cHV0KQorICAgIGFk
ZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgT1VUUFVUICR7X291dHB1dH0KKyAgICAgICAgTUFJ
Tl9ERVBFTkRFTkNZICR7X2dlbmVyYXRvcn0KKyAgICAgICAgREVQRU5EUyAke19pbnB1dH0KKyAg
ICAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke19nZW5lcmF0b3J9ICR7X2lucHV0
fSAke19vdXRwdXR9CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIEphdmFTY3Jp
cHRDb3JlX0hFQURFUlMgJHtfb3V0cHV0fSkKKyAgICBBRERfU09VUkNFX0RFUEVOREVOQ0lFUygk
e19pbnB1dH0gJHtfb3V0cHV0fSkKK2VuZG1hY3JvKCkKK0dFTkVSQVRFX1BZVEhPTigke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0vV2FzbU9wcy5oKQorR0VORVJBVEVfUFlUSE9OKCR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5w
eSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtERVJJVkVEX1NP
VVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9XYXNtVmFsaWRhdGVJbmxpbmVzLmgpCisKKyMgTFVU
IGdlbmVyYXRvcgorCiBzZXQoSEFTSF9MVVRfR0VORVJBVE9SICR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9jcmVhdGVfaGFzaF90YWJsZSkKIG1hY3JvKEdFTkVSQVRFX0hBU0hfTFVUIF9pbnB1
dCBfb3V0cHV0KQogICAgIGFkZF9jdXN0b21fY29tbWFuZCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CmluZGV4IDcwYWVlYWYuLmMzYThiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDc5IEBACisyMDE2LTExLTAyICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBtb3JlIHNlY3Rpb25zCisK
KyAgICAgICAgT24gdGhlIEpTQyBzaWRlOgorCisgICAgICAgICAtIFB1dCBpbiBwYXJzZXIgc3R1
YnMgZm9yIGFsbCBXZWJBc3NlbWJseSBzZWN0aW9ucy4KKyAgICAgICAgIC0gUGFyc2UgSW1wb3J0
LCBFeHBvcnQgc2VjdGlvbnMuCisgICAgICAgICAtIFVzZSB0cnlSZXNlcnZlQ2FwYWNpdHkgaW5z
dGVhZCBvZiByZXNlcnZlLCBhbmQgYmFpbCBvdXQgb2YgdGhlIHBhcnNlciBpZiBpdCBmYWlscy4g
VGhpcyBwcmV2ZW50cyB0aGUgcGFyc2VyIGZyb20gYnJpbmdpbmcgZXZlcnl0aGluZyBkb3duIHdo
ZW4gZmFjZWQgd2l0aCBhIG1hbGljaW91cyBpbnB1dC4KKyAgICAgICAgIC0gRW5jYXBzdWxhdGUg
YWxsIHBhcnNlZCBtb2R1bGUgaW5mb3JtYXRpb24gaW50byBpdHMgb3duIHN0cnVjdHVyZSwgbWFr
aW5nIGl0IGVhc2llciB0byBwYXNzIGFyb3VuZCAoZnJvbSBwYXJzZXIgdG8gUGxhbiB0byBNb2R1
bGUgdG8gSW5zdGFuY2UpLgorICAgICAgICAgLSBDcmVhdGUgV2FzbUZvcm1hdC5jcHAgdG8gaG9s
ZCBwYXJzZWQgbW9kdWxlIGluZm9ybWF0aW9uJ3MgZHRvciB0byBhdm9pZCBpbmNsdWRpbmcgV2Fz
bU1lbW9yeS5oIG5lZWRsZXNzbHkuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVycyBv
ZiBwb2x5ZmlsbC1wcm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAgLSBB
ZGQgbWlzc2luZyBXYXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdlbmVy
YXRpb24gZm9yIGNtYWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRlc3Rp
bmcgc2lkZToKKworICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlvbiBv
bmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hlY2sg
c2VjdGlvbiBvcmRlciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBhdXRv
LWdlbmVyYXRlIHRoZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9y
dCAvIENvZGUgZW50cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9y
dC4KKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IE1vZHVsZSBzaG91bGQgZGVjb2RlIHN0
cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6IG1pc3NpbmcgYXV0by1nZW5yYXRpb24KKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBtZXJnZSBjb25mbGljdAorICAgICAg
ICAqIHRlc3RXYXNtLmNwcDogdXBkYXRlIGZvciBBUEkgY2hhbmdlcywgbm8gZnVuY3Rpb25hbCBj
aGFuZ2UKKyAgICAgICAgKGNoZWNrUGxhbik6CisgICAgICAgIChydW5XYXNtVGVzdHMpOgorICAg
ICAgICAqIHdhc20vV2FzbUZvcm1hdC5jcHA6IGFkZCBhIGR0b3Igd2hpY2ggcmVxdWlyZXMgZXh0
cmEgaGVhZGVycyB3aGljaCBJJ2QgcmF0aGVyIG5vdCBpbmNsdWRlIGluIFdhc21Gb3JtYXQuaAor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9u
KToKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDogQWRkIEV4dGVybmFsLCBJbXBvcnQsIEZ1
bmN0aW9uaW5mb3JtYXRpb24sIEV4cG9ydCwgTW9kdWxlSW5mb3JtYXRpb24sIENvbXBpbGVkRnVu
Y3Rpb24sIGFuZCByZW1vdmUgb2Jzb2xldGUgc3R1ZmYgd2hpY2ggd2FzIGEgaG9sZG92ZXIgZnJv
bSB0aGUgZmlyc3QgaW1wbGVtZW50YXRpb24gKGFsbCB0aGF0IGNvZGUgaXMgbm93IGdvbmUsIHNv
IHJlbW92ZSBpdHMgbGljZW5zZSkKKyAgICAgICAgKEpTQzo6V2FzbTo6RXh0ZXJuYWw6OmlzVmFs
aWQpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6IHNpbXBsaWZ5IHNvbWUs
IG1ha2UgbmFtZXMgY29uc2lzdGVudCB3aXRoIHRoZSBXZWJBc3NlbWJseSBzZWN0aW9uIG5hbWVz
LCBjaGVjayBtZW1vcnkgYWxsb2NhdGlvbnMgc28gdGhleSBjYW4gZmFpbCBlYXJseQorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZVR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJz
ZXI6OnBhcnNlSW1wb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJz
ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFy
c2VyOjpwYXJzZUVsZW1lbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBh
cnNlQ29kZSk6IGF2b2lkIG92ZXJmbG93IHRocm91Z2ggZnVuY3Rpb24gc2l6ZS4KKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZURhdGEpOgorICAgICAgICAqIHdhc20vV2Fz
bU1vZHVsZVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6Om1vZHVs
ZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UGFyc2VyOjpjb25zdW1lVVRGOFN0cmluZyk6IGFkZCBhcyByZXF1aXJlZCBieSBz
cGVjCisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VFeHRlcm5hbEtpbmQpOiBhZGQg
YXMgcGVyIHNwZWMKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6UGxhbjo6UGxhbik6IGZpeCBzb21lIG93bmVyc2hpcCwgaW1wcm92ZSBzb21lIGVycm9y
IG1lc3NhZ2VzCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOiBmaXggc29tZSBvd25lcnNoaXAK
KyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Z2V0TW9kdWxlSW5mb3JtYXRpb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQbGFuOjpnZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
Ojpjb21waWxlZEZ1bmN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21w
aWxlZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Z2V0Q29tcGlsZWRGdW5j
dGlvbnMpOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25zLmg6IG1hY3JvaXplIHdpdGggZGVz
Y3JpcHRpb24sIHNvIHRoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIHN1cGVyIHByZXR0eS4gVGhpcyBj
b3VsZCBiZSBhdXRvLWdlbmVyYXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUpOiB0
YWtlIG1vZHVsZSBpbmZvcm1hdGlvbgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxl
OjpKU1dlYkFzc2VtYmx5TW9kdWxlKTogZGl0dG8KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxl
SW5mb3JtYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNl
KTogY2hlY2sgdGhhdCBtb2R1bGVzIHdpdGggaW1wb3J0cyBhcmUgaW5zdGFudGlhdGVkIHdpdGgg
YW4gaW1wb3J0IG9iamVjdCwgYXMgcGVyIHNwZWMuIFRoaXMgbmVlZHMgdG8gYmUgdGVzdGVkLgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlU
YWJsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJs
eVRhYmxlKToKKwogMjAxNi0xMS0wMiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIE9uZSBmaWxlIHBlciBjbGFzcyBmb3IgQ29kZUJsb2NrLmgvLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwNjU5ZGFiLi5hYWFlNjA3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI3OCw3ICsxMjc4LDYgQEAKIAkJNTNGRDA0RDQxRDdB
QjI5MTAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8q
IFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovOyB9OwogCQk1M0ZGN0Y5OTFEQkZDRDkwMDBBMjZD
Q0MgLyogV2FzbVZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggKi87
IH07CiAJCTUzRkY3RjlCMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRjdGOUExREJGRDJC
OTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAgKi87IH07Ci0JCTUzRkY3RjlEMURDMDBEQjEw
MEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRkY3RjlDMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNw
cCAqLzsgfTsKIAkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGRDgx
REI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovOyB9OwogCQk1QjcwQ0ZERjFE
QjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBK
U0FzeW5jRnVuY3Rpb24uY3BwICovOyB9OwogCQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyog
QXN5bmNGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUI3MENGREExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Q
cm90b3R5cGUuaCAqLzsgfTsKQEAgLTE5NzMsNiArMTk3Miw3IEBACiAJCUFEMkZDQzJEMURCODM4
RkQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5UHJvdG90eXBlLmggKi87IH07CiAJCUFEMkZDQzMwMURCODNENDkwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAq
LzsgfTsKIAkJQUQyRkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5
RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IH07CisJCUFEMkZDQzMzMURDNDA0NTQw
MEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNw
cCAqLzsgfTsKIAkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNE
MUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4
IC8qIE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFMzlGRkYx
NkREMTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFBy
b3BlcnR5VGFibGUuY3BwICovOyB9OwpAQCAtMzYyNyw3ICszNjI3LDYgQEAKIAkJNTNGRDA0RDIx
RDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVmFsaWRhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdh
c21WYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNt
VmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0ZGN0Y5QzFEQzAw
REIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXYXNtRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDkxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBF
QzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NDA0LDYgKzQ0MDMsNyBAQAogCQlBRDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYg
LyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzJFMURCODM5RjcwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTV2ViQXNzZW1ibHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJG
Q0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFw
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrR0NNYXBJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREIxRjYyMThENzdEQjcwMDlC
NThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9wYXF1ZVJvb3RTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5Mzcx
ODkxQUQzMzAwRDVDQ0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkxOSw3ICs1OTE5LDcgQEAKIAkJCQk1M0Y0MEU5
MjFENUE0QUIzMDA5OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0ZEMDRE
MTFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQk1
M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8sCi0J
CQkJNTNGRjdGOUMxREMwMERCMTAwQTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwICovLAorCQkJCUFE
MkZDQzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLywKIAkJCQk3QkM1NDdE
MjFCNjk1OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICovLAogCQkJCTUzRjQwRThBMUQ1OTAx
QkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1MzU1NTcxNTFEOURG
QTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8sCkBAIC05ODA3LDYgKzk4MDcsNyBAQAog
CQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJbmZl
cnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFEMkZDQzMzMURDNDA0NTQwMEIzRTcz
NiAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA3MTkwRjAxQTUw
MDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RX
YXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKaW5kZXggZDFiODhk
OC4uMjk3NDVmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCkBAIC0yNzYsMTMgKzI3
NiwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja1BsYW4oUGxhbiYgcGxhbiwgdW5zaWduZWQgZXhwZWN0
ZWROdW1iZXJPZkZ1bmN0aW9ucykKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBpZiAo
cGxhbi5yZXN1bHRTaXplKCkgIT0gZXhwZWN0ZWROdW1iZXJPZkZ1bmN0aW9ucykgeworICAgIGlm
IChwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpICE9IGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlv
bnMpIHsKICAgICAgICAgZGF0YUxvZ0xuKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGZ1bmN0aW9ucyIp
OwogICAgICAgICBDUkFTSCgpOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleHBlY3RlZE51bWJlck9mRnVuY3Rpb25zOyArK2kpIHsKLSAgICAgICAgaWYgKCFwbGFuLnJl
c3VsdChpKSkgeworICAgICAgICBpZiAoIXBsYW4uY29tcGlsZWRGdW5jdGlvbihpKSkgewogICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJGdW5jdGlvbiBhdCBpbmRleCwgIiAsIGksICIgZmFpbGVkIHRv
IGNvbXBpbGUgY29ycmVjdGx5Iik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CkBA
IC0zMTQsMTAgKzMxNCwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBj
aGVja1BsYW4ocGxhbiwgMik7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEp
LT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7Ci0g
ICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7CisgICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAtMS41ZikpOwor
ICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwg
ODcuNjIzNGYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEu
NSkgfSksIC0xLjVmKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQp
LCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0ZikpOwogICAgIH0KIAogICAgIHsKQEAgLTM0MCwxMCAr
MzQwLDEwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihw
bGFuLCAyKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQ
b2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOwotICAgICAgICBDSEVDSyhp
c0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7
IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYpKTsKLSAgICAgICAgQ0hF
Q0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOwotICAgICAgICBDSEVDSyhpc0lk
ZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYpKTsKKyAgICAgICAgQ0hFQ0so
aXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIDEuNWYpKTsKKyAgICAgICAgQ0hF
Q0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5q
c0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDExMi42MjM0Zikp
OworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41
ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41
KSB9KSwgMTEyLjYyMzRmKSk7CiAgICAgfQogCiAgICAgewpAQCAtMzcxLDExICszNzEsMTEgQEAg
c3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDIpOwog
CiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSB9KSwgMTIwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMTIpOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJv
eCg4KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTIpIH0pLCA3OCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUpLCBib3goNiksIGJveCg3KSwgYm94
KDgpLCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJveCgxMDApIH0pLCAxNjYpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMjAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigx
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMTIpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCks
IGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEyKSB9KSwgNzgpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcp
LCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEwMCkgfSksIDE2Nik7CiAg
ICAgfQogCiAgICAgewpAQCAtNDAyLDEwICs0MDIsMTAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRl
c3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhp
cyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNCkgfSksIDI0KTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg0KSB9KSwgMjQpOwog
ICAgIH0KIAogICAgIHsKQEAgLTQyNSwxOCArNDI1LDE4IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21U
ZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKLSAg
ICAgICAgaWYgKHBsYW4ucmVzdWx0U2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0KDApIHx8ICFw
bGFuLnJlc3VsdCgxKSkgeworICAgICAgICBpZiAocGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQo
KSAhPSAyIHx8ICFwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkgfHwgIXBsYW4uY29tcGlsZWRGdW5j
dGlvbigxKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBp
bGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwg
MCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1
KSB9KSwgMTYpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigx
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxNSkgfSksIDE2KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwg
MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSB9KSwgMik7CiAgICAgfQogCiAgICAgewpAQCAtNDU5LDEyICs0NTksMTIgQEAgc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDIpOwogCiAgICAg
ICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0p
LCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50
cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEw
MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MSktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBAIC00ODgsOSArNDg4LDkgQEAgc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAg
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNTE1LDkgKzUxNSw5
IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAx
KTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSks
IDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTU1MCwx
MyArNTUwLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAgICAgUGxhbiBw
bGFuKCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBB
U1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBsYW4uZ2V0TWVt
b3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNp
emVvZih1aW50MzJfdCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwg
Ym94KGxlbmd0aCkgfSk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9yeSgpKTsKKyAgICAgICAgaW52b2tlPHZv
aWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVp
bnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAwdSk7CiAgICAg
ICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC01NjUsNyArNTY1
LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBsZW5ndGggPSAxMDsK
ICAgICAgICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2
b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQp
LCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3Ro
KSB9KTsKICAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAgICAgICAgIENIRUNL
X0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtv
ZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC02MDIsMTMgKzYwMiwxMyBAQCBzdGF0aWMgdm9pZCBy
dW5XYXNtVGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CiAgICAgICAg
IGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUo
KSk7CisgICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAg
IC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1
OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwotICAgICAgICB1aW50OF90KiBtZW1vcnkg
PSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAgICAg
ICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDhfdCogbWVtb3J5ID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9yeSgpKTsKKyAgICAg
ICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBDSEVDS19F
UShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNl
dCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQpAQCAtNjE2LDcgKzYxNiw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAK
ICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGludm9r
ZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZz
ZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVu
Z3RoKSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKICAg
ICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtNjQzLDEyICs2NDMsMTIgQEAg
c3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0
b3IpOwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VSVChwbGFuLm1l
bW9yeSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnkoKS0+c2l6ZSgp
KTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSks
IDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTY3Myw5
ICs2NzMsOSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4o
cGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
IH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKICAgICB9CiAKICAgICB7
CkBAIC03MDAsMTAgKzcwMCwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAg
ICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikg
fSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goLTEyKSwg
Ym94KHBsYW4ubWVtb3J5KCktPnNpemUoKSAtIHNpemVvZih1aW50NjRfdCkpIH0pLCAtMTIpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDAp
IH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgtMTIpLCBib3gocGxhbi5nZXRNZW1vcnkoKS0+
c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSksIC0xMik7CiAgICAgfQogCiAgICAgewpAQCAt
NzI4LDkgKzcyOCw5IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCks
IGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAg
IHsKQEAgLTc2MywxMyArNzYzLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAg
ICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEp
OwotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJU
KHBsYW4uZ2V0TWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBz
dGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAg
aW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBi
b3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBz
dGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9yeSgpKTsKKyAgICAg
ICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQg
Lz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFd
LCAwdSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBA
IC03NzgsNyArNzc4LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBs
ZW5ndGggPSAxMDsKICAgICAgICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAg
ICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSks
IGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQp
LCBib3gobGVuZ3RoKSB9KTsKICAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAg
ICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7CiAgICAgICAgIENIRUNL
X0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7CkBAIC04MTUsMTMgKzgxNSwxMyBAQCBz
dGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rv
cik7CiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVt
b3J5KCktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkp
OwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgogICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwotICAgICAgICB1aW50
OF90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5
KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDhf
dCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHBsYW4uZ2V0TWVtb3J5KCktPm1lbW9y
eSgpKTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAg
ICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtODI5LDcgKzgyOSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0g
ICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
NSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZz
ZXQpLCBib3gobGVuZ3RoKSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFd
LCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtODU2LDEy
ICs4NTYsMTIgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBs
YW4oKnZtLCB2ZWN0b3IpOwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFT
U0VSVChwbGFuLm1lbW9yeSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1v
cnkoKS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCks
IGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwogICAgIH0KIAogICAg
IHsKQEAgLTg4Niw5ICs4ODYsOSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAg
ICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKICAg
ICB9CiAKICAgICB7CkBAIC05MTMsMTQgKzkxMywxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVz
dHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlz
IGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCksIGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMiksIGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9
KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2
KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAxKTsKICAgICB9
CiAKICAgICB7CkBAIC05NTEsMTQgKzk1MSwxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9
KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKICAgICB9CiAK
IApAQCAtOTc1LDcgKzk3NSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAg
IGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFz
aC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgfSksIDUpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDUpOwogICAgIH0KIAogCkBAIC05
OTMsNyArOTkzLDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQ
bGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyB9KSwgMTEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKICAgICB9CiAKICAgICB7CkBAIC0x
MDEwLDcgKzEwMTAsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVj
a1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IH0pLCAxMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwogICAgIH0KIAogICAgIHsKQEAg
LTEwMjcsNyArMTAyNyw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgfSksIDExKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAgICAgewpA
QCAtMTA0MywxMCArMTA0MywxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAg
ICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9
KSwgMTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KC0xKSwgYm94KDEpfSksIDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptaW4oKSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDEpIH0pLCAxMDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KC0xKSwgYm94KDEpfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkpOwogICAgIH0KIAogICAgIHsKQEAgLTEwNjksOCArMTA2OSw4IEBAIHN0YXRpYyB2b2lkIHJ1
bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBU
ZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
KSB9KSwgMTApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMCkgfSksIDEwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTAyLDEwICsxMTAyLDEwIEBA
IHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsK
IAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpfSksIDMpOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSB9KSwgNTA1MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAzKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApIH0pLCA1MDUwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTQzLDE0ICsx
MTQzLDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihw
bGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDApLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgyKSwgYm94KDEpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOwotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMiksIGJveCgyKSB9KSwgNCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApLCBib3goNikgfSksIDYwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwg
MTAwMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
MSkgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDQpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBi
b3goNikgfSksIDEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDYwMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDEwMCkgfSksIDEwMDAwKTsKICAgICB9CiAK
ICAgICB7CkBAIC0xMTkzLDE0ICsxMTkzLDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygp
CiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSwgYm94KDYpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgyKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0p
LCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcAppbmRleCAyYmRjODAw
Li5iZjhlMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9y
bWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcApA
QCAtMjQsMTAgKzI0LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjb25z
dCBjaGFyKiB0b1N0cmluZyhUeXBlIHR5cGUpCkBAIC00Niw2ICs0OSw4IEBAIGNvbnN0IGNoYXIq
IHRvU3RyaW5nKFR5cGUgdHlwZSkKICAgICB9CiB9CiAKK01vZHVsZUluZm9ybWF0aW9uOjp+TW9k
dWxlSW5mb3JtYXRpb24oKSB7IH0KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAotI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDgyODZhZWYuLjQ5OTY0NGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTIxLDIzICsyMSw2
IEBACiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDE1IGJ5IHRoZSByZXBvc2l0b3J5
IGF1dGhvcnMgb2YKLSAqIFdlYkFzc2VtYmx5L3BvbHlmaWxsLXByb3RvdHlwZS0xLgotICoKLSAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0Ci0gKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
LSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAK
ICNwcmFnbWEgb25jZQpAQCAtOTgsMzcgKzgxLDgzIEBAIGlubGluZSBib29sIGlzVmFsdWVUeXBl
KFR5cGUgdHlwZSkKIH0KIAogY29uc3QgY2hhciogdG9TdHJpbmcoVHlwZSk7CisgICAgCitzdHJ1
Y3QgRXh0ZXJuYWwgeworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBGdW5jdGlv
biA9IDAsCisgICAgICAgIFRhYmxlID0gMSwKKyAgICAgICAgTWVtb3J5ID0gMiwKKyAgICAgICAg
R2xvYmFsID0gMywKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludD4KKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkKEludCB2YWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKHZhbCkgewor
ICAgICAgICBjYXNlIEZ1bmN0aW9uOgorICAgICAgICBjYXNlIFRhYmxlOgorICAgICAgICBjYXNl
IE1lbW9yeToKKyAgICAgICAgY2FzZSBHbG9iYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWNfYXNzZXJ0KEZ1bmN0aW9uID09IDAsICJXYXNtIG5lZWRz
IEZ1bmN0aW9uIHRvIGhhdmUgdGhlIHZhbHVlIDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KFRhYmxl
ICAgID09IDEsICJXYXNtIG5lZWRzIFRhYmxlIHRvIGhhdmUgdGhlIHZhbHVlIDEiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KE1lbW9yeSAgID09IDIsICJXYXNtIG5lZWRzIE1lbW9yeSB0byBoYXZlIHRo
ZSB2YWx1ZSAyIik7CisgICAgc3RhdGljX2Fzc2VydChHbG9iYWwgICA9PSAzLCAiV2FzbSBuZWVk
cyBHbG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOworfTsKIAogc3RydWN0IFNpZ25hdHVyZSB7
CiAgICAgVHlwZSByZXR1cm5UeXBlOwogICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7CiB9Owot
Ci1zdHJ1Y3QgRnVuY3Rpb25JbXBvcnQgewotICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7CisgICAg
CitzdHJ1Y3QgSW1wb3J0IHsKKyAgICBTdHJpbmcgbW9kdWxlOworICAgIFN0cmluZyBmaWVsZDsK
KyAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgU2lnbmF0dXJl
KiBmdW5jdGlvblNpZ25hdHVyZTsKKyAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgLy8g
RklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTM0CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgIH07CiB9OwogCi1zdHJ1
Y3QgRnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgewotICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4
OwotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXg7CitzdHJ1Y3QgRnVuY3Rpb25JbmZv
cm1hdGlvbiB7CisgICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7CisgICAgc2l6ZV90IHN0YXJ0Owor
ICAgIHNpemVfdCBlbmQ7CiB9OwogCi1zdHJ1Y3QgRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAg
dWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CitjbGFzcyBNZW1vcnk7CisKK3N0cnVjdCBFeHBvcnQg
eworICAgIFN0cmluZyBmaWVsZDsKKyAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIHVuaW9u
IHsKKyAgICAgICAgU2lnbmF0dXJlKiBmdW5jdGlvblNpZ25hdHVyZTsKKyAgICAgICAgLy8gRklY
TUUgaW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQxMzUKKyAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAgIC8vIEZJWE1FIGltcGxl
bWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
MworICAgIH07CiB9OwogCi1zdHJ1Y3QgRnVuY3Rpb25Qb2ludGVyVGFibGUgewotICAgIHVpbnQz
Ml90IHNpZ25hdHVyZUluZGV4OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gZnVuY3Rpb25JbmRpY2Vz
OwotICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rpb25zOwotfTsKK3N0cnVjdCBNb2R1bGVJ
bmZvcm1hdGlvbiB7CisgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKKyAgICBWZWN0
b3I8SW1wb3J0PiBpbXBvcnRzOworICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBmdW5j
dGlvbnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIFZlY3RvcjxF
eHBvcnQ+IGV4cG9ydHM7CiAKLXN0cnVjdCBGdW5jdGlvbkluZm9ybWF0aW9uIHsKLSAgICBTaWdu
YXR1cmUqIHNpZ25hdHVyZTsKLSAgICBzaXplX3Qgc3RhcnQ7Ci0gICAgc2l6ZV90IGVuZDsKKyAg
ICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CiAKK3N0cnVjdCBGdW5jdGlvbkNvbXBpbGF0aW9u
OwordHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+PiBD
b21waWxlZEZ1bmN0aW9uczsKKwogc3RydWN0IFVubGlua2VkQ2FsbCB7CiAgICAgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsTG9jYXRpb247CiAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXg7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDU1YzIx
MmUuLmRmMjk4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
CiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNs
dWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKQEAgLTQwLDYgKzQx
LDggQEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiBib29sIE1vZHVsZVBh
cnNlcjo6cGFyc2UoKQogeworICAgIG1fbW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxNb2R1bGVJ
bmZvcm1hdGlvbj4oKTsKKwogICAgIGNvbnN0IHNpemVfdCBtaW5TaXplID0gODsKICAgICBpZiAo
bGVuZ3RoKCkgPCBtaW5TaXplKSB7CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIk1vZHVsZSBp
cyAiICsgU3RyaW5nOjpudW1iZXIobGVuZ3RoKCkpICsgIiBieXRlcywgZXhwZWN0ZWQgYXQgbGVh
c3QgIiArIFN0cmluZzo6bnVtYmVyKG1pblNpemUpICsgIiBieXRlcyI7CkBAIC0xMTEsNTQgKzEx
NCwyMCBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBhdXRvIGVuZCA9IG1f
b2Zmc2V0ICsgc2VjdGlvbkxlbmd0aDsKIAogICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKLQot
ICAgICAgICBjYXNlIFNlY3Rpb25zOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBNZW1vcnkuIik7Ci0gICAgICAg
ICAgICBpZiAoIXBhcnNlTWVtb3J5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXBy
b3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzkxOQotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNl
IG1lbW9yeSI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpG
dW5jdGlvblR5cGVzOiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oIlBhcnNpbmcgdHlwZXMuIik7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRnVu
Y3Rpb25UeXBlcygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBt
ZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAg
ICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB0eXBlcyI7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpTaWduYXR1cmVzOiB7
Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBh
cnNpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5j
dGlvblNpZ25hdHVyZXMoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJy
b3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5
Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgZnVuY3Rp
b24gc2lnbmF0dXJlcyI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rp
b25zOjpEZWZpbml0aW9uczogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zLiIpOwotICAgICAg
ICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAi
Y291bGRuJ3QgcGFyc2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMiOwotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6VW5rbm93bjoKLSAgICAgICAgLy8gRklYTUU6IERl
bGV0ZSB0aGlzIHdoZW4gd2Ugc3VwcG9ydCBhbGwgdGhlIHNlY3Rpb25zLgotICAgICAgICBkZWZh
dWx0OiB7CisgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBpbiBtYWNybyBi
ZWxvdyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisjZGVm
aW5lIFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pIFwKKyAgICAgICAg
Y2FzZSBTZWN0aW9uczo6TkFNRTogeyBcCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgXAorICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyAiIERFU0NSSVBUSU9OKTsgXAorICAgICAg
ICAgICAgaWYgKCFwYXJzZSAjIyBOQU1FKCkpIHsgXAorICAgICAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gIiAjTkFNRSAiOiAiIERFU0NSSVBUSU9O
OyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAgICAgICB9IFwKKyAg
ICAgICAgfSBicmVhazsKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFdBU01fU0VDVElP
Tl9QQVJTRSkKKyN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKKworICAgICAgICBjYXNlIFNlY3Rp
b25zOjpVbmtub3duOiB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oIlVua25vd24gc2VjdGlvbiwgc2tpcHBpbmcuIik7CiAgICAgICAgICAgICAv
LyBJZ25vcmUgc2VjdGlvbidzIG5hbWUgTEVCIGFuZCBieXRlczogdGhleSdyZSBhbHJlYWR5IGlu
Y2x1ZGVkIGluIHNlY3Rpb25MZW5ndGguCkBAIC0xODQsNzkgKzE1Myw1MyBAQCBib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2UoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VNZW1vcnkoKQotewotICAgIHVpbnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZh
clVJbnQxKGZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDMyX3Qgc2l6
ZTsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHNpemUgPiBtYXhQYWdlQ291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OwotICAgIGlmIChmbGFncykgewot
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBh
Z2VDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXBhY2l0
eSAqPSBwYWdlU2l6ZTsKLSAgICBzaXplICo9IHBhZ2VTaXplOwotCi0gICAgVmVjdG9yPHVuc2ln
bmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9OwotICAgIG1fbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1
ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7Ci0gICAgcmV0dXJuIG1fbWVt
b3J5LT5tZW1vcnkoKTsKLX0KLQotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBl
cygpCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkKIHsKICAgICB1aW50MzJfdCBjb3Vu
dDsKICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiY291bnQ6ICIsIGNvdW50
KTsKLQotICAgIG1fc2lnbmF0dXJlcy5yZXNpemUoY291bnQpOwotCisgICAgaWYgKCFtX21vZHVs
ZS0+c2lnbmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgdWludDhfdCB0eXBlOwotICAgICAgICBpZiAoIXBhcnNlVUludDcodHlwZSkpCisg
ICAgICAgIGludDhfdCB0eXBlOworICAgICAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUgIT0gMHg0MCkgLy8gRnVuY3Rp
b24gdHlwZSBjb25zdGFudC4KKyAgICAgICAgaWYgKHR5cGUgIT0gLTB4MjApIC8vIEZ1bmN0aW9u
IHR5cGUgY29uc3RhbnQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgCiAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJHb3QgZnVuY3Rpb24g
dHlwZS4iKTsKLQorICAgICAgICAKICAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsKICAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQorICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nTG4oImFyZ3VtZW50Q291bnQ6ICIsIGFyZ3VtZW50Q291bnQpOwotCisgICAgICAg
IAogICAgICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLSAgICAgICAgYXJndW1lbnRU
eXBlcy5yZXNpemUoYXJndW1lbnRDb3VudCk7CisgICAgICAgIGlmICghYXJndW1lbnRUeXBlcy50
cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUpIHx8ICFpc1ZhbHVlVHlwZShz
dGF0aWNfY2FzdDxUeXBlPih0eXBlKSkpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
IT0gYXJndW1lbnRDb3VudDsgKytpKSB7CisgICAgICAgICAgICB1aW50OF90IGFyZ3VtZW50VHlw
ZTsKKyAgICAgICAgICAgIGlmICghcGFyc2VVSW50Nyhhcmd1bWVudFR5cGUpIHx8ICFpc1ZhbHVl
VHlwZShzdGF0aWNfY2FzdDxUeXBlPihhcmd1bWVudFR5cGUpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhcmd1bWVudFR5cGVzW2ldID0gc3RhdGljX2Nhc3Q8
VHlwZT4odHlwZSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLnVuY2hlY2tlZEFwcGVuZChz
dGF0aWNfY2FzdDxUeXBlPihhcmd1bWVudFR5cGUpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MSh0eXBlKSkKKyAgICAgICAgdWludDhfdCByZXR1cm5Db3VudDsKKyAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHJldHVybkNvdW50KSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgVHlwZSByZXR1cm5UeXBlOwotCisgICAgICAgIAogICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbih0eXBlKTsKLQotICAgICAgICBpZiAo
dHlwZSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKHJldHVybkNvdW50KTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChyZXR1cm5Db3VudCkgewogICAgICAgICAgICAgVHlwZSB2YWx1ZTsKICAgICAg
ICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUodmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI2NCw0OCArMjA3LDE5NSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvblR5cGVzKCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm5UeXBlID0g
VHlwZTo6Vm9pZDsKIAotICAgICAgICBtX3NpZ25hdHVyZXNbaV0gPSB7IHJldHVyblR5cGUsIFdU
Rk1vdmUoYXJndW1lbnRUeXBlcykgfTsKKyAgICAgICAgbV9tb2R1bGUtPnNpZ25hdHVyZXMudW5j
aGVja2VkQXBwZW5kKHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVzKSB9KTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0
aW9uU2lnbmF0dXJlcygpCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogewotICAg
IHVpbnQzMl90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgIHVp
bnQzMl90IGltcG9ydENvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW1wb3J0Q291bnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX21vZHVsZS0+aW1wb3J0cy50cnlS
ZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBtX2Z1bmN0aW9ucy5yZXNpemUoY291bnQpOworICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVt
YmVyID0gMDsgaW1wb3J0TnVtYmVyICE9IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgewor
ICAgICAgICBJbXBvcnQgaTsKKyAgICAgICAgdWludDMyX3QgbW9kdWxlTGVuOworICAgICAgICB1
aW50MzJfdCBmaWVsZExlbjsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihtb2R1bGVMZW4p
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNvbnN1bWVVVEY4U3Ry
aW5nKGkubW9kdWxlLCBtb2R1bGVMZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFjb25zdW1lVVRGOFN0cmluZyhpLmZpZWxkLCBmaWVsZExlbikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtp
bmQoaS5raW5kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChp
LmtpbmQpIHsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAg
IHVpbnQzMl90IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvblNpZ25hdHVyZUluZGV4ID4gbV9tb2R1
bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGkuZnVuY3Rpb25TaWduYXR1cmUgPSAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbZnVu
Y3Rpb25TaWduYXR1cmVJbmRleF07CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRXh0
ZXJuYWw6OlRhYmxlOgorICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRXh0ZXJuYWw6Ok1lbW9yeToKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEV4dGVybmFsOjpHbG9iYWw6CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCisgICAgICAgICAgICAvLyBJ
biB0aGUgTVZQLCBvbmx5IGltbXV0YWJsZSBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSBpbXBvcnRl
ZC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBtX21vZHVsZS0+aW1wb3J0cy51bmNoZWNr
ZWRBcHBlbmQoaSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitib29sIE1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpCit7CisgICAgdWludDMyX3QgY291bnQ7CisgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIW1fbW9kdWxlLT5mdW5jdGlvbnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgIT0gY291
bnQ7ICsraSkgewogICAgICAgICB1aW50MzJfdCB0eXBlTnVtYmVyOwogICAgICAgICBpZiAoIXBh
cnNlVmFyVUludDMyKHR5cGVOdW1iZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGlmICh0eXBlTnVtYmVyID49IG1fc2lnbmF0dXJlcy5zaXplKCkpCisgICAgICAgIAor
ICAgICAgICBpZiAodHlwZU51bWJlciA+PSBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9mdW5jdGlvbnNbaV0uc2lnbmF0
dXJlID0gJm1fc2lnbmF0dXJlc1t0eXBlTnVtYmVyXTsKKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0
aW9ucy51bmNoZWNrZWRBcHBlbmQoeyAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbdHlwZU51bWJlcl0s
IDAsIDAgfSk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlVGFibGUoKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCit7CisgICAgdWludDhf
dCBmbGFnczsKKyAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICB1aW50MzJfdCBzaXplOworICAgIGlmICghcGFyc2VWYXJVSW50MzIoc2l6
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2l6ZSA+IG1heFBhZ2VDb3VudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDMyX3QgY2FwYWNpdHkgPSBtYXhQYWdl
Q291bnQ7CisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoY2Fw
YWNpdHkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc2l6ZSA+IGNh
cGFjaXR5IHx8IGNhcGFjaXR5ID4gbWF4UGFnZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAorICAgIGNhcGFjaXR5ICo9IHBhZ2VTaXplOworICAgIHNpemUgKj0gcGFn
ZVNpemU7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07CisgICAg
bV9tb2R1bGUtPm1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5PihzaXplLCBjYXBhY2l0
eSwgcGlubmVkU2l6ZXMpOworICAgIHJldHVybiBtX21vZHVsZS0+bWVtb3J5LT5tZW1vcnkoKTsK
K30KKyAgICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpCit7CisgICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgIHJl
dHVybiB0cnVlOworfQorICAgIAorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkKK3sK
KyAgICB1aW50MzJfdCBleHBvcnRDb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGV4cG9y
dENvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9tb2R1bGUtPmV4cG9y
dHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4cG9ydENvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGZvciAodWludDMyX3QgZXhwb3J0TnVtYmVyID0gMDsgZXhwb3J0TnVtYmVy
ICE9IGV4cG9ydENvdW50OyArK2V4cG9ydE51bWJlcikgeworICAgICAgICBFeHBvcnQgZTsKKyAg
ICAgICAgdWludDMyX3QgZmllbGRMZW47CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZmll
bGRMZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNvbnN1bWVV
VEY4U3RyaW5nKGUuZmllbGQsIGZpZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFwYXJzZUV4dGVybmFsS2luZChlLmtpbmQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKGUua2luZCkgeworICAgICAgICBjYXNlIEV4dGVy
bmFsOjpGdW5jdGlvbjogeworICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJ
bmRleDsKKyAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25TaWduYXR1cmVJ
bmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uU2lnbmF0dXJlSW5kZXggPiBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXplKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZS5mdW5jdGlvblNpZ25hdHVy
ZSA9ICZtX21vZHVsZS0+c2lnbmF0dXJlc1tmdW5jdGlvblNpZ25hdHVyZUluZGV4XTsKKyAgICAg
ICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6VGFibGU6CisgICAgICAgICAgICAv
LyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OgorICAgICAg
ICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDEzNAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6Okdsb2JhbDoK
KyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQxMzMKKyAgICAgICAgICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxlIGds
b2JhbCB2YXJpYWJsZXMgY2FuIGJlIGV4cG9ydGVkLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fbW9kdWxlLT5leHBvcnRzLnVuY2hlY2tlZEFwcGVu
ZChlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitib29sIE1vZHVs
ZVBhcnNlcjo6cGFyc2VTdGFydCgpCit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKyAgICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUVsZW1lbnQoKQoreworICAgIC8vIEZJ
WE1FCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0
aW9uRGVmaW5pdGlvbnMoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlQ29kZSgpCiB7CiAgICAg
dWludDMyX3QgY291bnQ7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChjb3VudCAhPSBtX2Z1bmN0aW9ucy5zaXplKCkpCisg
ICAgaWYgKGNvdW50ICE9IG1fbW9kdWxlLT5mdW5jdGlvbnMuc2l6ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgewogICAgICAgICB1aW50
MzJfdCBmdW5jdGlvblNpemU7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25T
aXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uU2l6
ZSA+IGxlbmd0aCgpIHx8IGZ1bmN0aW9uU2l6ZSA+IGxlbmd0aCgpIC0gbV9vZmZzZXQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5m
byA9IG1fZnVuY3Rpb25zW2ldOworICAgICAgICBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0g
bV9tb2R1bGUtPmZ1bmN0aW9uc1tpXTsKICAgICAgICAgaW5mby5zdGFydCA9IG1fb2Zmc2V0Owog
ICAgICAgICBpbmZvLmVuZCA9IG1fb2Zmc2V0ICsgZnVuY3Rpb25TaXplOwogICAgICAgICBtX29m
ZnNldCA9IGluZm8uZW5kOwpAQCAtMzEzLDYgKzQwMywxMiBAQCBib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkKIAogICAgIHJldHVybiB0cnVlOwogfQorICAgIAor
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpCit7CisgICAgLy8gRklYTUUKKyAgICByZXR1
cm4gdHJ1ZTsKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCmluZGV4IDM4MjkzYWMuLjg5OWJm
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
QEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU9w
cy5oIgogI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC01NiwyNyArNTYsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7
CiAgICAgfQogCi0gICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlv
bkluZm9ybWF0aW9uKCkgY29uc3QKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRp
b24+JiBtb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9mdW5jdGlvbnM7Ci0gICAgfQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxNZW1vcnk+JiBtZW1vcnkoKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fbWVtb3J5OworICAgICAgICByZXR1cm4g
bV9tb2R1bGU7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlTWVtb3J5KCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlv
blR5cGVzKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvblNpZ25h
dHVyZXMoKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5p
dGlvbnMoKTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uRGVmaW5p
dGlvbih1aW50MzJfdCBudW1iZXIpOworI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJT
RVIoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAj
IyBOQU1FKCk7CisgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJF
X1BBUlNFUikKKyN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAotICAgIFZlY3Rv
cjxGdW5jdGlvbkluZm9ybWF0aW9uPiBtX2Z1bmN0aW9uczsKLSAgICBWZWN0b3I8U2lnbmF0dXJl
PiBtX3NpZ25hdHVyZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbV9tZW1vcnk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZTsKICAgICBib29s
IG1fZmFpbGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggNDZhN2IzOS4uNGNmNjNlZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtMzMsNiArMzMsOCBA
QAogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKICNpbmNs
dWRlIDx3dGYvTEVCRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKIApAQCAtNDIsMTQgKzQ0LDE3IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGNvbnN1bWVDaGFyYWN0ZXIoY2hhcik7CiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gY29uc3VtZVN0cmluZyhjb25zdCBjaGFyKik7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gY29uc3VtZVVURjhTdHJpbmcoU3RyaW5nICYsIHNpemVfdCk7CiAKICAgICBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCk7Cisg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbnQ3KGludDhfdCYgcmVzdWx0KTsKICAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJlc3VsdCk7CiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCk7
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MzIodWludDMyX3QmIHJl
c3VsdCkgeyByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9zb3VyY2UsIG1f
c291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlVmFyVUludDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVC
RGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQs
IHJlc3VsdCk7IH0KIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBl
KFR5cGUmIHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHRlcm5h
bEtpbmQoRXh0ZXJuYWw6OktpbmQmIHJlc3VsdCk7CiAKICAgICBjb25zdCB1aW50OF90KiBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZUxlbmd0aDsgfQpAQCAtOTIsNiArOTcsMjEgQEAgQUxXQVlTX0lO
TElORSBib29sIFBhcnNlcjo6Y29uc3VtZVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVVVEY4U3Ry
aW5nKFN0cmluZyAmcmVzdWx0LCBzaXplX3Qgc3RyaW5nTGVuZ3RoKQoreworICAgIGlmIChzdHJp
bmdMZW5ndGggPT0gMCkgeworICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGlmIChsZW5ndGgoKSA8IHN0cmluZ0xlbmd0aCB8fCBtX29m
ZnNldCA+IGxlbmd0aCgpIC0gc3RyaW5nTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmVzdWx0ID0gU3RyaW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KCZz
b3VyY2UoKVttX29mZnNldF0pLCBzdHJpbmdMZW5ndGgpOworICAgIG1fb2Zmc2V0ICs9IHN0cmlu
Z0xlbmd0aDsKKyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJz
ZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogewogICAgIGlmIChsZW5ndGgoKSA8IDQgfHwgbV9v
ZmZzZXQgPiBsZW5ndGgoKSAtIDQpCkBAIC0xMDEsNiArMTIxLDE1IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI6OnBhcnNlVUludDMyKHVpbnQzMl90JiByZXN1bHQpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlSW50NyhpbnQ4X3QmIHJl
c3VsdCkKK3sKKyAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB1aW50OF90IHYgPSBzb3VyY2UoKVttX29mZnNldCsrXTsKKyAgICByZXN1bHQg
PSAodiAmIDB4NDApID8gV1RGOjpiaXR3aXNlX2Nhc3Q8aW50OF90Pih1aW50OF90KHYgfCAweDgw
KSkgOiB2OworICAgIHJldHVybiAodiAmIDB4ODApID09IDA7Cit9CisKIEFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI6OnBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KQogewogICAgIGlmIChtX29m
ZnNldCA+PSBsZW5ndGgoKSkKQEAgLTEyOCw2ICsxNTcsMTcgQEAgQUxXQVlTX0lOTElORSBib29s
IFBhcnNlcjo6cGFyc2VWYWx1ZVR5cGUoVHlwZSYgcmVzdWx0KQogICAgIHJlc3VsdCA9IHN0YXRp
Y19jYXN0PFR5cGU+KHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyAgICAKK0FMV0FZU19J
TkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVybmFsOjpLaW5kJiByZXN1
bHQpCit7CisgICAgdWludDhfdCB2YWx1ZTsKKyAgICBpZiAoIXBhcnNlVUludDcodmFsdWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFFeHRlcm5hbDo6aXNWYWxpZCh2YWx1ZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFeHRlcm5h
bDo6S2luZD4odmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXgg
NzM5YmU0Mi4uMmUwMjhkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cApAQCAtMzEsOSArMzEsMTEgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVk
ZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNlci5o
IgogI2luY2x1ZGUgIldhc21WYWxpZGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCkBAIC00OCw0MCArNTAsNTAgQEAgUGxhbjo6UGxhbihWTSYgdm0sIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKIHsKICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgZGF0YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOwotICAgIE1vZHVsZVBh
cnNlciBtb2R1bGVQYXJzZXIoc291cmNlLCBzb3VyY2VMZW5ndGgpOwotICAgIGlmICghbW9kdWxl
UGFyc2VyLnBhcnNlKCkpIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIG1vZHVsZSBmYWls
ZWQ6ICIsIG1vZHVsZVBhcnNlci5lcnJvck1lc3NhZ2UoKSk7Ci0gICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gbW9kdWxlUGFyc2VyLmVycm9yTWVzc2FnZSgpOwotICAgICAgICByZXR1cm47CisgICAg
eworICAgICAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSwgc291cmNlTGVuZ3Ro
KTsKKyAgICAgICAgaWYgKCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgeworICAgICAgICAgICAgZGF0
YUxvZ0xuKCJQYXJzaW5nIG1vZHVsZSBmYWlsZWQ6ICIsIG1vZHVsZVBhcnNlci5lcnJvck1lc3Nh
Z2UoKSk7CisgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1vZHVsZVBhcnNlci5lcnJvck1l
c3NhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX21vZHVs
ZUluZm9ybWF0aW9uID0gV1RGTW92ZShtb2R1bGVQYXJzZXIubW9kdWxlSW5mb3JtYXRpb24oKSk7
CiAgICAgfQotCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiUGFyc2VkIG1v
ZHVsZS4iKTsKIAotICAgIGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6IG1v
ZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpIHsKKyAgICBpZiAoIW1fY29tcGlsZWRG
dW5jdGlvbnMudHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9u
cy5zaXplKCkpKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UgZm9yICIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5j
dGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgY29tcGlsZWQg
ZnVuY3Rpb25zIik7CisgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChjb25zdCBGdW5jdGlvbkluZm9y
bWF0aW9uJiBpbmZvIDogbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zKSB7CiAgICAgICAg
IGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmNpb24g
c3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgaW5mby5lbmQp
OworICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0
OiAiLCBpbmZvLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8uZW5kKTsKICAgICAgICAg
Y29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCA9IHNvdXJjZSArIGluZm8uc3RhcnQ7CiAgICAg
ICAgIHNpemVfdCBmdW5jdGlvbkxlbmd0aCA9IGluZm8uZW5kIC0gaW5mby5zdGFydDsKICAgICAg
ICAgQVNTRVJUKGZ1bmN0aW9uTGVuZ3RoIDw9IHNvdXJjZUxlbmd0aCk7CiAKLSAgICAgICAgU3Ry
aW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgaW5mby5zaWduYXR1cmUsIG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpOwor
ICAgICAgICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBpbmZvLnNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rp
b25zKTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICAgICAgbV9lcnJv
ck1lc3NhZ2UgPSBlcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIG1fcmVzdWx0LmFwcGVuZChwYXJzZUFuZENvbXBpbGUodm0sIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBtb2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCksIGluZm8uc2lnbmF0dXJl
LCBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1hdGlvbigpKSk7CisgICAgICAgIG1fY29tcGls
ZWRGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSh2bSwgZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQoKSwg
aW5mby5zaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucykpOwogICAgIH0K
IAogICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgotICAgIGZv
ciAoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlvblB0ciA6IG1f
cmVzdWx0KSB7CisgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4m
IGZ1bmN0aW9uUHRyIDogbV9jb21waWxlZEZ1bmN0aW9ucykgewogICAgICAgICBGdW5jdGlvbkNv
bXBpbGF0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUHRyLmdldCgpOwogICAgICAgICBmb3IgKGF1
dG8mIGNhbGwgOiBmdW5jdGlvbi0+dW5saW5rZWRDYWxscykKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
bV9yZXN1bHRbY2FsbC5mdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgpKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKG1fY29tcGlsZWRGdW5jdGlvbnNbY2FsbC5mdW5jdGlvbkluZGV4XS0+Y29kZS0+
Y29kZSgpKSk7CiAgICAgfQogCi0gICAgbV9tZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5t
ZW1vcnkoKSk7CiAgICAgbV9mYWlsZWQgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgKaW5kZXggYjg0ZjlkNy4uYTdjODA0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5oCkBAIC0zOCw4ICszOCw2IEBAIGNsYXNzIE1lbW9yeTsKIAogY2xh
c3MgUGxhbiB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29tcGlsYXRpb24+PiBDb21waWxlZEZ1bmN0aW9uczsKLQogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFBsYW4oVk0mLCBWZWN0b3I8dWludDhfdD4pOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IFBsYW4oVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB+UGxhbigpOwpAQCAtNTAsMzYgKzQ4LDM3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZmFpbGVkKCkpOwogICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7CiAgICAgfQot
ICAgIHNpemVfdCByZXN1bHRTaXplKCkgY29uc3QKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TW9kdWxlSW5mb3JtYXRpb24+JiBnZXRNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9yZXN1bHQuc2l6
ZSgpOworICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICB9Ci0gICAgY29u
c3QgRnVuY3Rpb25Db21waWxhdGlvbiogcmVzdWx0KHNpemVfdCBuKSBjb25zdAorICAgIGNvbnN0
IE1lbW9yeSogZ2V0TWVtb3J5KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdC5hdChuKS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQoKTsKICAgICB9Ci0gICAg
Y29uc3QgTWVtb3J5KiBtZW1vcnkoKSBjb25zdAorICAgIHNpemVfdCBjb21waWxlZEZ1bmN0aW9u
Q291bnQoKSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsK
LSAgICAgICAgcmV0dXJuIG1fbWVtb3J5LmdldCgpOworICAgICAgICByZXR1cm4gbV9jb21waWxl
ZEZ1bmN0aW9ucy5zaXplKCk7CiAgICAgfQotICAgIAotICAgIENvbXBpbGVkRnVuY3Rpb25zKiBn
ZXRGdW5jdGlvbnMoKQorICAgIGNvbnN0IEZ1bmN0aW9uQ29tcGlsYXRpb24qIGNvbXBpbGVkRnVu
Y3Rpb24oc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFp
bGVkKCkpOwotICAgICAgICByZXR1cm4gJm1fcmVzdWx0OworICAgICAgICByZXR1cm4gbV9jb21w
aWxlZEZ1bmN0aW9ucy5hdChpKS5nZXQoKTsKICAgICB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1l
bW9yeT4qIGdldE1lbW9yeSgpCisgICAgQ29tcGlsZWRGdW5jdGlvbnMmIGdldENvbXBpbGVkRnVu
Y3Rpb25zKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAg
ICAgIHJldHVybiAmbV9tZW1vcnk7CisgICAgICAgIHJldHVybiBtX2NvbXBpbGVkRnVuY3Rpb25z
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb21waWxlZEZ1bmN0aW9ucyBtX3Jlc3VsdDsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX21lbW9yeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CisgICAgQ29tcGlsZWRGdW5j
dGlvbnMgbV9jb21waWxlZEZ1bmN0aW9uczsKKwogICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07
CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNlY3Rpb25zLmgKaW5kZXggNzI1Nzg2Ny4uOTk2MDUyNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgKQEAgLTI5LDEyICsyOSwyNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fU0VD
VElPTihtYWNybykgXAorICAgIG1hY3JvKFR5cGUsICAgICAxLCAiRnVuY3Rpb24gc2lnbmF0dXJl
IGRlY2xhcmF0aW9ucyIpIFwKKyAgICBtYWNybyhJbXBvcnQsICAgMiwgIkltcG9ydCBkZWNsYXJh
dGlvbnMiKSBcCisgICAgbWFjcm8oRnVuY3Rpb24sIDMsICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMi
KSBcCisgICAgbWFjcm8oVGFibGUsICAgIDQsICJJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQg
b3RoZXIgdGFibGVzIikgXAorICAgIG1hY3JvKE1lbW9yeSwgICA1LCAiTWVtb3J5IGF0dHJpYnV0
ZXMiKSBcCisgICAgbWFjcm8oR2xvYmFsLCAgIDYsICJHbG9iYWwgZGVjbGFyYXRpb25zIikgXAor
ICAgIG1hY3JvKEV4cG9ydCwgICA3LCAiRXhwb3J0cyIpIFwKKyAgICBtYWNybyhTdGFydCwgICAg
OCwgIlN0YXJ0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIikgXAorICAgIG1hY3JvKEVsZW1lbnQsICA5
LCAiRWxlbWVudHMgc2VjdGlvbiIpIFwKKyAgICBtYWNybyhDb2RlLCAgICAxMCwgIkZ1bmN0aW9u
IGJvZGllcyAoY29kZSkiKSBcCisgICAgbWFjcm8oRGF0YSwgICAgMTEsICJEYXRhIHNlZ21lbnRz
IikKKwogc3RydWN0IFNlY3Rpb25zIHsKICAgICBlbnVtIFNlY3Rpb24gOiB1aW50OF90IHsKLSAg
ICAgICAgRnVuY3Rpb25UeXBlcyA9IDEsCi0gICAgICAgIFNpZ25hdHVyZXMgPSAzLAotICAgICAg
ICBNZW1vcnkgPSA1LAotICAgICAgICBEZWZpbml0aW9ucyA9IDEwLAorI2RlZmluZSBERUZJTkVf
V0FTTV9TRUNUSU9OX0VOVU0oTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBOQU1FID0gSUQsCisgICAg
ICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0pCisjdW5k
ZWYgREVGSU5FX1dBU01fU0VDVElPTl9FTlVNCiAgICAgICAgIFVua25vd24KICAgICB9OwogICAg
IHN0YXRpYyBib29sIHZhbGlkYXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcAppbmRleCA2NWNjYTk1Li5kNmJhMzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtMzUsOSAr
MzUsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+KiBjb21waWxlZEZ1
bmN0aW9ucywgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qIG1lbW9yeSkKK0pTV2ViQXNz
ZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiBt
b2R1bGVJbmZvcm1hdGlvbiwgV2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rp
b25zKQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0
cnVjdHVyZSwgY29tcGlsZWRGdW5jdGlvbnMsIG1lbW9yeSk7CisgICAgYXV0byogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFw
KSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbiwg
Y29tcGlsZWRGdW5jdGlvbnMpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDcsMTAgKzQ3LDEwIEBAIFN0cnVjdHVyZSogSlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rp
b25Db21waWxhdGlvbj4+KiBjb21waWxlZEZ1bmN0aW9ucywgc3RkOjp1bmlxdWVfcHRyPFdhc206
Ok1lbW9yeT4qIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1
bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIFdhc206OkNvbXBpbGVkRnVuY3Rp
b25zJiBjb21waWxlZEZ1bmN0aW9ucykKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAs
IG1fY29tcGlsZWRGdW5jdGlvbnMoV1RGTW92ZSgqY29tcGlsZWRGdW5jdGlvbnMpKQotICAgICwg
bV9tZW1vcnkoV1RGTW92ZSgqbWVtb3J5KSkKKyAgICAsIG1fbW9kdWxlSW5mb3JtYXRpb24oV1RG
TW92ZShtb2R1bGVJbmZvcm1hdGlvbikpCisgICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1v
dmUoY29tcGlsZWRGdW5jdGlvbnMpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggYTQzOGE2MS4uOWRhMjEy
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1vZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuaApAQCAtMjksMzIgKzI5LDMyIEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJs
ZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdhc20gewotc3RydWN0IEZ1bmN0aW9u
Q29tcGlsYXRpb247Ci1jbGFzcyBNZW1vcnk7Ci19Ci0KIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1
bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYg
SlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9k
dWxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206
OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+Kik7
CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSos
IHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBXYXNtOjpDb21waWxl
ZEZ1bmN0aW9ucyYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKKyAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiogbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7CisgICAgfQor
CiBwcm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+Kiwgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwg
U3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIFdh
c206OkNvbXBpbGVkRnVuY3Rpb25zJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCiBwcml2YXRlOgotICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+IG1fY29tcGlsZWRGdW5j
dGlvbnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0
aW9uOworICAgIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zIG1fY29tcGlsZWRGdW5jdGlvbnM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmlu
ZGV4IGE5ZmYxMWQuLmM4YWVhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApA
QCAtNjQsOCArNjQsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdAogICAgIGlmICghaW1wb3J0
QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVy
cm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5J
bnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFw
cGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKIAotICAgIC8v
IEZJWE1FIHVzZSB0aGUgaW1wb3J0T2JqZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MDM5CiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMg
aXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBl
RXJyb3IgaXMgdGhyb3duLgorICAgIGlmIChtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCktPmlt
cG9ydHMuc2l6ZSgpICYmICFpbXBvcnRPYmplY3QpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUs
IEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11
c3QgYmUgT2JqZWN0IGJlY2F1c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBoYXMgaW1wb3J0cyIp
LCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1l
bnQpKSkpOwogCiAgICAgLy8gRklYTUUgU3RyaW5nIHRoaW5ncyBmcm9tIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMjMKICAgICAvLyBMZXQgZXhwb3J0cyBiZSBh
IGxpc3Qgb2YgKHN0cmluZywgSlMgdmFsdWUpIHBhaXJzIHRoYXQgaXMgbWFwcGVkIGZyb20gZWFj
aCBleHRlcm5hbCB2YWx1ZSBlIGluIGluc3RhbmNlLmV4cG9ydHMgYXMgZm9sbG93czoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
ZW1vcnlDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMWM1ODJiNC4uY2ZjYWM2MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlDb25zdHJ1Y3Rvci5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIHN0
YXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJX
ZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIE1lbW9yeSBjb25zdHJ1Y3RvciBw
cm9wZXJ0eSIpKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDBiMDU1
YTAuLmJiNjg0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC03MywxMyArNzMs
MTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJB
c3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXQKICAgICBpZiAocGxhbi5mYWlsZWQoKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUs
IGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yKHN0YXRlLCBwbGFuLmVycm9yTWVzc2FnZSgp
KSkpOwogCi0gICAgLy8gVGhlIHNwZWMgc3RyaW5nIHZhbHVlcyBpbnNpZGUgQXN0Lm1vZHVsZSBh
cmUgZGVjb2RlZCBhcyBVVEY4IGFzIGRlc2NyaWJlZCBpbiBXZWIubWQuIEZJWE1FIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMjMKLQogICAgIC8vIE9uIHN1Y2Nl
c3MsIGEgbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01v
ZHVsZV1dIHNldCB0byB0aGUgdmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAgICAgYXV0byogc3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0
YXRlLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKHN0YXRlLT5jYWxsZWUoKSktPmds
b2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHBs
YW4uZ2V0RnVuY3Rpb25zKCksIHBsYW4uZ2V0TWVtb3J5KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBwbGFu
LmdldE1vZHVsZUluZm9ybWF0aW9uKCksIHBsYW4uZ2V0Q29tcGlsZWRGdW5jdGlvbnMoKSkpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJs
eU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
Y2FhN2U5ZS4uYzk1ODBiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCkBAIC00Nyw2ICs0
Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlUYWJsZShFeGVjU3RhdGUqIHN0YXRlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIEZJ
WE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRl
RXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVt
ZW50IHRoZSBUYWJsZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOwogfQogCi0tIAoyLjEwLjEK
Cg==
</data>
<flag name="review"
          id="316572"
          type_id="1"
          status="-"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="316573"
          type_id="3"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293835</attachid>
            <date>2016-11-03 17:29:15 -0700</date>
            <delta_ts>2016-11-04 12:06:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-more-sections.patch</filename>
            <type>text/plain</type>
            <size>151316</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA3YzM3ZDVhYWQ5ZGM4MjgxMzc5MzU1ZWQxNWRkZWIwMGQ3OTk1NWU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDI3IE9jdCAyMDE2IDE0OjM0OjA0IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0aW9ucwoKT24gdGhlIEpTQyBzaWRlOgoK
IC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgogLSBQ
YXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0aW9ucy4KIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBp
bnN0ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxz
LiBUaGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24g
d2hlbiBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgogLSBFbmNhcHN1bGF0ZSBhbGwgcGFy
c2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQg
ZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJ
bnN0YW5jZSkuCiAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1bGUg
aW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVlZGxl
c3NseS4KIC0gUmVtb3ZlIGFsbCByZW1haW5kZXJzIG9mIHBvbHlmaWxsLXByb3RvdHlwZS0xLCBh
bmQgdXBkYXRlIGxpY2Vuc2UuCiAtIEFkZCBtaXNzaW5nIFdhc21PcHMuaCBhbmQgV2FzbVZhbGlk
YXRlSW5saW5lcy5oIGF1dG8tZ2VuZXJhdGlvbiBmb3IgY21ha2UgYnVpbGQuCgpPbiB0aGUgQnVp
bGRlci5qcyB0ZXN0aW5nIHNpZGU6CgogLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KIC0gQ2hlY2sgc2VjdGlv
biBvcmRlciBhbmQgdW5pcXVlbmVzcy4KIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRoZSBU
eXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50cmll
cy4KIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NyArKysKIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzAzICsrKysrKysrKyst
LS0KIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzICAgICAgICAgIHwg
MTA3ICsrKysrCiBKU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMgICAgICAgICAgICAgICAg
ICAgICB8ICAxMiArCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgOSArCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICA4NyArKystCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpz
ICAgICAgICAgICAgICAgICB8ICAxMCArCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNf
YXBpLmpzICAgICAgICAgICAgICB8ICAgOCArLQogSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0
X0J1aWxkZXJKU09OLmpzICAgICAgICAgfCA0OTAgKysrKysrKysrKysrKysrLS0tLS0tCiBKU1Rl
c3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzICB8ICAxMyAtCiBK
U1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfV0FTTS5qcyAgICAgICAgICAgICAgICB8ICAxMiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgfCAg
MTcgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
fCAgNzQgKysrKwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
ICAgICAgfCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgICAgICAg
ICAgICAgICAgIHwgMjQyICsrKysrLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuY3BwICAgICAgICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmggICAgICAgICAgICB8ICA5NyArKy0tCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCAgICB8IDMxNiArKysrKysrKy0tLS0tCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggICAgICB8ICAyMyArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oICAgICAgICAgICAgfCAgNDAg
KysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCAgICAgICAgICAgIHwg
IDM4ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oICAgICAgICAgICAg
ICB8ICAyOSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmggICAg
ICAgICAgfCAgMjAgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuY3BwIHwgIDEwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmggICB8ICAyMCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcCAgICAgfCAgIDMgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3IuY3BwICAgICAgIHwgICAxICsKIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IuY3BwICAgICAgIHwgICA0ICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlQ29uc3RydWN0b3IuY3BwICAgICAgICB8ICAgMSArCiAyOSBmaWxlcyBjaGFuZ2VkLCAx
NDg0IGluc2VydGlvbnMoKyksIDU3MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBK
U1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwoKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmY2M2IzOC4uNjZkOGVk
MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw2MCBAQAorMjAxNi0xMS0wMiAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
MDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisgICAgICAgIE9uIHRo
ZSBKU0Mgc2lkZToKKworICAgICAgICAgLSBQdXQgaW4gcGFyc2VyIHN0dWJzIGZvciBhbGwgV2Vi
QXNzZW1ibHkgc2VjdGlvbnMuCisgICAgICAgICAtIFBhcnNlIEltcG9ydCwgRXhwb3J0IHNlY3Rp
b25zLgorICAgICAgICAgLSBVc2UgdHJ5UmVzZXJ2ZUNhcGFjaXR5IGluc3RlYWQgb2YgcmVzZXJ2
ZSwgYW5kIGJhaWwgb3V0IG9mIHRoZSBwYXJzZXIgaWYgaXQgZmFpbHMuIFRoaXMgcHJldmVudHMg
dGhlIHBhcnNlciBmcm9tIGJyaW5naW5nIGV2ZXJ5dGhpbmcgZG93biB3aGVuIGZhY2VkIHdpdGgg
YSBtYWxpY2lvdXMgaW5wdXQuCisgICAgICAgICAtIEVuY2Fwc3VsYXRlIGFsbCBwYXJzZWQgbW9k
dWxlIGluZm9ybWF0aW9uIGludG8gaXRzIG93biBzdHJ1Y3R1cmUsIG1ha2luZyBpdCBlYXNpZXIg
dG8gcGFzcyBhcm91bmQgKGZyb20gcGFyc2VyIHRvIFBsYW4gdG8gTW9kdWxlIHRvIEluc3RhbmNl
KS4KKyAgICAgICAgIC0gQ3JlYXRlIFdhc21Gb3JtYXQuY3BwIHRvIGhvbGQgcGFyc2VkIG1vZHVs
ZSBpbmZvcm1hdGlvbidzIGR0b3IgdG8gYXZvaWQgaW5jbHVkaW5nIFdhc21NZW1vcnkuaCBuZWVk
bGVzc2x5LgorICAgICAgICAgLSBwYXJzZUNvZGU6IGF2b2lkIG92ZXJmbG93IHRocm91Z2ggZnVu
Y3Rpb24gc2l6ZS4KKyAgICAgICAgIC0gUmVtb3ZlIGFsbCByZW1haW5kZXJzIG9mIHBvbHlmaWxs
LXByb3RvdHlwZS0xLCBhbmQgdXBkYXRlIGxpY2Vuc2UuCisgICAgICAgICAtIEFkZCBtaXNzaW5n
IFdhc21PcHMuaCBhbmQgV2FzbVZhbGlkYXRlSW5saW5lcy5oIGF1dG8tZ2VuZXJhdGlvbiBmb3Ig
Y21ha2UgYnVpbGQuCisKKyAgICAgICAgT24gdGhlIEJ1aWxkZXIuanMgdGVzdGluZyBzaWRlOgor
CisgICAgICAgICAtIEltcGxlbWVudCBUeXBlLCBJbXBvcnQgKGZ1bmN0aW9uIG9ubHkpLCBFeHBv
cnQgKGZ1bmN0aW9uIG9ubHkpIHNlY3Rpb25zLgorICAgICAgICAgLSBDaGVjayBzZWN0aW9uIG9y
ZGVyIGFuZCB1bmlxdWVuZXNzLgorICAgICAgICAgLSBPcHRpb25hbGx5IGF1dG8tZ2VuZXJhdGUg
dGhlIFR5cGUgc2VjdGlvbiBmcm9tIHN1YnNlcXVlbnQgRXhwb3J0IC8gSW1wb3J0IC8gQ29kZSBl
bnRyaWVzLgorICAgICAgICAgLSBBbGxvdyByZS1leHBvcnRpbmcgYW4gaW1wb3J0LgorCisgICAg
ICAgICogd2FzbS9CdWlsZGVyLmpzOiBidWlsZCB0eXBlLCBpbXBvcnQsIGFuZCBleHBvcnQgc2Vj
dGlvbnMKKyAgICAgICAgKGNvbnN0Ll9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZSk6CisgICAg
ICAgICogd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzOiBBZGRlZC4gRm9ya2VkIGZy
b20gQnVpbGRlci5qcworICAgICAgICAoY29uc3QuZW1pdHRlcnMuVHlwZSk6CisgICAgICAgIChj
b25zdC5lbWl0dGVycy5JbXBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRnVuY3Rpb24p
OgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuVGFibGUpOgorICAgICAgICAoY29uc3QuZW1pdHRl
cnMuTWVtb3J5KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkdsb2JhbCk6CisgICAgICAgIChj
b25zdC5lbWl0dGVycy5FeHBvcnQpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuU3RhcnQpOgor
ICAgICAgICAoY29uc3QuZW1pdHRlcnMuRWxlbWVudCk6CisgICAgICAgIChjb25zdC5lbWl0dGVy
cy5Db2RlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkRhdGEpOgorICAgICAgICAoZXhwb3J0
LmNvbnN0LkJpbmFyeSk6CisgICAgICAgICogd2FzbS9Mb3dMZXZlbEJpbmFyeS5qczogQWRkIGEg
ZmV3IHVzZWZ1bCBvdXRwdXRzCisgICAgICAgIChleHBvcnQuZGVmYXVsdC5Mb3dMZXZlbEJpbmFy
eS5wcm90b3R5cGUudmFydWludDEpOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTG93TGV2ZWxC
aW5hcnkucHJvdG90eXBlLnZhcmludDcpOgorICAgICAgICAqIHdhc20vV0FTTS5qczogdmFsdWUg
dHlwZSBhbmQgZXh0ZXJuYWwga2luZCBoZWxwZXJzCisgICAgICAgICogd2FzbS9hc3NlcnQuanM6
IGFycmF5IGVsZW1lbnQtd2lzZSBlcXVhbGl0eSBjb21wYXJpc29uCisgICAgICAgIChjb25zdC5f
ZXEpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzOgorICAgICAgICAoTW9k
dWxlV2l0aEltcG9ydHMpOgorICAgICAgICAqIHdhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpT
T04uanM6IG1hbnkgbW9yZSB0ZXN0cyBmb3IgYWxsIHRoZSBuZXcgQnVpbGRlciBBUElzLCBhbmQg
dXBkYXRlIHRvIHNvbWUgb2xkZXIgdGVzdHMgd2hpY2ggbm93IHJlcXVpcmUgYSBUeXBlIHNlY3Rp
b24gb3IgcmVqaWdnZXJlZCBGdW5jdGlvbiBzaWduYXR1cmUKKyAgICAgICAgKGNvbnN0LmFzc2Vy
dE9wVGhyb3dzKToKKyAgICAgICAgKFNlY3Rpb25zV2l0aFNhbWVDdXN0b21OYW1lKToKKyAgICAg
ICAgKFR3b1R5cGVTZWN0aW9ucyk6CisgICAgICAgIChFbXB0eUltcG9ydFNlY3Rpb24pOgorICAg
ICAgICAoSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qczogcmVtb3ZlIGEgdGVzdCB3aGljaCB3YXNuJ3Qg
aGVscGZ1bCBhbmQgaXMgbm93IG9ic29sZXRlCisgICAgICAgIChDdXN0b21TZWN0aW9uKToKKwog
MjAxNi0xMS0wMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBB
c2tpbmcgZm9yIGEgdmFsdWUgcHJvZmlsZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUg
YWdhaW5zdCBub3QgZmluZGluZyBhIHZhbHVlIHByb2ZpbGUKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKaW5kZXggMDU2ZDcyZC4u
ZDFlNDc2OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKKysrIGIvSlNUZXN0
cy93YXNtL0J1aWxkZXIuanMKQEAgLTIzLDcgKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotaW1wb3J0IExvd0xldmVsQmluYXJ5IGZyb20gJ0xvd0xldmVsQmluYXJ5LmpzJzsKK2ltcG9y
dCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQuanMnOworaW1wb3J0ICogYXMgQnVpbGRXZWJBc3Nl
bWJseSBmcm9tICdCdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzJzsKIGltcG9ydCAqIGFzIFdB
U00gZnJvbSAnV0FTTS5qcyc7CiAKIGNvbnN0IF90b0phdmFTY3JpcHROYW1lID0gbmFtZSA9PiB7
CkBAIC00Myw1MSArNDQsMTE0IEBAIGNvbnN0IF9pc1ZhbGlkVmFsdWUgPSAodmFsdWUsIHR5cGUp
ID0+IHsKIH07CiBjb25zdCBfdW5rbm93blNlY3Rpb25JZCA9IDA7CiAKLWNvbnN0IF9CdWlsZFdl
YkFzc2VtYmx5QmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9ucykgPT4gewotICAgIGxldCB3YXNt
QmluID0gbmV3IExvd0xldmVsQmluYXJ5KCk7Ci0gICAgY29uc3QgcHV0ID0gKGJpbiwgdHlwZSwg
dmFsdWUpID0+IGJpblt0eXBlXSh2YWx1ZSk7Ci0gICAgZm9yIChjb25zdCBwIG9mIFdBU00uZGVz
Y3JpcHRpb24ucHJlYW1ibGUpCi0gICAgICAgIHB1dCh3YXNtQmluLCBwLnR5cGUsIHByZWFtYmxl
W3AubmFtZV0pOwotICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykgewotICAgICAg
ICBwdXQod2FzbUJpbiwgV0FTTS5zZWN0aW9uRW5jb2RpbmdUeXBlLCBzZWN0aW9uLmlkKTsKLSAg
ICAgICAgbGV0IHNlY3Rpb25CaW4gPSB3YXNtQmluLm5ld1BhdGNoYWJsZSgidmFydWludCIpOwot
ICAgICAgICBzd2l0Y2ggKHNlY3Rpb24ubmFtZSkgewotICAgICAgICBjYXNlICJUeXBlIjogdGhy
b3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1l
fSJgKTsKLSAgICAgICAgY2FzZSAiSW1wb3J0IjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVu
dGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAgICAgICAgY2FzZSAiRnVu
Y3Rpb24iOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtz
ZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJUYWJsZSI6IHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAg
IGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0
eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIkdsb2JhbCI6IHRocm93IG5l
dyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7
Ci0gICAgICAgIGNhc2UgIkV4cG9ydCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDog
c2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIlN0YXJ0Ijog
dGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5u
YW1lfSJgKTsKLSAgICAgICAgY2FzZSAiRWxlbWVudCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2Ug
IkNvZGUiOgotICAgICAgICAgICAgY29uc3QgbnVtYmVyT2ZGdW5jdGlvbkJvZGllcyA9IHNlY3Rp
b24uZGF0YS5sZW5ndGg7Ci0gICAgICAgICAgICBwdXQoc2VjdGlvbkJpbiwgInZhcnVpbnQiLCBu
dW1iZXJPZkZ1bmN0aW9uQm9kaWVzKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgZnVuYyBvZiBz
ZWN0aW9uLmRhdGEpIHsKLSAgICAgICAgICAgICAgICBsZXQgZnVuY0JpbiA9IHNlY3Rpb25CaW4u
bmV3UGF0Y2hhYmxlKCJ2YXJ1aW50Iik7Ci0gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxDb3Vu
dCA9IGZ1bmMubG9jYWxzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInZh
cnVpbnQiLCBsb2NhbENvdW50KTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxDb3VudCAhPT0g
MCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBsb2NhbHNgKTsgLy8gRklYTUUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjcwNgotICAgICAgICAgICAg
ICAgIGZvciAoY29uc3Qgb3Agb2YgZnVuYy5jb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1
dChmdW5jQmluLCAidWludDgiLCBvcC52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChv
cC5hcmd1bWVudHMubGVuZ3RoICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6
IGFyZ3VtZW50c2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyNzA2Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvcC5pbW1lZGlhdGVzLmxlbmd0
aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBpbW1lZGlhdGVzYCk7IC8v
IEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnVuY0Jpbi5hcHBseSgpOworY29uc3Qg
X25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlID0gKHBhcmFtcywgcmV0KSA9PiB7CisgICAgYXNz
ZXJ0LmlzQXJyYXkocGFyYW1zKTsKKyAgICBmb3IgKGNvbnN0IHAgb2YgcGFyYW1zKQorICAgICAg
ICBhc3NlcnQudHJ1dGh5KFdBU00uaXNWYWxpZFZhbHVlVHlwZShwKSwgYFR5cGUgcGFyYW1ldGVy
ICR7cH0gbmVlZHMgYSB2YWxpZCB2YWx1ZSB0eXBlYCk7CisgICAgaWYgKHR5cGVvZihyZXQpID09
PSAidW5kZWZpbmVkIikKKyAgICAgICAgcmV0ID0gInZvaWQiOworICAgIGFzc2VydC5pc05vdEFy
cmF5KHJldCwgYE11bHRpcGxlIHJldHVybiB2YWx1ZXMgbm90IHN1cHBvcnRlZCBieSBXZWJBc3Nl
bWJseSB5ZXRgKTsKKyAgICBhc3NlcnQuZmFsc3kocmV0ICE9PSAidm9pZCIgJiYgIVdBU00uaXNW
YWxpZFZhbHVlVHlwZShyZXQpLCBgVHlwZSByZXR1cm4gJHtyZXR9IG11c3QgYmUgdmFsaWQgdmFs
dWUgdHlwZWApOworICAgIHJldHVybiBbcGFyYW1zLCByZXRdOworfTsKKworY29uc3QgX21heWJl
UmVnaXN0ZXJUeXBlID0gKGJ1aWxkZXIsIHR5cGUpID0+IHsKKyAgICBjb25zdCB0eXBlU2VjdGlv
biA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICBpZiAodHlwZW9mKHR5cGUpID09
PSAibnVtYmVyIikgeworICAgICAgICAvLyBUeXBlIG51bWJlcnMgYWxyZWFkeSByZWZlciB0byB0
aGUgdHlwZSBzZWN0aW9uLCBubyBuZWVkIHRvIHJlZ2lzdGVyIHRoZW0uCisgICAgICAgIGlmIChi
dWlsZGVyLl9jaGVja2VkKSB7CisgICAgICAgICAgICBhc3NlcnQuaXNOb3RVbmRlZih0eXBlU2Vj
dGlvbiwgYENhbid0IHVzZSB0eXBlICR7dHlwZX0gaWYgYSB0eXBlIHNlY3Rpb24gaXNuJ3QgcHJl
c2VudGApOworICAgICAgICAgICAgYXNzZXJ0LmlzTm90VW5kZWYodHlwZVNlY3Rpb24uZGF0YVt0
eXBlXSwgYFR5cGUgJHt0eXBlfSBkb2Vzbid0IGV4aXN0IGluIHR5cGUgc2VjdGlvbmApOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKyAgICBhc3NlcnQuaGFzT2JqZWN0
UHJvcGVydHkodHlwZSwgInBhcmFtcyIsIGBFeHBlY3RlZCB0eXBlIHRvIGJlIGEgbnVtYmVyIG9y
IG9iamVjdCB3aXRoICdwYXJhbXMnIGFuZCBvcHRpb25hbGx5ICdyZXQnIGZpZWxkc2ApOworICAg
IGNvbnN0IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUodHlwZS5w
YXJhbXMsIHR5cGUucmV0KTsKKyAgICBhc3NlcnQuaXNOb3RVbmRlZih0eXBlU2VjdGlvbiwgYENh
bid0IGFkZCB0eXBlIGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKKyAgICAvLyBU
cnkgcmV1c2luZyBhbiBlcXVpdmFsZW50IHR5cGUgZnJvbSB0aGUgdHlwZSBzZWN0aW9uLgorICAg
IHR5cGVzOgorICAgIGZvciAobGV0IGkgPSAwOyBpICE9PSB0eXBlU2VjdGlvbi5kYXRhLmxlbmd0
aDsgKytpKSB7CisgICAgICAgIGNvbnN0IHQgPSB0eXBlU2VjdGlvbi5kYXRhW2ldOworICAgICAg
ICBpZiAodC5yZXQgPT09IHJldCAmJiBwYXJhbXMubGVuZ3RoID09PSB0LnBhcmFtcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqICE9PSB0LnBhcmFtcy5sZW5ndGg7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbal0gIT09IHQucGFyYW1zW2pdKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZSB0eXBlczsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlICJEYXRhIjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxl
bWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlmIChzZWN0aW9uLmlkICE9PSBfdW5rbm93blNlY3Rpb25JZCkgdGhy
b3cgbmV3IEVycm9yKGBVbmtub3duIHNlY3Rpb24gIiR7c2VjdGlvbi5uYW1lfSIgd2l0aCBudW1i
ZXIgJHtzZWN0aW9uLmlkfWApOwotICAgICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJzdHJpbmci
LCBzZWN0aW9uLm5hbWUpOwotICAgICAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIHNlY3Rpb24u
ZGF0YSkKLSAgICAgICAgICAgICAgICBwdXQoc2VjdGlvbkJpbiwgInVpbnQ4IiwgYnl0ZSk7Cisg
ICAgICAgICAgICB0eXBlID0gaTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNlY3Rpb25CaW4uYXBwbHkoKTsKICAgICB9Ci0gICAgcmV0dXJuIHdhc21CaW47CisgICAg
aWYgKHR5cGVvZih0eXBlKSAhPT0gIm51bWJlciIpIHsKKyAgICAgICAgLy8gQ291bGRuJ3QgcmV1
c2UgYSBwcmUtZXhpc3RpbmcgdHlwZSwgcmVnaXN0ZXIgdGhpcyB0eXBlIGluIHRoZSB0eXBlIHNl
Y3Rpb24uCisgICAgICAgIHR5cGVTZWN0aW9uLmRhdGEucHVzaCh7IHBhcmFtczogcGFyYW1zLCBy
ZXQ6IHJldCB9KTsKKyAgICAgICAgdHlwZSA9IHR5cGVTZWN0aW9uLmRhdGEubGVuZ3RoIC0gMTsK
KyAgICB9CisgICAgcmV0dXJuIHR5cGU7Cit9OworCitjb25zdCBfaW1wb3J0RnVuY3Rpb25Db250
aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1
cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+IHsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKG1v
ZHVsZSwgYEltcG9ydCBmdW5jdGlvbiBtb2R1bGUgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7
bW9kdWxlfSJgKTsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgSW1wb3J0IGZ1bmN0
aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAg
Y29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAgICAg
IHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgdHlwZSk7CisgICAgICAgIHNlY3Rp
b24uZGF0YS5wdXNoKHsgZmllbGQ6IGZpZWxkLCB0eXBlOiB0eXBlLCBraW5kOiAiRnVuY3Rpb24i
LCBtb2R1bGU6IG1vZHVsZSB9KTsKKyAgICAgICAgLy8gSW1wb3J0cyBhbHNvIGNvdW50IGluIHRo
ZSBmdW5jdGlvbiBpbmRleCBzcGFjZS4gTWFwIHRoZW0gYXMgb2JqZWN0cyB0byBhdm9pZCBjbGFz
aGluZyB3aXRoIENvZGUgZnVuY3Rpb25zJyBuYW1lcy4KKyAgICAgICAgYnVpbGRlci5fcmVnaXN0
ZXJGdW5jdGlvblRvSW5kZXhTcGFjZSh7IG1vZHVsZTogbW9kdWxlLCBmaWVsZDogZmllbGQgfSk7
CisgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsKKyAgICB9OworfTsKKworY29uc3QgX2V4cG9y
dEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9
PiB7CisgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgsIHR5cGUpID0+IHsKKyAgICAgICAgYXNzZXJ0
LmlzU3RyaW5nKGZpZWxkLCBgRXhwb3J0IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmlu
ZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVy
Ll9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAgICAgIGlmICh0eXBlb2YodHlwZSkgIT09ICJ1bmRl
ZmluZWQiKSB7CisgICAgICAgICAgICAvLyBFeHBvcnRzIGNhbiBsZWF2ZSB0aGUgdHlwZSB1bnNw
ZWNpZmllZCwgbGV0dGluZyB0aGUgQ29kZSBidWlsZGVyIHBhdGNoIHRoZW0gdXAgbGF0ZXIuCisg
ICAgICAgICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOworICAg
ICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGNoZWNrIG11Y2ggYWJvdXQgImluZGV4IiBoZXJl
IGJlY2F1c2UgdGhlIENvZGUgc2VjdGlvbiBzdWNjZWVkcyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1v
cmUgd29yayBpcyBkb25lIGF0IENvZGUoKS5FbmQoKSB0aW1lLgorICAgICAgICBzd2l0Y2ggKHR5
cGVvZihpbmRleCkpIHsKKyAgICAgICAgY2FzZSAic3RyaW5nIjogYnJlYWs7IC8vIEFzc3VtZSBp
dCdzIGEgZnVuY3Rpb24gbmFtZSB3aGljaCB3aWxsIGJlIHJldmVhbGVkIGluIHRoZSBDb2RlIHNl
Y3Rpb24uCisgICAgICAgIGNhc2UgIm51bWJlciI6IGJyZWFrOyAvLyBBc3N1bWUgaXQncyBhIG51
bWJlciBpbiB0aGUgImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4KKyAgICAgICAgY2FzZSAib2JqZWN0
IjoKKyAgICAgICAgICAgIC8vIFJlLWV4cG9ydGluZyBhbiBpbXBvcnQuCisgICAgICAgICAgICBh
c3NlcnQuaGFzT2JqZWN0UHJvcGVydHkoaW5kZXgsICJtb2R1bGUiLCBgUmUtZXhwb3J0aW5nICIk
e2ZpZWxkfSIgZnJvbSBhbiBpbXBvcnRgKTsKKyAgICAgICAgICAgIGFzc2VydC5oYXNPYmplY3RQ
cm9wZXJ0eShpbmRleCwgImZpZWxkIiwgYFJlLWV4cG9ydGluZyAiJHtmaWVsZH0iIGZyb20gYW4g
aW1wb3J0YCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoK
KyAgICAgICAgICAgIC8vIEFzc3VtZSBpdCdzIHRoZSBzYW1lIGFzIHRoZSBmaWVsZCAoaS5lLiBp
dCdzIG5vdCBiZWluZyByZW5hbWVkKS4KKyAgICAgICAgICAgIGluZGV4ID0gZmllbGQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQg
c2VjdGlvbidzIGluZGV4IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIGdvdCAke2luZGV4
fWApOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGNvcnJlc3BvbmRpbmdJbXBvcnQgPSBidWls
ZGVyLl9nZXRGdW5jdGlvbkZyb21JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAgY29uc3QgaW1w
b3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkltcG9ydCIpOworICAgICAgICBpZiAo
dHlwZW9mKGluZGV4KSA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgIC8vIFJlLWV4cG9ydGlu
ZyBhbiBpbXBvcnQgdXNpbmcgaXRzIG1vZHVsZStmaWVsZCBuYW1lLgorICAgICAgICAgICAgYXNz
ZXJ0LmlzTm90VW5kZWYoY29ycmVzcG9uZGluZ0ltcG9ydCwgYFJlLWV4cG9ydGluZyAiJHtmaWVs
ZH0iIGNvdWxkbid0IGZpbmQgaW1wb3J0IGZyb20gbW9kdWxlICIke2luZGV4Lm1vZHVsZX0iIGZp
ZWxkICIke2luZGV4LmZpZWxkfSJgKTsKKyAgICAgICAgICAgIGluZGV4ID0gY29ycmVzcG9uZGlu
Z0ltcG9ydDsKKyAgICAgICAgICAgIGlmICh0eXBlb2YodHlwZSkgPT09ICJ1bmRlZmluZWQiKQor
ICAgICAgICAgICAgICAgIHR5cGUgPSBpbXBvcnRTZWN0aW9uLmRhdGFbaW5kZXhdLnR5cGU7Cisg
ICAgICAgICAgICBpZiAoYnVpbGRlci5fY2hlY2tlZCkKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXEodHlwZSwgaW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS50eXBlLCBgUmUtZXhwb3J0aW5nIGlt
cG9ydCAiJHtpbXBvcnRTZWN0aW9uLmRhdGFbaW5kZXhdLmZpZWxkfSIgYXMgIiR7ZmllbGR9IiBo
YXMgbWlzbWF0Y2hpbmcgdHlwZWApOworICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihjb3JyZXNw
b25kaW5nSW1wb3J0KSAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgIC8vIFJlLWV4cG9y
dGluZyBhbiBpbXBvcnQgdXNpbmcgaXRzIGluZGV4LgorICAgICAgICAgICAgbGV0IGV4cG9ydGVk
SW1wb3J0OworICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGltcG9ydFNlY3Rpb24uZGF0YSkg
eworICAgICAgICAgICAgICAgIGlmIChpLm1vZHVsZSA9PT0gY29ycmVzcG9uZGluZ0ltcG9ydC5t
b2R1bGUgJiYgaS5maWVsZCA9PT0gY29ycmVzcG9uZGluZ0ltcG9ydC5maWVsZCkgeworICAgICAg
ICAgICAgICAgICAgICBleHBvcnRlZEltcG9ydCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
eXBlb2YodHlwZSkgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgIHR5cGUgPSBleHBv
cnRlZEltcG9ydC50eXBlOworICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQpCisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxKHR5cGUsIGV4cG9ydGVkSW1wb3J0LnR5cGUsIGBSZS1leHBv
cnRpbmcgaW1wb3J0ICIke2V4cG9ydGVkSW1wb3J0LmZpZWxkfSIgYXMgIiR7ZmllbGR9IiBoYXMg
bWlzbWF0Y2hpbmcgdHlwZWApOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb24uZGF0YS5wdXNo
KHsgZmllbGQ6IGZpZWxkLCB0eXBlOiB0eXBlLCBraW5kOiAiRnVuY3Rpb24iLCBpbmRleDogaW5k
ZXggfSk7CisgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsKKyAgICB9OwogfTsKIAogZXhwb3J0
IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CkBAIC05OCw2ICsxNjIsOCBAQCBleHBvcnQgZGVmYXVs
dCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgIHByZWFtYmxlW3AubmFtZV0gPSBwLnZhbHVl
OwogICAgICAgICB0aGlzLnNldFByZWFtYmxlKHByZWFtYmxlKTsKICAgICAgICAgdGhpcy5fc2Vj
dGlvbnMgPSBbXTsKKyAgICAgICAgdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlID0ge307CisgICAg
ICAgIHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZUNvdW50ID0gMDsKICAgICAgICAgdGhpcy5fcmVn
aXN0ZXJTZWN0aW9uQnVpbGRlcnMoKTsKICAgICB9CiAgICAgc2V0Q2hlY2tlZChjaGVja2VkKSB7
CkBAIC0xMDgsMjUgKzE3NCwxMTkgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAg
ICAgICAgIHRoaXMuX3ByZWFtYmxlID0gT2JqZWN0LmFzc2lnbih0aGlzLl9wcmVhbWJsZSB8fCB7
fSwgcCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KKyAgICBfcmVnaXN0ZXJGdW5jdGlv
blRvSW5kZXhTcGFjZShuYW1lKSB7CisgICAgICAgIGlmICh0eXBlb2YobmFtZSkgPT09ICJ1bmRl
ZmluZWQiKSB7CisgICAgICAgICAgICAvLyBSZWdpc3RlcmluZyBhIG5hbWVsZXNzIGZ1bmN0aW9u
IHN0aWxsIGFkZHMgaXQgdG8gdGhlIGZ1bmN0aW9uIGluZGV4IHNwYWNlLiBSZWdpc3RlciBpdCBh
cyBzb21ldGhpbmcgdGhhdCBjYW4ndCBub3JtYWxseSBiZSByZWdpc3RlcmVkLgorICAgICAgICAg
ICAgbmFtZSA9IHt9OworICAgICAgICB9CisgICAgICAgIC8vIENvbGxpc2lvbnMgYXJlIGZpbmU6
IHdlJ2xsIHNpbXBseSBjb3VudCB0aGUgZnVuY3Rpb24gYW5kIGZvcmdldCB0aGUgcHJldmlvdXMg
b25lLgorICAgICAgICB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2VbbmFtZV0gPSB0aGlzLl9mdW5j
dGlvbkluZGV4U3BhY2VDb3VudCsrOworICAgICAgICAvLyBNYXAgaXQgYm90aCB3YXlzLCB0aGUg
bnVtYmVyIHNwYWNlIGlzIGRpc3RpbmN0IGZyb20gdGhlIG5hbWUgc3BhY2UuCisgICAgICAgIHRo
aXMuX2Z1bmN0aW9uSW5kZXhTcGFjZVt0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2VbbmFtZV1dID0g
bmFtZTsKKyAgICB9CisgICAgX2dldEZ1bmN0aW9uRnJvbUluZGV4U3BhY2UobmFtZSkgeworICAg
ICAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlW25hbWVdOworICAgIH0KICAgICBf
cmVnaXN0ZXJTZWN0aW9uQnVpbGRlcnMoKSB7CiAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBp
biBXQVNNLmRlc2NyaXB0aW9uLnNlY3Rpb24pIHsKICAgICAgICAgICAgIHN3aXRjaCAoc2VjdGlv
bikgeworICAgICAgICAgICAgY2FzZSAiVHlwZSI6CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0
aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5f
YWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9
IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVCdWlsZGVyID0geworICAgICAg
ICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiBidWlsZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgRnVuYzogKHBhcmFtcywgcmV0KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW3BhcmFtcywgcmV0XSA9IF9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZShwYXJhbXMsIHJl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRhLnB1c2goeyBwYXJhbXM6IHBh
cmFtcywgcmV0OiByZXQgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5
cGVCdWlsZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVCdWlsZGVyOworICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJJbXBv
cnQiOgorICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydEJ1aWxkZXIgPSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZTog
KCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCB0YWJsZWApOyB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5OiAoKSA9PiB7IHRocm93IG5ldyBFcnJv
cihgVW5pbXBsZW1lbnRlZDogaW1wb3J0IG1lbW9yeWApOyB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgR2xvYmFsOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1w
b3J0IGdsb2JhbGApOyB9LAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBpbXBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2ltcG9ydEZ1bmN0aW9uQ29udGludWF0aW9u
KHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1w
b3J0QnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAiRXhwb3J0IjoKKyAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25d
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRT
ZWN0aW9uKHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBvcnRCdWlsZGVy
ID0geworICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVu
dGVkOiBleHBvcnQgdGFibGVgKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeTog
KCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGV4cG9ydCBtZW1vcnlgKTsg
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4geyB0aHJvdyBuZXcgRXJy
b3IoYFVuaW1wbGVtZW50ZWQ6IGV4cG9ydCBnbG9iYWxgKTsgfSwKKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5GdW5jdGlvbiA9IF9leHBv
cnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxkZXI7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgIkNvZGUiOgogICAgICAgICAg
ICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGJ1aWxkZXIgPSB0aGlzOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2RlQnVp
bGRlciA9ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IGJ1aWxkZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogcGFyYW1ldGVycyA9PiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwgW107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFBhcmFtZXRlclR5cGVzID0gcGFy
YW1ldGVycy5maWx0ZXIocCA9PiAhV0FTTS5pc1ZhbGlkVmFsdWVUeXBlKHApKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW52YWxpZFBhcmFtZXRlclR5cGVzLmxlbmd0aCAhPT0g
MCkgdGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBkZWNsYXJlZCB3aXRoIHBhcmFtZXRlcnMgWyR7
cGFyYW1ldGVyc31dLCBpbnZhbGlkOiBbJHtpbnZhbGlkUGFyYW1ldGVyVHlwZXN9XWApOworICAg
ICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2Ugbm93IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHJlbWFwIHRoZSBleHBv
cnQgc2VjdGlvbidzICJ0eXBlIiBhbmQgImluZGV4IiBhY2NvcmRpbmcgdG8gdGhlIENvZGUgc2Vj
dGlvbiB3ZSdyZSBjdXJyZW50bHkgZW5kaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHR5cGVTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiVHlwZSIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydFNlY3Rpb24gPSBidWlsZGVyLl9nZXRT
ZWN0aW9uKCJJbXBvcnQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBv
cnRTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiRXhwb3J0Iik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY29kZVNlY3Rpb24gPSBzOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChleHBvcnRTZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgZSBvZiBleHBvcnRTZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mKGUuaW5kZXgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3Io
YFVuZXhwZWN0ZWQgZXhwb3J0IGluZGV4ICIke2UuaW5kZXh9ImApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjogeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYnVpbGRlci5fZ2V0RnVuY3Rpb25G
cm9tSW5kZXhTcGFjZShlLmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQuaXNOdW1iZXIoaW5kZXgsIGBFeHBvcnQgc2VjdGlvbiBjb250YWlucyB1
bmRlZmluZWQgZnVuY3Rpb24gIiR7ZS5pbmRleH0iYCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZS5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSAvLyBGYWxsdGhyb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgIm51bWJlciI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGJ1aWxkZXIuX2dldEZ1bmN0aW9uRnJvbUluZGV4
U3BhY2UoZS5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGJ1aWxkZXIuX2NoZWNrZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzc2VydC5pc05vdFVuZGVmKGluZGV4LCBgRXhwb3J0ICIke2UuZmllbGR9IiBk
b2Vzbid0IGNvcnJlc3BvbmQgdG8gYSBkZWZpbmVkIHZhbHVlIGluIHRoZSBmdW5jdGlvbiBpbmRl
eCBzcGFjZWApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInVuZGVmaW5lZCI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBV
bmltcGxlbWVudGVkOiBGdW5jdGlvbigpLkVuZCgpIHdpdGggdW5kZWZpbmVkIGV4cG9ydCBpbmRl
eGApOyAvLyBGSVhNRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJl
LWV4cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNl
Y3Rpb24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4ID0gZS5pbmRleCAtIGZ1
bmN0aW9uSW5kZXhTcGFjZU9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlLnR5cGUgPSBjb2RlU2VjdGlvbi5kYXRhW2Z1bmN0aW9uSW5kZXhdLnR5cGU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IChhMCwgYTEpID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gdHlwZW9mKGEwKSA9PT0g
InN0cmluZyIgPyBhMSA6IGEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1
bmN0aW9uTmFtZSA9IHR5cGVvZihhMCkgPT09ICJzdHJpbmciID8gYTAgOiB1bmRlZmluZWQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihzaWduYXR1cmUpID09PSAidW5k
ZWZpbmVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0geyBw
YXJhbXM6IFtdIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Lmhhc09iamVj
dFByb3BlcnR5KHNpZ25hdHVyZSwgInBhcmFtcyIsIGBFeHBlY3QgZnVuY3Rpb24gc2lnbmF0dXJl
IHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgInBhcmFtcyIgZmllbGQsIGdvdCAiJHtzaWduYXR1cmV9
ImApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtwYXJhbXMsIHJldF0gPSBf
bm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJlLnJl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0geyBwYXJhbXM6IHBh
cmFtcywgcmV0OiByZXQgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5j
ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHBhcmFtZXRlcnMs
IC8vIFBhcmFtZXRlcnMgYXJlIHRoZSBmaXJzdCBsb2NhbHMuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtZXRlckNvdW50OiBwYXJhbWV0ZXJzLmxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZnVuY3Rpb25OYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlOiBfbWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgc2ln
bmF0dXJlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBzaWdu
YXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsczogcGFyYW1zLCAv
LyBQYXJhbWV0ZXJzIGFyZSB0aGUgZmlyc3QgbG9jYWxzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJDb3VudDogcGFyYW1zLmxlbmd0aCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZTogW10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKGZ1bmMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuX3JlZ2lzdGVyRnVuY3Rpb25Ub0luZGV4U3Bh
Y2UoZnVuY3Rpb25OYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rp
b25CdWlsZGVyID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBv
cCBpbiBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuYW1lID0gX3RvSmF2YVNjcmlwdE5hbWUob3ApOwpAQCAtMTc0LDE5ICsz
MzQsMjEgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
OiAoKSA9PiB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tJ
bW1zID0gYnVpbGRlci5fY2hlY2tlZCA/IChvcCwgaW1tcykgPT4gewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGltbXMubGVuZ3RoICE9IGltbS5sZW5ndGgpIHRocm93
IG5ldyBFcnJvcihgIiR7b3B9IiBleHBlY3RzICR7aW1tLmxlbmd0aH0gaW1tZWRpYXRlcywgZ290
ICR7aW1tcy5sZW5ndGh9YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
c3NlcnQuZXEoaW1tcy5sZW5ndGgsIGltbS5sZW5ndGgsIGAiJHtvcH0iIGV4cGVjdHMgJHtpbW0u
bGVuZ3RofSBpbW1lZGlhdGVzLCBnb3QgJHtpbW1zLmxlbmd0aH1gKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCAhPT0gaW1tLmxlbmd0
aDsgKytpZHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnb3QgPSBpbW1zW2lkeF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZXhwZWN0ID0gaW1tW2lkeF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChleHBlY3QubmFtZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uX2luZGV4IjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXNWYWxpZFZhbHVlKGdvdCwgImkz
MiIpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgb24gJHtvcH06IGdvdCAiJHtnb3R9
IiwgZXhwZWN0ZWQgaTMyYCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFzc2VydC50cnV0aHkoX2lzVmFsaWRWYWx1ZShnb3QsICJpMzIiKSwgYEludmFsaWQg
dmFsdWUgb24gJHtvcH06IGdvdCAiJHtnb3R9IiwgZXhwZWN0ZWQgaTMyYCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGNoZWNrIGZ1bmN0aW9u
IGluZGljZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjEK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAibG9jYWxfaW5kZXgiOiB0
aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6ICIke2V4cGVjdC5uYW1lfSIgb24gIiR7b3B9
ImApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImdsb2Jh
bF9pbmRleCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogIiR7ZXhwZWN0Lm5hbWV9
IiBvbiAiJHtvcH0iYCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAidHlwZV9pbmRleCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogIiR7ZXhw
ZWN0Lm5hbWV9IiBvbiAiJHtvcH0iYCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAidmFsdWUiOiBpZiAoIV9pc1ZhbGlkVmFsdWUoZ290LCByZXRbMF0pKSB0
aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgb24gJHtvcH06IGdvdCAiJHtnb3R9IiwgZXhw
ZWN0ZWQgJHtyZXRbMF19YCk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgInZhbHVlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShfaXNWYWxpZFZhbHVlKGdvdCwgcmV0WzBdKSwgYElu
dmFsaWQgdmFsdWUgb24gJHtvcH06IGdvdCAiJHtnb3R9IiwgZXhwZWN0ZWQgJHtyZXRbMF19YCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImZsYWdzIjogdGhyb3cg
bmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiAiJHtleHBlY3QubmFtZX0iIG9uICIke29wfSJgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJvZmZzZXQiOiB0
aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6ICIke2V4cGVjdC5uYW1lfSIgb24gIiR7b3B9
ImApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRyb2w6
CkBAIC0yMjYsNyArMzg4LDExIEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAg
ICAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXM7CiAgICAgICAgICAgICBjb25zdCB1bmtub3du
QnVpbGRlciA9ICB7CiAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiBidWlsZGVyLAotICAgICAg
ICAgICAgICAgIEJ5dGU6IGIgPT4geyBpZiAoKGIgJiAweEZGKSAhPT0gYikgdGhyb3cgbmV3IFJh
bmdlRXJyb3IoYFVua25vd24gc2VjdGlvbiBleHBlY3RlZCBieXRlLCBnb3Q6ICIke2J9ImApOyBz
LmRhdGEucHVzaChiKTsgcmV0dXJuIHVua25vd25CdWlsZGVyOyB9CisgICAgICAgICAgICAgICAg
Qnl0ZTogYiA9PiB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcShiICYgMHhGRiwgYiwg
YFVua25vd24gc2VjdGlvbiBleHBlY3RlZCBieXRlLCBnb3Q6ICIke2J9ImApOworICAgICAgICAg
ICAgICAgICAgICBzLmRhdGEucHVzaChiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVu
a25vd25CdWlsZGVyOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICByZXR1cm4gdW5rbm93bkJ1aWxkZXI7CiAgICAgICAgIH07CkBAIC0yMzQsMTAgKzQwMCwz
OSBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICBfYWRkU2VjdGlvbihuYW1l
T3JOdW1iZXIsIGV4dHJhT2JqZWN0KSB7CiAgICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YobmFt
ZU9yTnVtYmVyKSA9PT0gInN0cmluZyIgPyBuYW1lT3JOdW1iZXIgOiAiIjsKICAgICAgICAgY29u
c3QgbnVtYmVyID0gdHlwZW9mKG5hbWVPck51bWJlcikgPT09ICJudW1iZXIiID8gbmFtZU9yTnVt
YmVyIDogKFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbltuYW1lXSA/IFdBU00uZGVzY3JpcHRpb24u
c2VjdGlvbltuYW1lXS52YWx1ZSA6IF91bmtub3duU2VjdGlvbklkKTsKKyAgICAgICAgaWYgKHRo
aXMuX2NoZWNrZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHVuaXF1ZW5lc3MuCisgICAgICAg
ICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmZhbHN5KHMubmFtZSA9PT0gbmFtZSAmJiBzLmlkID09PSBudW1iZXIsIGBDYW5ub3QgaGF2
ZSB0d28gc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lICIke25hbWV9IiBhbmQgSUQgJHtudW1i
ZXJ9YCk7CisgICAgICAgICAgICAvLyBDaGVjayBvcmRlcmluZy4KKyAgICAgICAgICAgIGlmICgo
bnVtYmVyICE9PSBfdW5rbm93blNlY3Rpb25JZCkgJiYgKHRoaXMuX3NlY3Rpb25zLmxlbmd0aCAh
PT0gMCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2VjdGlvbnMubGVu
Z3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Nl
Y3Rpb25zW2ldLmlkID09PSBfdW5rbm93blNlY3Rpb25JZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQubGUodGhpcy5fc2VjdGlv
bnNbaV0uaWQsIG51bWJlciwgYEJhZCBzZWN0aW9uIG9yZGVyaW5nOiAiJHt0aGlzLl9zZWN0aW9u
c1tpXS5uYW1lfSIgY2Fubm90IHByZWNlZGUgIiR7bmFtZX0iYCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgICAgICBjb25zdCBzID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IG5hbWUsIGlkOiBudW1iZXIs
IGRhdGE6IFtdIH0sIGV4dHJhT2JqZWN0IHx8IHt9KTsKICAgICAgICAgdGhpcy5fc2VjdGlvbnMu
cHVzaChzKTsKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQorICAgIF9nZXRTZWN0aW9uKG5hbWVP
ck51bWJlcikgeworICAgICAgICBzd2l0Y2ggKHR5cGVvZihuYW1lT3JOdW1iZXIpKSB7CisgICAg
ICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogY2Fu
J3QgZ2V0IHNlY3Rpb24gIiR7bmFtZU9yTnVtYmVyfSJgKTsKKyAgICAgICAgY2FzZSAic3RyaW5n
IjoKKyAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKKyAgICAgICAg
ICAgICAgICBpZiAocy5uYW1lID09PSBuYW1lT3JOdW1iZXIpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzOworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgY2FzZSAi
bnVtYmVyIjoKKyAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zZWN0aW9ucykKKyAg
ICAgICAgICAgICAgICBpZiAocy5pZCA9PT0gbmFtZU9yTnVtYmVyKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gczsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0K
KyAgICB9CiAgICAgb3B0aW1pemUoKSB7CiAgICAgICAgIC8vIEZJWE1FIEFkZCBtb3JlIG9wdGlt
aXphdGlvbnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjQK
ICAgICAgICAgcmV0dXJuIHRoaXM7CkBAIC0yNTQsNSArNDQ5LDUgQEAgZXhwb3J0IGRlZmF1bHQg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgIC8vIEZJWE1FIENyZWF0ZSBhbiBhc20uanMgZXF1aXZh
bGVudCBzdHJpbmcgd2hpY2ggY2FuIGJlIGV2YWwnZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzQyNQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImFzbS5qcyBu
b3QgaW1wbGVtZW50ZWQgeWV0Iik7CiAgICAgfQotICAgIFdlYkFzc2VtYmx5KCkgeyByZXR1cm4g
X0J1aWxkV2ViQXNzZW1ibHlCaW5hcnkodGhpcy5fcHJlYW1ibGUsIHRoaXMuX3NlY3Rpb25zKTsg
fQorICAgIFdlYkFzc2VtYmx5KCkgeyByZXR1cm4gQnVpbGRXZWJBc3NlbWJseS5CaW5hcnkodGhp
cy5fcHJlYW1ibGUsIHRoaXMuX3NlY3Rpb25zKTsgfQogfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXJf
V2ViQXNzZW1ibHlCaW5hcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZjJiMGE1MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2Vt
Ymx5QmluYXJ5LmpzCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworaW1wb3J0IExvd0xldmVsQmluYXJ5IGZyb20gJ0xvd0xldmVs
QmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIFdBU00gZnJvbSAnV0FTTS5qcyc7CisKK2NvbnN0IHB1
dCA9IChiaW4sIHR5cGUsIHZhbHVlKSA9PiBiaW5bdHlwZV0odmFsdWUpOworCitjb25zdCBlbWl0
dGVycyA9IHsKKyAgICBUeXBlOiAoc2VjdGlvbiwgYmluKSA9PiB7CisgICAgICAgIHB1dChiaW4s
ICJ2YXJ1aW50Iiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoY29uc3QgZW50
cnkgb2Ygc2VjdGlvbi5kYXRhKSB7CisgICAgICAgICAgICBjb25zdCBmdW5jVHlwZUNvbnN0cnVj
dG9yID0gLTB4MjA7IC8vIEZJWE1FIE1vdmUgdGhpcyB0byB3YXNtLmpzb24uCisgICAgICAgICAg
ICBwdXQoYmluLCAidmFyaW50NyIsIGZ1bmNUeXBlQ29uc3RydWN0b3IpOworICAgICAgICAgICAg
cHV0KGJpbiwgInZhcnVpbnQiLCBlbnRyeS5wYXJhbXMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZv
ciAoY29uc3QgcGFyYW0gb2YgZW50cnkucGFyYW1zKQorICAgICAgICAgICAgICAgIHB1dChiaW4s
ICJ1aW50OCIsIFdBU00udmFsdWVUeXBlVmFsdWVbcGFyYW1dKTsKKyAgICAgICAgICAgIGlmIChl
bnRyeS5yZXQgPT09ICJ2b2lkIikKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDEi
LCAwKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1
aW50MSIsIDEpOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00udmFsdWVU
eXBlVmFsdWVbZW50cnkucmV0XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAor
ICAgIEltcG9ydDogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmluLCAidmFydWlu
dCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHNl
Y3Rpb24uZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInN0cmluZyIsIGVudHJ5Lm1vZHVs
ZSk7CisgICAgICAgICAgICBwdXQoYmluLCAic3RyaW5nIiwgZW50cnkuZmllbGQpOworICAgICAg
ICAgICAgcHV0KGJpbiwgInVpbnQ4IiwgV0FTTS5leHRlcm5hbEtpbmRWYWx1ZVtlbnRyeS5raW5k
XSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LmtpbmQpIHsKKyAgICAgICAgICAgIGRlZmF1
bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5leHBlY3RlZCBr
aW5kICR7ZW50cnkua2luZH1gKTsKKyAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uIjogcHV0KGJp
biwgInZhcnVpbnQiLCBlbnRyeS50eXBlKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJUYWJs
ZSI6IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOworICAgICAgICAgICAg
Y2FzZSAiTWVtb3J5IjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7Cisg
ICAgICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVt
ZW50ZWRgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisgICAgRnVuY3Rpb246
IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVk
YCk7IH0sCisgICAgVGFibGU6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBO
b3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgTWVtb3J5OiAoc2VjdGlvbiwgYmluKSA9PiB7
IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIEdsb2JhbDog
KHNlY3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRg
KTsgfSwKKyAgICBFeHBvcnQ6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBO
b3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgU3RhcnQ6IChzZWN0aW9uLCBiaW4pID0+IHsg
dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgRWxlbWVudDog
KHNlY3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRg
KTsgfSwKKyAgICBDb2RlOiAoc2VjdGlvbiwgYmluKSA9PiB7CisgICAgICAgIHB1dChiaW4sICJ2
YXJ1aW50Iiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7CisgICAgICAgIGZvciAoY29uc3QgZnVuYyBv
ZiBzZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAgIGxldCBmdW5jQmluID0gYmluLm5ld1BhdGNo
YWJsZSgidmFydWludCIpOworICAgICAgICAgICAgY29uc3QgbG9jYWxDb3VudCA9IGZ1bmMubG9j
YWxzLmxlbmd0aDsKKyAgICAgICAgICAgIHB1dChmdW5jQmluLCAidmFydWludCIsIGxvY2FsQ291
bnQpOworICAgICAgICAgICAgaWYgKGxvY2FsQ291bnQgIT09IDApIHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogbG9jYWxzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKKyAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgZnVu
Yy5jb2RlKSB7CisgICAgICAgICAgICAgICAgcHV0KGZ1bmNCaW4sICJ1aW50OCIsIG9wLnZhbHVl
KTsKKyAgICAgICAgICAgICAgICBpZiAob3AuYXJndW1lbnRzLmxlbmd0aCAhPT0gMCkgdGhyb3cg
bmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBhcmd1bWVudHNgKTsgLy8gRklYTUUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjcwNgorICAgICAgICAgICAgICAgIGlm
IChvcC5pbW1lZGlhdGVzLmxlbmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVu
dGVkOiBpbW1lZGlhdGVzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI3MDYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZ1bmNCaW4uYXBw
bHkoKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgRGF0YTogKHNlY3Rpb24sIGJpbikgPT4geyB0
aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKK307CisKK2V4cG9ydCBj
b25zdCBCaW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9PiB7CisgICAgbGV0IHdhc21CaW4g
PSBuZXcgTG93TGV2ZWxCaW5hcnkoKTsKKyAgICBmb3IgKGNvbnN0IHAgb2YgV0FTTS5kZXNjcmlw
dGlvbi5wcmVhbWJsZSkKKyAgICAgICAgcHV0KHdhc21CaW4sIHAudHlwZSwgcHJlYW1ibGVbcC5u
YW1lXSk7CisgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7CisgICAgICAgIHB1
dCh3YXNtQmluLCBXQVNNLnNlY3Rpb25FbmNvZGluZ1R5cGUsIHNlY3Rpb24uaWQpOworICAgICAg
ICBsZXQgc2VjdGlvbkJpbiA9IHdhc21CaW4ubmV3UGF0Y2hhYmxlKCJ2YXJ1aW50Iik7CisgICAg
ICAgIGNvbnN0IGVtaXR0ZXIgPSBlbWl0dGVyc1tzZWN0aW9uLm5hbWVdOworICAgICAgICBpZiAo
ZW1pdHRlcikKKyAgICAgICAgICAgIGVtaXR0ZXIoc2VjdGlvbiwgc2VjdGlvbkJpbik7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gVW5rbm93biBzZWN0aW9uLgorICAgICAgICAgICAg
cHV0KHNlY3Rpb25CaW4sICJzdHJpbmciLCBzZWN0aW9uLm5hbWUpOworICAgICAgICAgICAgZm9y
IChjb25zdCBieXRlIG9mIHNlY3Rpb24uZGF0YSkKKyAgICAgICAgICAgICAgICBwdXQoc2VjdGlv
bkJpbiwgInVpbnQ4IiwgYnl0ZSk7CisgICAgICAgIH0KKyAgICAgICAgc2VjdGlvbkJpbi5hcHBs
eSgpOworICAgIH0KKyAgICByZXR1cm4gd2FzbUJpbjsKK307CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vTG93TGV2ZWxCaW5hcnkuanMgYi9KU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMK
aW5kZXggMGE4MzNjMS4uNzIwMDk3NiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0xvd0xldmVs
QmluYXJ5LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9Mb3dMZXZlbEJpbmFyeS5qcwpAQCAtMjcsNiAr
MjcsOCBAQCBjb25zdCBfaW5pdGlhbEFsbG9jYXRpb25TaXplID0gMTAyNDsKIGNvbnN0IF9ncm93
QWxsb2NhdGlvblNpemUgPSBhbGxvY2F0ZWQgPT4gYWxsb2NhdGVkICogMjsKIAogZXhwb3J0IGNv
bnN0IHZhcnVpbnRNaW4gPSAwOworZXhwb3J0IGNvbnN0IHZhcmludDdNaW4gPSAtMGIxMDAwMDAw
OworZXhwb3J0IGNvbnN0IHZhcmludDdNYXggPSAwYjExMTExMTsKIGV4cG9ydCBjb25zdCB2YXJ1
aW50N01heCA9IDBiMTExMTExMTsKIGV4cG9ydCBjb25zdCB2YXJ1aW50TWF4ID0gKCgoKDEgPDwg
MzEpID4+PiAwKSAtIDEpICogMikgKyAxOwogZXhwb3J0IGNvbnN0IHZhcmludE1pbiA9IC0oKDEg
PDwgMzEpID4+PiAwKTsKQEAgLTEyOSw2ICsxMzEsMTYgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3Mg
TG93TGV2ZWxCaW5hcnkgewogICAgICAgICAgICAgdGhpcy51aW50OCgweDgwIHwgYik7CiAgICAg
ICAgIH0gd2hpbGUgKHRydWUpOwogICAgIH0KKyAgICB2YXJ1aW50MSh2KSB7CisgICAgICAgIGlm
ICh2ICE9PSAwICYmIHYgIT09IDEpCisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihg
SW52YWxpZCB2YXJ1aW50MSAke3Z9IHJhbmdlIGlzIFswLCAxXWApOworICAgICAgICB0aGlzLnZh
cnVpbnQodik7CisgICAgfQorICAgIHZhcmludDcodikgeworICAgICAgICBpZiAodiA8IHZhcmlu
dDdNaW4gfHwgdmFyaW50N01heCA8IHYpCisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJv
cihgSW52YWxpZCB2YXJpbnQ3ICR7dn0gcmFuZ2UgaXMgWyR7dmFyaW50N01pbn0sICR7dmFyaW50
N01heH1dYCk7CisgICAgICAgIHRoaXMudmFyaW50KHYpOworICAgIH0KICAgICB2YXJ1aW50Nyh2
KSB7CiAgICAgICAgIGlmICh2IDwgdmFydWludE1pbiB8fCB2YXJ1aW50N01heCA8IHYpCiAgICAg
ICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB2YXJ1aW50NyAke3Z9IHJhbmdl
IGlzIFske3ZhcnVpbnRNaW59LCAke3ZhcnVpbnQ3TWF4fV1gKTsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9XQVNNLmpzIGIvSlNUZXN0cy93YXNtL1dBU00uanMKaW5kZXggOGU3YjdlZi4uZDhl
YWVmNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL1dBU00uanMKKysrIGIvSlNUZXN0cy93YXNt
L1dBU00uanMKQEAgLTI1LDkgKzI1LDE4IEBACiAKIGltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9t
ICd1dGlsaXRpZXMuanMnOwogCitjb25zdCBfbWFwVmFsdWVzID0gZnJvbSA9PiB7CisgICAgbGV0
IHZhbHVlcyA9IHt9OworICAgIGZvciAoY29uc3Qga2V5IGluIGZyb20pCisgICAgICAgIHZhbHVl
c1trZXldID0gZnJvbVtrZXldLnZhbHVlOworICAgIHJldHVybiB2YWx1ZXM7Cit9OworCiBleHBv
cnQgY29uc3QgZGVzY3JpcHRpb24gPSB1dGlsaXRpZXMuanNvbigid2FzbS5qc29uIik7CiBleHBv
cnQgY29uc3QgdmFsdWVUeXBlID0gT2JqZWN0LmtleXMoZGVzY3JpcHRpb24udmFsdWVfdHlwZSk7
CiBjb25zdCBfdmFsdWVUeXBlU2V0ID0gbmV3IFNldCh2YWx1ZVR5cGUpOwogZXhwb3J0IGNvbnN0
IGlzVmFsaWRWYWx1ZVR5cGUgPSB2ID0+IF92YWx1ZVR5cGVTZXQuaGFzKHYpOworZXhwb3J0IGNv
bnN0IHZhbHVlVHlwZVZhbHVlID0gX21hcFZhbHVlcyhkZXNjcmlwdGlvbi52YWx1ZV90eXBlKTsK
K2V4cG9ydCBjb25zdCBleHRlcm5hbEtpbmRWYWx1ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24u
ZXh0ZXJuYWxfa2luZCk7CiBleHBvcnQgY29uc3Qgc2VjdGlvbnMgPSBPYmplY3Qua2V5cyhkZXNj
cmlwdGlvbi5zZWN0aW9uKTsKIGV4cG9ydCBjb25zdCBzZWN0aW9uRW5jb2RpbmdUeXBlID0gZGVz
Y3JpcHRpb24uc2VjdGlvbltzZWN0aW9uc1swXV0udHlwZTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9hc3NlcnQuanMgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCmluZGV4IDJlYTVmNzAuLjAy
YzVhN2EgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMKKysrIGIvSlNUZXN0cy93
YXNtL2Fzc2VydC5qcwpAQCAtMjMsMjYgKzIzLDc0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LWNvbnN0IF9ub3RVbmRlZiA9ICh2KSA9PiB7Ci0gICAgaWYgKHR5cGVvZiB2ID09PSAidW5kZWZp
bmVkIikKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaG91bGRuJ3QgYmUgdW5kZWZpbmVkIik7
Citjb25zdCBfZmFpbCA9IChtc2csIGV4dHJhKSA9PiB7CisgICAgdGhyb3cgbmV3IEVycm9yKG1z
ZyArIChleHRyYSA/ICI6ICIgKyBleHRyYSA6ICIiKSk7CiB9OwogCi1jb25zdCBfaXNVbmRlZiA9
ICh2KSA9PiB7Ci0gICAgaWYgKHR5cGVvZiB2ICE9PSAidW5kZWZpbmVkIikKLSAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJTaG91bGQgYmUgdW5kZWZpbmVkIik7CitleHBvcnQgY29uc3QgaXNOb3RB
ID0gKHYsIHQsIG1zZykgPT4geworICAgIGlmICh0eXBlb2YgdiA9PT0gdCkKKyAgICAgICAgX2Zh
aWwoYFNob3VsZG4ndCBiZSAke3R9YCwgbXNnKTsKIH07CiAKLWNvbnN0IF9lcSA9IChsaHMsIHJo
cykgPT4gewotICAgIGlmIChsaHMgIT09IHJocykKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBO
b3QgdGhlIHNhbWU6ICIke2xoc30iIGFuZCAiJHtyaHN9ImApOworZXhwb3J0IGNvbnN0IGlzQSA9
ICh2LCB0LCBtc2cpID0+IHsKKyAgICBpZiAodHlwZW9mIHYgIT09IHQpCisgICAgICAgIF9mYWls
KGBTaG91bGQgYmUgJHt0fSwgZ290ICR7dHlwZW9mKHYpfWAsIG1zZyk7CiB9OwogCi1jb25zdCBf
Z2UgPSAobGhzLCByaHMpID0+IHsKLSAgICBfbm90VW5kZWYobGhzKTsKLSAgICBfbm90VW5kZWYo
cmhzKTsKK2V4cG9ydCBjb25zdCBpc05vdFVuZGVmID0gKHYsIG1zZykgPT4gaXNOb3RBKHYsICJ1
bmRlZmluZWQiLCBtc2cpOworZXhwb3J0IGNvbnN0IGlzVW5kZWYgPSAodiwgbXNnKSA9PiBpc0Eo
diwgInVuZGVmaW5lZCIsIG1zZyk7CitleHBvcnQgY29uc3Qgbm90T2JqZWN0ID0gKHYsIG1zZykg
PT4gaXNOb3RBKHYsICJvYmplY3QiLCBtc2cpOworZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKHYs
IG1zZykgPT4gaXNBKHYsICJvYmplY3QiLCBtc2cpOworZXhwb3J0IGNvbnN0IG5vdFN0cmluZyA9
ICh2LCBtc2cpID0+IGlzTm90QSh2LCAic3RyaW5nIiwgbXNnKTsKK2V4cG9ydCBjb25zdCBpc1N0
cmluZyA9ICh2LCBtc2cpID0+IGlzQSh2LCAic3RyaW5nIiwgbXNnKTsKK2V4cG9ydCBjb25zdCBu
b3ROdW1iZXIgPSAodiwgbXNnKSA9PiBpc05vdEEodiwgIm51bWJlciIsIG1zZyk7CitleHBvcnQg
Y29uc3QgaXNOdW1iZXIgPSAodiwgbXNnKSA9PiBpc0EodiwgIm51bWJlciIsIG1zZyk7CisKK2V4
cG9ydCBjb25zdCBoYXNPYmplY3RQcm9wZXJ0eSA9IChvLCBwLCBtc2cpID0+IHsKKyAgICBpc09i
amVjdChvLCBtc2cpOworICAgIGlzTm90VW5kZWYob1twXSwgbXNnLCBgZXhwZWN0ZWQgb2JqZWN0
IHRvIGhhdmUgcHJvcGVydHkgJHtwfWApOworfTsKKworZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSAo
diwgbXNnKSA9PiB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KHYpKQorICAgICAgICBfZmFpbChg
RXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAke3R5cGVvZih2KX1gLCBtc2cpOworfTsKKworZXhwb3J0
IGNvbnN0IGlzTm90QXJyYXkgPSAodiwgbXNnKSA9PiB7CisgICAgaWYgKEFycmF5LmlzQXJyYXko
dikpCisgICAgICAgIF9mYWlsKGBFeHBlY3RlZCB0byBub3QgYmUgYW4gYXJyYXlgLCBtc2cpOwor
fTsKKworZXhwb3J0IGNvbnN0IHRydXRoeSA9ICh2LCBtc2cpID0+IHsKKyAgICBpZiAoIXYpCisg
ICAgICAgIF9mYWlsKGBFeHBlY3RlZCB0cnV0aHlgLCBtc2cpOworfTsKKworZXhwb3J0IGNvbnN0
IGZhbHN5ID0gKHYsIG1zZykgPT4geworICAgIGlmICh2KQorICAgICAgICBfZmFpbChgRXhwZWN0
ZWQgZmFsc3lgLCBtc2cpOworfTsKKworZXhwb3J0IGNvbnN0IGVxID0gKGxocywgcmhzLCBtc2cp
ID0+IHsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShsaHMpICYmIEFycmF5LmlzQXJyYXkocmhzKSAm
JiAobGhzLmxlbmd0aCA9PT0gcmhzLmxlbmd0aCkpIHsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgIT09IGxocy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGVxKGxoc1tpXSwgcmhzW2ldLCBt
c2cpOworICAgIH0gZWxzZSBpZiAobGhzICE9PSByaHMpCisgICAgICAgIF9mYWlsKGBOb3QgdGhl
IHNhbWU6ICIke2xoc30iIGFuZCAiJHtyaHN9ImAsIG1zZyk7Cit9OworCitleHBvcnQgY29uc3Qg
Z2UgPSAobGhzLCByaHMsIG1zZykgPT4geworICAgIGlzTm90VW5kZWYobGhzKTsKKyAgICBpc05v
dFVuZGVmKHJocyk7CiAgICAgaWYgKCEobGhzID49IHJocykpCi0gICAgICAgIHRocm93IG5ldyBF
cnJvcihgRXhwZWN0ZWQ6ICIke2xoc30iIDwgIiR7cmhzfSJgKTsKKyAgICAgICAgX2ZhaWwoYEV4
cGVjdGVkOiAiJHtsaHN9IiA8ICIke3Joc30iYCwgbXNnKTsKK307CisKK2V4cG9ydCBjb25zdCBs
ZSA9IChsaHMsIHJocywgbXNnKSA9PiB7CisgICAgaXNOb3RVbmRlZihsaHMpOworICAgIGlzTm90
VW5kZWYocmhzKTsKKyAgICBpZiAoIShsaHMgPD0gcmhzKSkKKyAgICAgICAgX2ZhaWwoYEV4cGVj
dGVkOiAiJHtsaHN9IiA+ICIke3Joc30iYCwgbXNnKTsKIH07CiAKIGNvbnN0IF90aHJvd3MgPSAo
ZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewpAQCAtNTEsMTkgKzk5LDE4IEBAIGNv
bnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewogICAgIH0g
Y2F0Y2ggKGUpIHsKICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0eXBlICYmIGUubWVzc2FnZSA9
PT0gbWVzc2FnZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBFeHBlY3RlZCB0byB0aHJvdyBhICR7dHlwZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7bWVzc2Fn
ZX0iLCBnb3QgJHtlLm5hbWV9IHdpdGggbWVzc2FnZSAiJHtlLm1lc3NhZ2V9ImApOworICAgICAg
ICBfZmFpbChgRXhwZWN0ZWQgdG8gdGhyb3cgYSAke3R5cGUubmFtZX0gd2l0aCBtZXNzYWdlICIk
e21lc3NhZ2V9IiwgZ290ICR7ZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7ZS5tZXNzYWdlfSJgKTsK
ICAgICB9Ci0gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byB0aHJvdyBhICR7dHlwZS5u
YW1lfSB3aXRoIG1lc3NhZ2UgIiR7bWVzc2FnZX0iYCk7CisgICAgX2ZhaWwoYEV4cGVjdGVkIHRv
IHRocm93IGEgJHt0eXBlLm5hbWV9IHdpdGggbWVzc2FnZSAiJHttZXNzYWdlfSJgKTsKIH07CiAK
LWNvbnN0IF9pbnN0YW5jZW9mID0gKG9iaiwgdHlwZSkgPT4gb2JqIGluc3RhbmNlb2YgdHlwZTsK
K2NvbnN0IF9pbnN0YW5jZW9mID0gKG9iaiwgdHlwZSwgbXNnKSA9PiB7CisgICAgaWYgKCEob2Jq
IGluc3RhbmNlb2YgdHlwZSkpCisgICAgICAgIF9mYWlsKGBFeHBlY3RlZCBhICR7dHlwZW9mKHR5
cGUpfSwgZ290ICR7dHlwZW9mIG9ian1gKTsKK307CiAKIC8vIFVzZSB1bmRlcnNjb3JlIG5hbWVz
IHRvIGF2b2lkIGNsYXNoaW5nIHdpdGggYnVpbHRpbiBuYW1lcy4KIGV4cG9ydCB7Ci0gICAgX25v
dFVuZGVmIGFzIG5vdFVuZGVmLAotICAgIF9pc1VuZGVmIGFzIGlzVW5kZWYsCi0gICAgX2VxIGFz
IGVxLAotICAgIF9nZSBhcyBnZSwKICAgICBfdGhyb3dzIGFzIHRocm93cywKICAgICBfaW5zdGFu
Y2VvZiBhcyBpbnN0YW5jZW9mLAogfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkv
dGVzdF9Nb2R1bGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzCmluZGV4
IDgyMWRhODQuLjk0ZGIxYTQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9N
b2R1bGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qcwpAQCAtNywz
ICs3LDEzIEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOwogICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKICAgICBhc3NlcnQuaW5zdGFu
Y2VvZihtb2R1bGUsIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiB9KSgpOworCisoZnVuY3Rpb24gTW9k
dWxlV2l0aEltcG9ydHMoKSB7CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQor
ICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJmb28iLCAiYmFyIiwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgIC5FbmQoKTsKKyAg
ICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworfSkoKTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L3Rlc3RfYmFzaWNfYXBpLmpzCmluZGV4IDA1NGVhZWYuLjgwZWNlMjkgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKKysrIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwpAQCAtMjgsNyArMjgsNyBAQCBjb25zdCBjb25zdHJ1Y3Rv
clByb3BlcnRpZXMgPSB7CiB9OwogCiAKLWFzc2VydC5ub3RVbmRlZihXZWJBc3NlbWJseSk7Cith
c3NlcnQuaXNOb3RVbmRlZihXZWJBc3NlbWJseSk7CiBjaGVja093blByb3BlcnR5RGVzY3JpcHRv
cih1dGlsaXRpZXMuZ2xvYmFsLCAiV2ViQXNzZW1ibHkiLCB7IHR5cGVvZnZhbHVlOiAib2JqZWN0
Iiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2Ug
fSk7CiBhc3NlcnQuZXEoU3RyaW5nKFdlYkFzc2VtYmx5KSwgIltvYmplY3QgV2ViQXNzZW1ibHld
Iik7CiBhc3NlcnQuaXNVbmRlZihXZWJBc3NlbWJseS5sZW5ndGgpOwpAQCAtMzcsMTMgKzM3LDEz
IEBAIGFzc2VydC50aHJvd3MoKCkgPT4gV2ViQXNzZW1ibHkoKSwgVHlwZUVycm9yLCBgV2ViQXNz
ZW1ibHkgaXMgbm90IGEgZnVuY3Rpb24uIChJCiBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJB
c3NlbWJseSgpLCBUeXBlRXJyb3IsIGBXZWJBc3NlbWJseSBpcyBub3QgYSBjb25zdHJ1Y3RvciAo
ZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5KCknKWApOwogCiBmb3IgKGNvbnN0IGYgaW4gZnVu
Y3Rpb25Qcm9wZXJ0aWVzKSB7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKFdlYkFzc2VtYmx5W2ZdKTsK
KyAgICBhc3NlcnQuaXNOb3RVbmRlZihXZWJBc3NlbWJseVtmXSk7CiAgICAgYXNzZXJ0LmVxKFdl
YkFzc2VtYmx5W2ZdLm5hbWUsIGYpOwogICAgIGFzc2VydC5lcShXZWJBc3NlbWJseVtmXS5sZW5n
dGgsIGZ1bmN0aW9uUHJvcGVydGllc1tmXS5sZW5ndGgpOwogfQogCiBmb3IgKGNvbnN0IGMgaW4g
Y29uc3RydWN0b3JQcm9wZXJ0aWVzKSB7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKFdlYkFzc2VtYmx5
W2NdKTsKKyAgICBhc3NlcnQuaXNOb3RVbmRlZihXZWJBc3NlbWJseVtjXSk7CiAgICAgYXNzZXJ0
LmVxKFdlYkFzc2VtYmx5W2NdLm5hbWUsIGMpOwogICAgIGFzc2VydC5lcShXZWJBc3NlbWJseVtj
XS5sZW5ndGgsIGNvbnN0cnVjdG9yUHJvcGVydGllc1tjXS5sZW5ndGgpOwogICAgIGNoZWNrT3du
UHJvcGVydHlEZXNjcmlwdG9yKFdlYkFzc2VtYmx5LCBjLCBjb25zdHJ1Y3RvclByb3BlcnRpZXNb
Y10pOwpAQCAtNjYsNyArNjYsNyBAQCBmb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0b3JQcm9wZXJ0
aWVzKSB7CiAgICAgICAgIGFzc2VydC5pbnN0YW5jZW9mKGluc3RhbmNlLCBXZWJBc3NlbWJseS5J
bnN0YW5jZSk7CiAgICAgICAgIGZvciAoY29uc3QgaW52YWxpZCBvZiBpbnZhbGlkSW5zdGFuY2VJ
bXBvcnRzKQogICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlb
Y10obmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgaW52YWxpZCksIFR5
cGVFcnJvciwgYHNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJl
IHVuZGVmaW5lZCBvciBhbiBPYmplY3QgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtjXShu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGVtcHR5TW9kdWxlQXJyYXkpLCBpbnZhbGlkKScpYCk7Ci0g
ICAgICAgIGFzc2VydC5ub3RVbmRlZihpbnN0YW5jZS5leHBvcnRzKTsKKyAgICAgICAgYXNzZXJ0
LmlzTm90VW5kZWYoaW5zdGFuY2UuZXhwb3J0cyk7CiAgICAgICAgIGNoZWNrT3duUHJvcGVydHlE
ZXNjcmlwdG9yKGluc3RhbmNlLCAiZXhwb3J0cyIsIHsgdHlwZW9mdmFsdWU6ICJvYmplY3QiLCB3
cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwog
ICAgICAgICBhc3NlcnQuaXNVbmRlZihpbnN0YW5jZS5leHBvcnRzLl9fcHJvdG9fXyk7CiAgICAg
ICAgIGFzc2VydC5lcShSZWZsZWN0LmlzRXh0ZW5zaWJsZShpbnN0YW5jZS5leHBvcnRzKSwgZmFs
c2UpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09O
LmpzIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJKU09OLmpzCmluZGV4IDA5
MzQyMzEuLmVlYzNiZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9C
dWlsZGVySlNPTi5qcworKysgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpT
T04uanMKQEAgLTIsMTcgKzIsMTcgQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2Vy
dC5qcyc7CiBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKIAogY29uc3QgYXNz
ZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewotICAgIGxldCBmID0gKG5ldyBCdWls
ZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpOworICAgIGxldCBmID0gKG5ldyBCdWlsZGVyKCkpLlR5
cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKTsKICAgICBhc3NlcnQudGhyb3dzKG9wRm4sIEVy
cm9yLCBtZXNzYWdlLCBmKTsKIH07CiAKIChmdW5jdGlvbiBFbXB0eU1vZHVsZSgpIHsKICAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24o
KSk7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGoucHJlYW1ibGUpOwotICAgIGFzc2VydC5ub3RVbmRl
ZihqLnByZWFtYmxlWyJtYWdpYyBudW1iZXIiXSk7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGoucHJl
YW1ibGUudmVyc2lvbik7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGouc2VjdGlvbik7CisgICAgYXNz
ZXJ0LmlzTm90VW5kZWYoai5wcmVhbWJsZSk7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoai5wcmVh
bWJsZVsibWFnaWMgbnVtYmVyIl0pOworICAgIGFzc2VydC5pc05vdFVuZGVmKGoucHJlYW1ibGUu
dmVyc2lvbik7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoai5zZWN0aW9uKTsKICAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uLmxlbmd0aCwgMCk7CiB9KSgpOwogCkBAIC0yMCwxNCArMjAsMTQgQEAgY29u
c3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgIGNvbnN0IGIgPSAo
bmV3IEJ1aWxkZXIoKSkuc2V0UHJlYW1ibGUoeyAibWFnaWMgbnVtYmVyIjogMTMzNyB9KTsKICAg
ICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CiAgICAgYXNzZXJ0LmVxKGoucHJlYW1i
bGVbIm1hZ2ljIG51bWJlciJdLCAxMzM3KTsKLSAgICBhc3NlcnQubm90VW5kZWYoai5wcmVhbWJs
ZS52ZXJzaW9uKTsKKyAgICBhc3NlcnQuaXNOb3RVbmRlZihqLnByZWFtYmxlLnZlcnNpb24pOwog
fSkoKTsKIAogKGZ1bmN0aW9uIEN1c3RvbVZlcnNpb24oKSB7CiAgICAgY29uc3QgYiA9IChuZXcg
QnVpbGRlcigpKS5zZXRQcmVhbWJsZSh7ICJ2ZXJzaW9uIjogMTMzNyB9KTsKICAgICBjb25zdCBq
ID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CiAgICAgYXNzZXJ0LmVxKGoucHJlYW1ibGVbInZlcnNp
b24iXSwgMTMzNyk7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGoucHJlYW1ibGUudmVyc2lvbik7Cisg
ICAgYXNzZXJ0LmlzTm90VW5kZWYoai5wcmVhbWJsZS52ZXJzaW9uKTsKIH0pKCk7CiAKIChmdW5j
dGlvbiBDdXN0b21TZWN0aW9uKCkgewpAQCAtNTcsMTUgKzU3LDggQEAgY29uc3QgYXNzZXJ0T3BU
aHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogfSkoKTsKIAogKGZ1bmN0aW9uIEN1c3RvbVNl
Y3Rpb25JbnZhbGlkQnl0ZSgpIHsKLSAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBs
ZXQgdSA9IGIuVW5rbm93bigiY3VzdG9tIHNlY3Rpb24iKTsKLSAgICB0cnkgewotICAgICAgICB1
LkJ5dGUoMHhGRiArIDEpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUgaW5zdGFu
Y2VvZiBSYW5nZUVycm9yKSB7IHJldHVybjsgfQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4
cGVjdGVkIGEgUmFuZ2VFcnJvciwgZ290ICR7ZX1gKTsKLSAgICB9Ci0gICAgdGhyb3cgbmV3IEVy
cm9yKGBFeHBlY3RlZCB0byB0aHJvdyBhIFJhbmdlRXJyb3JgKTsKKyAgICBjb25zdCB1ID0gKG5l
dyBCdWlsZGVyKCkpLlVua25vd24oImN1c3RvbSBzZWN0aW9uIik7CisgICAgYXNzZXJ0LnRocm93
cygoKSA9PiB1LkJ5dGUoMHhGRiArIDEpLCBFcnJvciwgYE5vdCB0aGUgc2FtZTogIjAiIGFuZCAi
MjU2IjogVW5rbm93biBzZWN0aW9uIGV4cGVjdGVkIGJ5dGUsIGdvdDogIjI1NiJgKTsKIH0pKCk7
CiAKIChmdW5jdGlvbiBUd29DdXN0b21TZWN0aW9ucygpIHsKQEAgLTg2LDYgKzc5LDE2OCBAQCBj
b25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9PiB7CiAgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLCAweDExKTsKIH0pKCk7CiAKKyhmdW5jdGlvbiBTZWN0aW9u
c1dpdGhTYW1lQ3VzdG9tTmFtZSgpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlVu
a25vd24oImZvbyIpLkVuZCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYi5Vbmtub3duKCJm
b28iKSwgRXJyb3IsIGBFeHBlY3RlZCBmYWxzeTogQ2Fubm90IGhhdmUgdHdvIHNlY3Rpb25zIHdp
dGggdGhlIHNhbWUgbmFtZSAiZm9vIiBhbmQgSUQgMGApOworfSkoKTsKKworKGZ1bmN0aW9uIEVt
cHR5VHlwZVNlY3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCku
RW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb24ubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUs
ICJUeXBlIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7Cit9
KSgpOworCisoZnVuY3Rpb24gVHdvVHlwZVNlY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSAobmV3
IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYi5UeXBl
KCksIEVycm9yLCBgRXhwZWN0ZWQgZmFsc3k6IENhbm5vdCBoYXZlIHR3byBzZWN0aW9ucyB3aXRo
IHRoZSBzYW1lIG5hbWUgIlR5cGUiIGFuZCBJRCAxYCk7Cit9KSgpOworCisoZnVuY3Rpb24gU2lt
cGxlVHlwZVNlY3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkK
KyAgICAgICAgICAgIC5GdW5jKFtdKQorICAgICAgICAgICAgLkZ1bmMoW10sICJ2b2lkIikKKyAg
ICAgICAgICAgIC5GdW5jKFtdLCAiaTMyIikKKyAgICAgICAgICAgIC5GdW5jKFtdLCAiaTY0IikK
KyAgICAgICAgICAgIC5GdW5jKFtdLCAiZjMyIikKKyAgICAgICAgICAgIC5GdW5jKFtdLCAiZjY0
IikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0Il0pCisgICAg
ICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgNyk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFd
LnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsxXS5yZXQsICJ2
b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzJdLnBhcmFtcywgW10pOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5yZXQsICJpMzIiKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbM10ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzNdLnJldCwgImk2NCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YVs0XS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
NF0ucmV0LCAiZjMyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzVdLnBhcmFt
cywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs1XS5yZXQsICJmNjQiKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNl0ucGFyYW1zLCBbImkzMiIsICJpNjQi
LCAiZjMyIiwgImY2NCJdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNl0ucmV0
LCAidm9pZCIpOworfSkoKTsKKworKGZ1bmN0aW9uIEVtcHR5SW1wb3J0U2VjdGlvbigpIHsKKyAg
ICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkltcG9ydCgpLkVuZCgpOworICAgIGNvbnN0IGog
PSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwg
MSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5uYW1lLCAiSW1wb3J0Iik7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7Cit9KSgpOworCisoZnVuY3Rpb24g
SW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIo
KSkuSW1wb3J0KCkuRW5kKCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiLlR5cGUoKSwgRXJy
b3IsIGBFeHBlY3RlZDogIjIiID4gIjEiOiBCYWQgc2VjdGlvbiBvcmRlcmluZzogIkltcG9ydCIg
Y2Fubm90IHByZWNlZGUgIlR5cGUiYCk7Cit9KSgpOworCisoZnVuY3Rpb24gSW1wb3J0RnVuY3Rp
b25XaXRob3V0VHlwZVNlY3Rpb24oKSB7CisgICAgY29uc3QgaSA9IChuZXcgQnVpbGRlcigpKS5J
bXBvcnQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGkuRnVuY3Rpb24oImZvbyIsICJiYXIi
LCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBDYW4ndCB1c2UgdHlwZSAwIGlm
IGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKK30pKCk7CisKKyhmdW5jdGlvbiBJbXBv
cnRGdW5jdGlvbldpdGhJbnZhbGlkVHlwZSgpIHsKKyAgICBjb25zdCBpID0gKG5ldyBCdWlsZGVy
KCkpLlR5cGUoKS5FbmQoKS5JbXBvcnQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGkuRnVu
Y3Rpb24oImZvbyIsICJiYXIiLCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBU
eXBlIDAgZG9lc24ndCBleGlzdCBpbiB0eXBlIHNlY3Rpb25gKTsKK30pKCk7CisKKyhmdW5jdGlv
biBJbXBvcnRGdW5jdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpCisgICAg
ICAgIC5UeXBlKCkuRnVuYyhbXSkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImZvbyIsICJiYXIiLCAwKQorICAgICAgICAuRW5kKCk7CisgICAgY29uc3Qg
aiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5tb2R1bGUs
ICJmb28iKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uZmllbGQsICJiYXIi
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlwZSwgMCk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmtpbmQsICJGdW5jdGlvbiIpOworfSkoKTsKKwor
KGZ1bmN0aW9uIEltcG9ydEZ1bmN0aW9uc1dpdGhFeGlzdGluZ1R5cGVzKCkgeworICAgIGNvbnN0
IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgLkZ1bmMo
W10pCisgICAgICAgICAgICAuRnVuYyhbXSwgImkzMiIpCisgICAgICAgICAgICAuRnVuYyhbImk2
NCIsICJpMzIiXSkKKyAgICAgICAgICAgIC5GdW5jKFsiaTY0IiwgImk2NCJdKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJi
YXIiLCB7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJheiIs
IHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
LCAiYm9vIiwgeyBwYXJhbXM6IFsiaTY0IiwgImk2NCJdIH0pCisgICAgICAgIC5FbmQoKTsKKyAg
ICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhLmxlbmd0aCwgNCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxl
bmd0aCwgMyk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnR5cGUsIDApOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsxXS50eXBlLCAxKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0udHlwZSwgMyk7Cit9KSgpOworCisoZnVuY3Rpb24gSW1w
b3J0RnVuY3Rpb25XaXRoTmV3VHlwZSgpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkp
CisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiZm9vIiwgImJheiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCAiYm9vIiwgeyBwYXJhbXM6IFsiaTY0IiwgImk2NCJdIH0pCisg
ICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMyk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzBdLnJldCwgInZvaWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzFdLnJldCwgImkzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsxXS5wYXJh
bXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMl0ucmV0LCAidm9pZCIp
OworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5wYXJhbXMsIFsiaTY0IiwgImk2
NCJdKTsKK30pKCk7CisKKyhmdW5jdGlvbiBFbXB0eUV4cG9ydFNlY3Rpb24oKSB7CisgICAgY29u
c3QgYiA9IChuZXcgQnVpbGRlcigpKS5FeHBvcnQoKS5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNP
Ti5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDEpOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkV4cG9ydCIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDApOworfSkoKTsKKworKGZ1bmN0aW9uIEV4cG9y
dEZ1bmN0aW9uV2l0aG91dFR5cGVTZWN0aW9uKCkgeworICAgIGNvbnN0IGUgPSAobmV3IEJ1aWxk
ZXIoKSkuRXhwb3J0KCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBlLkZ1bmN0aW9uKCJmb28i
LCAwLCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBDYW4ndCB1c2UgdHlwZSAw
IGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKK30pKCk7CisKKyhmdW5jdGlvbiBF
eHBvcnRGdW5jdGlvbldpdGhJbnZhbGlkVHlwZSgpIHsKKyAgICBjb25zdCBlID0gKG5ldyBCdWls
ZGVyKCkpLlR5cGUoKS5FbmQoKS5FeHBvcnQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGUu
RnVuY3Rpb24oImZvbyIsIDAsIDApLCBFcnJvciwgYFNob3VsZG4ndCBiZSB1bmRlZmluZWQ6IFR5
cGUgMCBkb2Vzbid0IGV4aXN0IGluIHR5cGUgc2VjdGlvbmApOworfSkoKTsKKworKGZ1bmN0aW9u
IEV4cG9ydEFuSW1wb3J0KCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAg
ICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImZvbyIsICJiYXIi
LCB7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJFeHBv
cnRBbkltcG9ydCIsIHsgbW9kdWxlOiAiZm9vIiwgZmllbGQ6ICJiYXIiIH0pLkVuZCgpOworICAg
IGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzJdLm5hbWUsICJFeHBvcnQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGEubGVu
Z3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGFbMF0uZmllbGQsICJFeHBv
cnRBbkltcG9ydCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS50eXBlLCAw
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGFbMF0uaW5kZXgsIDApOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS5raW5kLCAiRnVuY3Rpb24iKTsKK30pKCk7CisK
KyhmdW5jdGlvbiBFeHBvcnRNaXNtYXRjaGVkSW1wb3J0KCkgeworICAgIGNvbnN0IGUgPSAobmV3
IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVu
Y3Rpb24oImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZS5GdW5jdGlvbigiZm9vIiwgMCwgeyBwYXJh
bXM6IFsiaTMyIl0gfSksIEVycm9yLCBgTm90IHRoZSBzYW1lOiAiMSIgYW5kICIwIjogUmUtZXhw
b3J0aW5nIGltcG9ydCAiYmFyIiBhcyAiZm9vIiBoYXMgbWlzbWF0Y2hpbmcgdHlwZWApOworfSko
KTsKKwogKGZ1bmN0aW9uIEVtcHR5Q29kZVNlY3Rpb24oKSB7CiAgICAgY29uc3QgYiA9IG5ldyBC
dWlsZGVyKCk7CiAgICAgYi5Db2RlKCk7CkBAIC05NywxOTkgKzI1MiwyNTQgQEAgY29uc3QgYXNz
ZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogCiAoZnVuY3Rpb24gQ29kZVNlY3Rp
b25XaXRoRW1wdHlGdW5jdGlvbigpIHsKICAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAg
ICBiLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24oKTsKKyAgICBiLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKTsKICAgICBjb25zdCBqID0gSlNP
Ti5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDEpOwot
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkNvZGUiKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5uYW1lLCAi
VHlwZSIpOwogICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDEpOwotICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbWV0ZXJDb3VudCwgMCk7Ci0gICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fscy5sZW5ndGgsIDApOwotICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMCk7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5uYW1lLCAiQ29kZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgs
IDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5uYW1lLCB1bmRlZmluZWQp
OworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ucGFyYW1ldGVyQ291bnQsIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDApOwogfSkoKTsKIAogKGZ1bmN0
aW9uIENvZGVTZWN0aW9uV2l0aEVtcHR5RnVuY3Rpb25XaXRoUGFyYW1ldGVycygpIHsKICAgICBj
b25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24o
WyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiXSk7CisgICAgYi5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiIsICJpNjQi
LCAiZjMyIiwgImY2NCJdIH0pOwogICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5uYW1lLCAiQ29kZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVuZ3RoLCAy
KTsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAxKTsKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1ldGVyQ291bnQsIDQpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHNbMF0sICJpMzIiKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzFdLCAiaTY0Iik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fsc1syXSwgImYzMiIpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHNbM10sICJmNjQiKTsKLSAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMF0uZGF0YVswXS5wYXJhbXMsIFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0Il0pOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsw
XS5wYXJhbWV0ZXJDb3VudCwgNCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmxvY2Fsc1swXSwgImkzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5s
b2NhbHNbMV0sICJpNjQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9j
YWxzWzJdLCAiZjMyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmxvY2Fs
c1szXSwgImY2NCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxl
bmd0aCwgMCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gSW52YWxpZEZ1bmN0aW9uUGFyYW1ldGVycygp
IHsKLSAgICBmb3IgKGxldCBpbnZhbGlkIGluIFsiIiwgInZvaWQiLCAiYm9vbCIsICJhbnkiLCAi
c3RydWN0Il0pIHsKKyAgICBmb3IgKGxldCBpbnZhbGlkIG9mIFsiIiwgInZvaWQiLCAiYm9vbCIs
ICJhbnkiLCAic3RydWN0IiwgMCwgMy4xNCwgdW5kZWZpbmVkLCBbXSwge31dKSB7CiAgICAgICAg
IGNvbnN0IGMgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpOwotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgYy5GdW5jdGlvbihbaW52YWxpZF0pOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7IGNvbnRpbnVlOyB9Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIEVycm9yLCBnb3QgJHtlfWApOwotICAgICAg
ICB9Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdG8gdGhyb3cgYW4gRXJyb3Ig
Zm9yICR7aW52YWxpZH1gKTsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBjLkZ1bmN0aW9u
KHsgcGFyYW1zOiBbaW52YWxpZF0gfSksIEVycm9yLCBgRXhwZWN0ZWQgdHJ1dGh5OiBUeXBlIHBh
cmFtZXRlciAke2ludmFsaWR9IG5lZWRzIGEgdmFsaWQgdmFsdWUgdHlwZWApOwogICAgIH0KIH0p
KCk7CiAKIChmdW5jdGlvbiBTaW1wbGVGdW5jdGlvbigpIHsKICAgICBjb25zdCBiID0gbmV3IEJ1
aWxkZXIoKTsKLSAgICBiLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24oKQotICAgICAgICAgICAg
Lk5vcCgpCi0gICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgLkVuZCgpOworICAgIGIuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpCisgICAgICAg
ICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAuRW5k
KCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZS5sZW5ndGgsIDMpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsw
XS5jb2RlWzBdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVsxXS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5sb2NhbHMu
bGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5n
dGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUs
ICJub3AiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5uYW1l
LCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMl0ubmFt
ZSwgImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9uIFR3b1NpbXBsZUZ1bmN0aW9ucygpIHsKICAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUoKQotICAgICAgICAuRnVuY3Rp
b24oKQotICAgICAgICAgICAgLk5vcCgpCi0gICAgICAgICAgICAuTm9wKCkKKyAgICBiLlR5cGUo
KS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKQorICAgICAg
ICAgICAgICAgIC5Ob3AoKQorICAgICAgICAgICAgICAgIC5Ob3AoKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQor
ICAgICAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwgMCk7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMV0ubG9jYWxzLmxlbmd0aCwgMCk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzFdLmNvZGUubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMV0uY29kZVswXS5uYW1lLCAicmV0dXJuIik7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzFdLmNvZGVbMV0ubmFtZSwgImVuZCIpOworfSkoKTsKKworKGZ1bmN0
aW9uIE5hbWVkRnVuY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSBuZXcgQnVpbGRlcigpLlR5cGUo
KS5FbmQoKS5Db2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKCJoZWxsbyIpLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigid29ybGQiLCB7IHBhcmFtczogWyJpMzIiXSB9KS5FbmQoKQorICAgIC5FbmQo
KTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLm5hbWUsICJoZWxsbyIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5wYXJhbWV0ZXJDb3VudCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzFdLm5hbWUsICJ3b3JsZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVsxXS5wYXJhbWV0ZXJDb3VudCwgMSk7Cit9KSgpOworCisoZnVuY3Rpb24gRXhwb3J0U2lt
cGxlRnVuY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAg
LlR5cGUoKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Zm9vIiwgMCwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuRnVuY3Rpb24oImJhciIpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImJldHRlck5hbWVGb3JCYXIiLCAiYmFyIikKICAgICAgICAg
LkVuZCgpCi0gICAgICAgIC5GdW5jdGlvbigpCi0gICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAg
ICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbXSB9KS5Ob3AoKS5F
bmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiLCB7IHBhcmFtczogW10gfSkuTm9wKCku
RW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigp
KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAyKTsKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwgMCk7Ci0gICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKLSAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ubG9jYWxzLmxlbmd0aCwgMCk7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzFdLmNvZGUubGVuZ3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMV0uY29kZVswXS5uYW1lLCAicmV0dXJuIik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzFdLmNvZGVbMV0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgs
IDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5maWVsZCwgImZvbyIpOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uaW5kZXgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5raW5kLCAiRnVuY3Rpb24iKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMV0uZmllbGQsICJiYXIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMV0udHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLmluZGV4
LCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0ua2luZCwgIkZ1bmN0aW9u
Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLmZpZWxkLCAiYmV0dGVyTmFt
ZUZvckJhciIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsyXS50eXBlLCAwKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0uaW5kZXgsIDEpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVsyXS5raW5kLCAiRnVuY3Rpb24iKTsKK30pKCk7CisKKyhm
dW5jdGlvbiBFeHBvcnRVbmRlZmluZWRGdW5jdGlvbigpIHsKKyAgICBjb25zdCBjID0gKG5ldyBC
dWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5FeHBvcnQoKS5GdW5jdGlvbigiZm9vIikuRW5kKCkuQ29k
ZSgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYy5FbmQoKSwgRXJyb3IsIGBTaG91bGQgYmUg
bnVtYmVyLCBnb3QgdW5kZWZpbmVkOiBFeHBvcnQgc2VjdGlvbiBjb250YWlucyB1bmRlZmluZWQg
ZnVuY3Rpb24gImZvbyJgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBUd29CdWlsZGVyc0F0VGhlU2Ft
ZVRpbWUoKSB7CiAgICAgY29uc3QgYiA9IFtuZXcgQnVpbGRlcigpLCBuZXcgQnVpbGRlcigpXTsK
LSAgICBjb25zdCBmID0gYi5tYXAoYnVpbGRlciA9PiBidWlsZGVyLkNvZGUoKS5GdW5jdGlvbigp
KTsKKyAgICBjb25zdCBmID0gYi5tYXAoYnVpbGRlciA9PiBidWlsZGVyLlR5cGUoKS5FbmQoKS5D
b2RlKCkuRnVuY3Rpb24oKSk7CiAgICAgZlswXS5Ob3AoKTsKICAgICBmWzFdLlJldHVybigpLkVu
ZCgpLkVuZCgpOwogICAgIGZbMF0uTm9wKCkuRW5kKCkuRW5kKCk7CiAgICAgY29uc3QgaiA9IGIu
bWFwKGJ1aWxkZXIgPT4gSlNPTi5wYXJzZShidWlsZGVyLmpzb24oKSkpOwotICAgIGFzc2VydC5l
cShqWzBdLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0LmVx
KGpbMF0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2Vy
dC5lcShqWzBdLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJub3AiKTsKLSAgICBh
c3NlcnQuZXEoalswXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7Ci0g
ICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKLSAg
ICBhc3NlcnQuZXEoalsxXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAicmV0dXJu
Iik7Ci0gICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwg
ImVuZCIpOworICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0
aCwgMyk7CisgICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFt
ZSwgIm5vcCIpOworICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFd
Lm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZVsyXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGUubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoalsxXS5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZVswXS5uYW1lLCAicmV0dXJuIik7CisgICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMV0ubmFtZSwgImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9uIENoZWNrZWRP
cGNvZGVBcmd1bWVudHNUb29NYW55KCkgewotICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5Ob3Ao
InVoLW9oISIpLCBgIm5vcCIgZXhwZWN0cyAwIGltbWVkaWF0ZXMsIGdvdCAxYCk7CisgICAgYXNz
ZXJ0T3BUaHJvd3MoZiA9PiBmLk5vcCgidWgtb2ghIiksIGBOb3QgdGhlIHNhbWU6ICIxIiBhbmQg
IjAiOiAibm9wIiBleHBlY3RzIDAgaW1tZWRpYXRlcywgZ290IDFgKTsKIH0pKCk7CiAKIChmdW5j
dGlvbiBVbmNoZWNrZWRPcGNvZGVBcmd1bWVudHNUb29NYW55KCkgewotICAgIChuZXcgQnVpbGRl
cigpKS5zZXRDaGVja2VkKGZhbHNlKS5Db2RlKCkuRnVuY3Rpb24oKS5Ob3AoIlRoaXMgaXMgZmlu
ZS4iLCAiSSdtIE9LIHdpdGggdGhlIGV2ZW50cyB0aGF0IGFyZSB1bmZvbGRpbmcgY3VycmVudGx5
LiIpOworICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNlKS5UeXBlKCkuRW5kKCku
Q29kZSgpLkZ1bmN0aW9uKCkuTm9wKCJUaGlzIGlzIGZpbmUuIiwgIkknbSBPSyB3aXRoIHRoZSBl
dmVudHMgdGhhdCBhcmUgdW5mb2xkaW5nIGN1cnJlbnRseS4iKTsKIH0pKCk7CiAKIChmdW5jdGlv
biBDaGVja2VkT3Bjb2RlQXJndW1lbnRzTm90RW5vdWdoKCkgewotICAgIGFzc2VydE9wVGhyb3dz
KGYgPT4gZi5JMzJDb25zdCgpLCBgImkzMi5jb25zdCIgZXhwZWN0cyAxIGltbWVkaWF0ZXMsIGdv
dCAwYCk7CisgICAgYXNzZXJ0T3BUaHJvd3MoZiA9PiBmLkkzMkNvbnN0KCksIGBOb3QgdGhlIHNh
bWU6ICIwIiBhbmQgIjEiOiAiaTMyLmNvbnN0IiBleHBlY3RzIDEgaW1tZWRpYXRlcywgZ290IDBg
KTsKIH0pKCk7CiAKIChmdW5jdGlvbiBVbmNoZWNrZWRPcGNvZGVBcmd1bWVudHNOb3RFbm91Z2go
KSB7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLnNldENoZWNrZWQoZmFsc2UpLkNvZGUoKS5GdW5jdGlv
bigpLkkzMkNvbnN0KCk7CisgICAgKG5ldyBCdWlsZGVyKCkpLnNldENoZWNrZWQoZmFsc2UpLlR5
cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5JMzJDb25zdCgpOwogfSkoKTsKIAogKGZ1bmN0
aW9uIENhbGxOb0FyZ3VtZW50cygpIHsKLSAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNv
ZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuRW5kKCkuRW5kKCk7CisgICAgY29uc3QgYiA9IChuZXcg
QnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuQ2FsbCgwKS5FbmQoKS5F
bmQoKTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiY2FsbCIpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOwotICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXMubGVuZ3RoLCAx
KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVz
WzBdLCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1l
LCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3Ro
LCAyKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAi
Y2FsbCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmFyZ3Vt
ZW50cy5sZW5ndGgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2Rl
WzBdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiZW5kIik7CiB9KSgpOwogCiAoZnVuY3Rpb24gQ2Fs
bEludmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbLTEsIDB4MTAwMDAwMDAwLCAiMCIsIHt9
LCBJbmZpbml0eSwgLUluZmluaXR5LCBOYU4sIC1OYU4sIG51bGxdKQotICAgICAgICBhc3NlcnRP
cFRocm93cyhmID0+IGYuQ2FsbChjKSwgYEludmFsaWQgdmFsdWUgb24gY2FsbDogZ290ICIke2N9
IiwgZXhwZWN0ZWQgaTMyYCk7CisgICAgICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5DYWxsKGMp
LCBgRXhwZWN0ZWQgdHJ1dGh5OiBJbnZhbGlkIHZhbHVlIG9uIGNhbGw6IGdvdCAiJHtjfSIsIGV4
cGVjdGVkIGkzMmApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEkzMkNvbnN0VmFsaWQoKSB7CiAgICAg
Zm9yIChsZXQgYyBvZiBbMCwgMSwgMiwgNDIsIDEzMzcsIDB4RkYsIDB4RkZGRiwgMHg3RkZGRkZG
RiwgMHhGRkZGRkZGRSwgMHhGRkZGRkZGRl0pIHsKLSAgICAgICAgY29uc3QgYiA9IChuZXcgQnVp
bGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5JMzJDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQo
KTsKKyAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgp
LkZ1bmN0aW9uKCkuSTMyQ29uc3QoYykuUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAgICAgIGNv
bnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIpOwotICAgICAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAg
ICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5s
ZW5ndGgsIDEpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsw
XS5pbW1lZGlhdGVzWzBdLCBjKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRh
WzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICAgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEp
OworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlh
dGVzWzBdLCBjKTsKICAgICB9CiB9KSgpOwogCiAoZnVuY3Rpb24gSTMyQ29uc3RJbnZhbGlkKCkg
ewogICAgIGZvciAobGV0IGMgb2YgWy0xLCAweDEwMDAwMDAwMCwgMC4xLCAtMC4xLCAiMCIsIHt9
LCBJbmZpbml0eSwgbnVsbF0pCi0gICAgICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5JMzJDb25z
dChjKSwgYEludmFsaWQgdmFsdWUgb24gaTMyLmNvbnN0OiBnb3QgIiR7Y30iLCBleHBlY3RlZCBp
MzJgKTsKKyAgICAgICAgYXNzZXJ0T3BUaHJvd3MoZiA9PiBmLkkzMkNvbnN0KGMpLCBgRXhwZWN0
ZWQgdHJ1dGh5OiBJbnZhbGlkIHZhbHVlIG9uIGkzMi5jb25zdDogZ290ICIke2N9IiwgZXhwZWN0
ZWQgaTMyYCk7CiB9KSgpOwogCiAvLyBGSVhNRTogdGVzdCBpNjQuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjAKIAogKGZ1bmN0aW9uIEYzMkNvbnN0VmFsaWQo
KSB7CiAgICAgZm9yIChsZXQgYyBvZiBbMCwgLTAuLCAwLjIsIE1hdGguUEksIDB4MTAwMDAwMDAw
XSkgewotICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigp
LkYzMkNvbnN0KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOworICAgICAgICBjb25zdCBiID0gKG5l
dyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5GMzJDb25zdChjKS5S
ZXR1cm4oKS5FbmQoKS5FbmQoKTsKICAgICAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29u
KCkpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1l
LCAiZjMyLmNvbnN0Iik7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5j
b2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0gICAgICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOworICAg
ICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiZjMyLmNv
bnN0Iik7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmFy
Z3VtZW50cy5sZW5ndGgsIDApOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIGMpOwogICAgIH0KIH0pKCk7
CiAKIChmdW5jdGlvbiBGMzJDb25zdEludmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbIjAi
LCB7fSwgSW5maW5pdHksIC1JbmZpbml0eSwgTmFOLCAtTmFOLCBudWxsXSkKLSAgICAgICAgYXNz
ZXJ0T3BUaHJvd3MoZiA9PiBmLkYzMkNvbnN0KGMpLCBgSW52YWxpZCB2YWx1ZSBvbiBmMzIuY29u
c3Q6IGdvdCAiJHtjfSIsIGV4cGVjdGVkIGYzMmApOworICAgICAgICBhc3NlcnRPcFRocm93cyhm
ID0+IGYuRjMyQ29uc3QoYyksIGBFeHBlY3RlZCB0cnV0aHk6IEludmFsaWQgdmFsdWUgb24gZjMy
LmNvbnN0OiBnb3QgIiR7Y30iLCBleHBlY3RlZCBmMzJgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBG
NjRDb25zdFZhbGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWzAsIC0wLiwgMC4yLCBNYXRoLlBJ
LCAweDEwMDAwMDAwMF0pIHsKLSAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2Rl
KCkuRnVuY3Rpb24oKS5GNjRDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKKyAgICAgICAg
Y29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCku
RjY0Q29uc3QoYykuUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAgICAgIGNvbnN0IGogPSBKU09O
LnBhcnNlKGIuanNvbigpKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBd
LmNvZGVbMF0ubmFtZSwgImY2NC5jb25zdCIpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAgICAgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwot
ICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVz
WzBdLCBjKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0u
bmFtZSwgImY2NC5jb25zdCIpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOworICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsK
ICAgICB9CiB9KSgpOwogCiAoZnVuY3Rpb24gRjY0Q29uc3RJbnZhbGlkKCkgewogICAgIGZvciAo
bGV0IGMgb2YgWyIwIiwge30sIEluZmluaXR5LCAtSW5maW5pdHksIE5hTiwgLU5hTiwgbnVsbF0p
Ci0gICAgICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5GNjRDb25zdChjKSwgYEludmFsaWQgdmFs
dWUgb24gZjY0LmNvbnN0OiBnb3QgIiR7Y30iLCBleHBlY3RlZCBmNjRgKTsKKyAgICAgICAgYXNz
ZXJ0T3BUaHJvd3MoZiA9PiBmLkY2NENvbnN0KGMpLCBgRXhwZWN0ZWQgdHJ1dGh5OiBJbnZhbGlk
IHZhbHVlIG9uIGY2NC5jb25zdDogZ290ICIke2N9IiwgZXhwZWN0ZWQgZjY0YCk7CiB9KSgpOwog
CiAoZnVuY3Rpb24gQ2FsbE9uZUZyb21TdGFjaygpIHsKLSAgICBjb25zdCBiID0gKG5ldyBCdWls
ZGVyKCkpLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24oWyJpMzIiXSkKKyAgICBjb25zdCBiID0g
KG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKHsg
cGFyYW1zOiBbImkzMiJdIH0pCiAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpCiAgICAgICAgICAg
ICAuQ2FsbCgwKQogICAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpT
T04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5j
b2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVb
MF0ubmFtZSwgImkzMi5jb25zdCIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsw
XS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIDQyKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBd
LmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiY2FsbCIpOwotICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5hcmd1bWVudHMubGVuZ3RoLCAxKTsgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKLSAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5pbW1lZGlhdGVzWzBdLCAwKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiaTMyLmNvbnN0
Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRl
c1swXSwgNDIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLm5h
bWUsICJjYWxsIik7CisgICAgLy8gRklYTUU6IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsw
XS5jb2RlWzFdLmFyZ3VtZW50cy5sZW5ndGgsIDEpOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzMjY3CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbMV0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVswXS5jb2RlWzFdLmltbWVkaWF0ZXNbMF0sIDApOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKIH0pKCk7CiAKIC8vIEZJWE1F
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcgYWxsIG9mIHRo
ZXNlOgpAQCAtMzAxLDIyICs1MTEsMjIgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwg
bWVzc2FnZSkgPT4gewogLy8gIHRlc3QgZnVuY3Rpb24gbmFtZXMgKGJvdGggc2V0dGluZyBhbmQg
Y2FsbGluZyB0aGVtKS4KIAogKGZ1bmN0aW9uIENhbGxNYW55RnJvbVN0YWNrKCkgewotICAgIGNv
bnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpCi0gICAgICAgICAgLkZ1bmN0aW9uKFsiaTMy
IiwgImkzMiIsICJpMzIiLCAiaTMyIl0pCisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5U
eXBlKCkuRW5kKCkuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbih7IHBhcmFtczogWyJpMzIiLCAi
aTMyIiwgImkzMiIsICJpMzIiXSB9KQogICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpLkkzMkNv
bnN0KDEzMzcpLkkzMkNvbnN0KDB4QkVFRikuSTMyQ29uc3QoMHhGRkZGKQogICAgICAgICAgICAg
ICAuQ2FsbCgwKQogICAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpT
T04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5j
b2RlLmxlbmd0aCwgNik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVb
NF0ubmFtZSwgImNhbGwiKTsKLSAgICAvLyBGSVhNRTogYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhWzBdLmNvZGVbNF0uYXJndW1lbnRzLmxlbmd0aCwgNCk7IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVs0XS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGVbNF0uaW1tZWRpYXRlc1swXSwgMCk7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCA2KTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0uY29kZVs0XS5uYW1lLCAiY2FsbCIpOworICAgIC8vIEZJWE1FOiBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVs0XS5hcmd1bWVudHMubGVuZ3RoLCA0
KTsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzRdLmltbWVkaWF0ZXMubGVuZ3RoLCAx
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVs0XS5pbW1lZGlhdGVz
WzBdLCAwKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNvZGVBZGQoKSB7Ci0gICAgY29uc3QgYiA9
IChuZXcgQnVpbGRlcigpKS5Db2RlKCkKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5
cGUoKS5FbmQoKS5Db2RlKCkKICAgICAgICAgICAuRnVuY3Rpb24oKQogICAgICAgICAgICAgICAu
STMyQ29uc3QoNDIpLkkzMkNvbnN0KDEzMzcpCiAgICAgICAgICAgICAgIC5JMzJBZGQoKQpAQCAt
MzI0LDM5ICs1MzQsMzkgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkg
PT4gewogICAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFy
c2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxl
bmd0aCwgNSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0ubmFt
ZSwgImkzMi5hZGQiKTsKLSAgICAvLyBGSVhNRTogYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzBdLmNvZGVbMl0uYXJndW1lbnRzLmxlbmd0aCwgMik7IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVszXS5uYW1lLCAicmV0dXJuIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGUubGVuZ3RoLCA1KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZVsyXS5uYW1lLCAiaTMyLmFkZCIpOworICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5hcmd1bWVudHMubGVuZ3RoLCAyKTsgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJyZXR1cm4iKTsKICAgICAvLyBGSVhNRSBj
aGVjayByZXR1cm4uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMy
NjcKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNvZGVVbnJlYWNoYWJsZSgpIHsKLSAgICBjb25zdCBi
ID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuRW5kKCku
RW5kKCk7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgp
LkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5FbmQoKS5FbmQoKTsKICAgICBjb25zdCBqID0gSlNP
Ti5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNv
ZGUubGVuZ3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsw
XS5uYW1lLCAidW5yZWFjaGFibGUiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5j
b2RlWzBdLm5hbWUsICJ1bnJlYWNoYWJsZSIpOwogfSkoKTsKIAogKGZ1bmN0aW9uIE9wY29kZVVu
cmVhY2hhYmxlQ29tYmluYXRpb25zKCkgewotICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVu
Y3Rpb24oKS5Ob3AoKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpOwotICAgIChuZXcgQnVpbGRl
cigpKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLk5vcCgpLkVuZCgpLkVuZCgpOwot
ICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5SZXR1cm4oKS5VbnJlYWNoYWJs
ZSgpLkVuZCgpLkVuZCgpOwotICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5V
bnJlYWNoYWJsZSgpLlJldHVybigpLkVuZCgpLkVuZCgpOwotICAgIChuZXcgQnVpbGRlcigpKS5D
b2RlKCkuRnVuY3Rpb24oKS5DYWxsKDApLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7Ci0gICAg
KG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuQ2FsbCgwKS5F
bmQoKS5FbmQoKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5j
dGlvbigpLk5vcCgpLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCkuanNvbigpOworICAgIChuZXcg
QnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5O
b3AoKS5FbmQoKS5FbmQoKS5qc29uKCk7CisgICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQo
KS5Db2RlKCkuRnVuY3Rpb24oKS5SZXR1cm4oKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpLmpz
b24oKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigp
LlVucmVhY2hhYmxlKCkuUmV0dXJuKCkuRW5kKCkuRW5kKCkuanNvbigpOworICAgIChuZXcgQnVp
bGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuQ2FsbCgwKS5VbnJlYWNoYWJs
ZSgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgp
LkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuQ2FsbCgwKS5FbmQoKS5FbmQoKS5qc29u
KCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gT3Bjb2RlU2VsZWN0KCkgewotICAgIGNvbnN0IGIgPSAo
bmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkKKyAgICBjb25zdCBiID0gKG5ldyBCdWls
ZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKQogICAgICAgICAuSTMyQ29uc3Qo
MSkuSTMyQ29uc3QoMikuSTMyQ29uc3QoMCkKICAgICAgICAgLlNlbGVjdCgpCiAgICAgICAgIC5S
ZXR1cm4oKQogICAgICAgLkVuZCgpCiAgICAgLkVuZCgpOwogICAgIGNvbnN0IGogPSBKU09OLnBh
cnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5s
ZW5ndGgsIDYpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzNdLm5h
bWUsICJzZWxlY3QiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5s
ZW5ndGgsIDYpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzNdLm5h
bWUsICJzZWxlY3QiKTsKIH0pKCk7CiAKIC8vIEZJWE1FIHRlc3QgdHlwZSBtaXNtYXRjaCB3aXRo
IHNlbGVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2Nwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJXZWJBc3NlbWJs
eS5qcyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanMK
aW5kZXggYTI1MWM0My4uYWM1N2QzNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qcworKysgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0
L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzCkBAIC0zMCwxNiArMzAsMyBAQCBpbXBvcnQgQnVp
bGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICAgICAgICAgICAgWyIwMDAwMDAwMCAwMCA2
MSA3MyA2ZCAwYyAwMCAwMCAwMCAwMCAwZiAwYSA0ZiAwMCA0OCAwMCA0OCAgfMK3YXNtwrfCt8K3
wrfCt8K3wrdPwrdIwrdIfCIsCiAgICAgICAgICAgICAgICAiMDAwMDAwMTAgMDAgNDEgMDAgNDkg
MDAgZGUgYWQgYzAgZmUgICAgICAgICAgICAgICAgICAgICAgIHzCt0HCt0nCt8K3wrfCt8K3ICAg
ICAgIHwiXS5qb2luKCJcbiIpKTsKIH0pKCk7Ci0KLShmdW5jdGlvbiBCYXNpYygpIHsKLSAgICBj
b25zdCBiaW4gPSAobmV3IEJ1aWxkZXIoKSkKLSAgICAgICAgLkNvZGUoKQotICAgICAgICAgICAg
LkZ1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgICAgICAgICAuTm9w
KCkKLSAgICAgICAgICAgIC5FbmQoKQotICAgICAgICAuRW5kKCkKLSAgICAgICAgLldlYkFzc2Vt
Ymx5KCk7Ci0gICAgYXNzZXJ0LmVxKGJpbi5oZXhkdW1wKCkudHJpbSgpLAotICAgICAgICAgICAg
ICAiMDAwMDAwMDAgMDAgNjEgNzMgNmQgMGMgMDAgMDAgMDAgMGEgMDYgMDEgMDQgMDAgMGEgMGEg
MGYgIHzCt2FzbcK3wrfCt8K3wrfCt8K3wrfCt8K3wrfCt3wiKTsKLX0pKCk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfV0FTTS5qcyBiL0pTVGVzdHMvd2FzbS9zZWxm
LXRlc3QvdGVzdF9XQVNNLmpzCmluZGV4IDM5YTk1NjkuLjk5Nzc5N2YgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9XQVNNLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9zZWxm
LXRlc3QvdGVzdF9XQVNNLmpzCkBAIC0xLDggKzEsOCBAQAogaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZyb20gJy4uL1dBU00uanMnOwog
Ci1hc3NlcnQubm90VW5kZWYoV0FTTS5kZXNjcmlwdGlvbik7Ci1hc3NlcnQubm90VW5kZWYoV0FT
TS52YWx1ZVR5cGUpOworYXNzZXJ0LmlzTm90VW5kZWYoV0FTTS5kZXNjcmlwdGlvbik7Cithc3Nl
cnQuaXNOb3RVbmRlZihXQVNNLnZhbHVlVHlwZSk7CiBhc3NlcnQuZ2UoV0FTTS52YWx1ZVR5cGUu
bGVuZ3RoLCA0KTsKIAogZm9yIChjb25zdCB2IG9mIFdBU00udmFsdWVUeXBlKQpAQCAtMTgsNyAr
MTgsNyBAQCBjb25zdCBleHBlY3RlZEZpZWxkcyA9IFsKICAgICAib3Bjb2RlIiwKIF07CiBmb3Ig
KGNvbnN0IGUgb2YgZXhwZWN0ZWRGaWVsZHMpIHsKLSAgICBhc3NlcnQubm90VW5kZWYoV0FTTS5k
ZXNjcmlwdGlvbltlXSk7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoV0FTTS5kZXNjcmlwdGlvbltl
XSk7CiAgICAgaWYgKHR5cGVvZihXQVNNLmRlc2NyaXB0aW9uW2VdKSAhPT0gIm9iamVjdCIpCiAg
ICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZGVzY3JpcHRpb24gdG8gY29udGFpbiBm
aWVsZCAiJHtlfSJgKTsKIH0KQEAgLTMyLDExICszMiwxMSBAQCBjb25zdCBleHBlY3RlZE9wRmll
bGRzID0gWwogXTsKIGZvciAoY29uc3Qgb3AgaW4gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGUpCiAg
ICAgZm9yIChjb25zdCBlIG9mIGV4cGVjdGVkT3BGaWVsZHMpCi0gICAgICAgIGFzc2VydC5ub3RV
bmRlZihXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF1bZV0pOworICAgICAgICBhc3NlcnQuaXNO
b3RVbmRlZihXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF1bZV0pOwogCiAvLyBGSVhNRTogdGVz
dCBmb3IgZmllbGQgImIzb3AiIHdoZW4gYWxsIGFyaXRobWV0aWMvIGNvbXBhcmlzb24gb3BzIGhh
dmUgdGhlbS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjA2NAog
Ci1hc3NlcnQubm90VW5kZWYoV0FTTS5zZWN0aW9ucyk7Ci1hc3NlcnQubm90VW5kZWYoV0FTTS5z
ZWN0aW9uRW5jb2RpbmdUeXBlKTsKK2Fzc2VydC5pc05vdFVuZGVmKFdBU00uc2VjdGlvbnMpOwor
YXNzZXJ0LmlzTm90VW5kZWYoV0FTTS5zZWN0aW9uRW5jb2RpbmdUeXBlKTsKIGZvciAoY29uc3Qg
c2VjdGlvbiBvZiBXQVNNLnNlY3Rpb25zKQogICAgIGFzc2VydC5lcShXQVNNLnNlY3Rpb25FbmNv
ZGluZ1R5cGUsIFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbltzZWN0aW9uXS50eXBlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhZDcwY2E2Li5jMTAyNDU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTM2LDYgKzExMzYsMjMgQEAgZWxzZSAo
KQogICAgICkKIGVuZGlmICgpCiAKKyMgV2ViQXNzZW1ibHkgZ2VuZXJhdG9yCisKK21hY3JvKEdF
TkVSQVRFX1BZVEhPTiBfZ2VuZXJhdG9yIF9pbnB1dCBfb3V0cHV0KQorICAgIGFkZF9jdXN0b21f
Y29tbWFuZCgKKyAgICAgICAgT1VUUFVUICR7X291dHB1dH0KKyAgICAgICAgTUFJTl9ERVBFTkRF
TkNZICR7X2dlbmVyYXRvcn0KKyAgICAgICAgREVQRU5EUyAke19pbnB1dH0KKyAgICAgICAgQ09N
TUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke19nZW5lcmF0b3J9ICR7X2lucHV0fSAke19vdXRw
dXR9CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX0hF
QURFUlMgJHtfb3V0cHV0fSkKKyAgICBBRERfU09VUkNFX0RFUEVOREVOQ0lFUygke19pbnB1dH0g
JHtfb3V0cHV0fSkKK2VuZG1hY3JvKCkKK0dFTkVSQVRFX1BZVEhPTigke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRD
T1JFX0RJUn0vV2FzbU9wcy5oKQorR0VORVJBVEVfUFlUSE9OKCR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weSAke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtERVJJVkVEX1NPVVJDRVNfSkFW
QVNDUklQVENPUkVfRElSfS9XYXNtVmFsaWRhdGVJbmxpbmVzLmgpCisKKyMgTFVUIGdlbmVyYXRv
cgorCiBzZXQoSEFTSF9MVVRfR0VORVJBVE9SICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9j
cmVhdGVfaGFzaF90YWJsZSkKIG1hY3JvKEdFTkVSQVRFX0hBU0hfTFVUIF9pbnB1dCBfb3V0cHV0
KQogICAgIGFkZF9jdXN0b21fY29tbWFuZCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGEw
OTk5YzEuLjk0ZmIwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBA
CisyMDE2LTExLTAyICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBtb3JlIHNlY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMjMKKworICAgICAgICBS
ZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIuCisKKyAgICAgICAgT24gdGhlIEpTQyBzaWRlOgorCisg
ICAgICAgICAtIFB1dCBpbiBwYXJzZXIgc3R1YnMgZm9yIGFsbCBXZWJBc3NlbWJseSBzZWN0aW9u
cy4KKyAgICAgICAgIC0gUGFyc2UgSW1wb3J0LCBFeHBvcnQgc2VjdGlvbnMuCisgICAgICAgICAt
IFVzZSB0cnlSZXNlcnZlQ2FwYWNpdHkgaW5zdGVhZCBvZiByZXNlcnZlLCBhbmQgYmFpbCBvdXQg
b2YgdGhlIHBhcnNlciBpZiBpdCBmYWlscy4gVGhpcyBwcmV2ZW50cyB0aGUgcGFyc2VyIGZyb20g
YnJpbmdpbmcgZXZlcnl0aGluZyBkb3duIHdoZW4gZmFjZWQgd2l0aCBhIG1hbGljaW91cyBpbnB1
dC4KKyAgICAgICAgIC0gRW5jYXBzdWxhdGUgYWxsIHBhcnNlZCBtb2R1bGUgaW5mb3JtYXRpb24g
aW50byBpdHMgb3duIHN0cnVjdHVyZSwgbWFraW5nIGl0IGVhc2llciB0byBwYXNzIGFyb3VuZCAo
ZnJvbSBwYXJzZXIgdG8gUGxhbiB0byBNb2R1bGUgdG8gSW5zdGFuY2UpLgorICAgICAgICAgLSBD
cmVhdGUgV2FzbUZvcm1hdC5jcHAgdG8gaG9sZCBwYXJzZWQgbW9kdWxlIGluZm9ybWF0aW9uJ3Mg
ZHRvciB0byBhdm9pZCBpbmNsdWRpbmcgV2FzbU1lbW9yeS5oIG5lZWRsZXNzbHkuCisgICAgICAg
ICAtIFJlbW92ZSBhbGwgcmVtYWluZGVycyBvZiBwb2x5ZmlsbC1wcm90b3R5cGUtMSwgYW5kIHVw
ZGF0ZSBsaWNlbnNlLgorICAgICAgICAgLSBBZGQgbWlzc2luZyBXYXNtT3BzLmggYW5kIFdhc21W
YWxpZGF0ZUlubGluZXMuaCBhdXRvLWdlbmVyYXRpb24gZm9yIGNtYWtlIGJ1aWxkLgorCisgICAg
ICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRlc3Rpbmcgc2lkZToKKworICAgICAgICAgLSBJbXBsZW1l
bnQgVHlwZSwgSW1wb3J0IChmdW5jdGlvbiBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBz
ZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hlY2sgc2VjdGlvbiBvcmRlciBhbmQgdW5pcXVlbmVzcy4K
KyAgICAgICAgIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRoZSBUeXBlIHNlY3Rpb24gZnJv
bSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50cmllcy4KKyAgICAgICAgIC0g
QWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OiBtaXNzaW5nIGF1dG8tZ2VucmF0aW9uCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogbWVyZ2UgY29uZmxpY3QKKyAgICAgICAgKiB0ZXN0V2FzbS5j
cHA6IHVwZGF0ZSBmb3IgQVBJIGNoYW5nZXMsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlCisgICAgICAg
IChjaGVja1BsYW4pOgorICAgICAgICAocnVuV2FzbVRlc3RzKToKKyAgICAgICAgKiB3YXNtL1dh
c21Gb3JtYXQuY3BwOiBhZGQgYSBkdG9yIHdoaWNoIHJlcXVpcmVzIGV4dHJhIGhlYWRlcnMgd2hp
Y2ggSSdkIHJhdGhlciBub3QgaW5jbHVkZSBpbiBXYXNtRm9ybWF0LmgKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgICog
d2FzbS9XYXNtRm9ybWF0Lmg6IEFkZCBFeHRlcm5hbCwgSW1wb3J0LCBGdW5jdGlvbmluZm9ybWF0
aW9uLCBFeHBvcnQsIE1vZHVsZUluZm9ybWF0aW9uLCBDb21waWxlZEZ1bmN0aW9uLCBhbmQgcmVt
b3ZlIG9ic29sZXRlIHN0dWZmIHdoaWNoIHdhcyBhIGhvbGRvdmVyIGZyb20gdGhlIGZpcnN0IGlt
cGxlbWVudGF0aW9uIChhbGwgdGhhdCBjb2RlIGlzIG5vdyBnb25lLCBzbyByZW1vdmUgaXRzIGxp
Y2Vuc2UpCisgICAgICAgIChKU0M6Oldhc206OkV4dGVybmFsOjppc1ZhbGlkKToKKyAgICAgICAg
KiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOiBzaW1wbGlmeSBzb21lLCBtYWtlIG5hbWVzIGNv
bnNpc3RlbnQgd2l0aCB0aGUgV2ViQXNzZW1ibHkgc2VjdGlvbiBuYW1lcywgY2hlY2sgbWVtb3J5
IGFsbG9jYXRpb25zIHNvIHRoZXkgY2FuIGZhaWwgZWFybHkKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6
cGFyc2VUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUltcG9y
dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
UGFyc2VyOjpwYXJzZUV4cG9ydCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6
cGFyc2VTdGFydCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVt
ZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUpOiBhdm9p
ZCBvdmVyZmxvdyB0aHJvdWdoIGZ1bmN0aW9uIHNpemUuCisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VEYXRhKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIu
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjptb2R1bGVJbmZvcm1hdGlvbik6
CisgICAgICAgICogd2FzbS9XYXNtUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjo6Y29uc3VtZVVURjhTdHJpbmcpOiBhZGQgYXMgcmVxdWlyZWQgYnkgc3BlYworICAgICAgICAo
SlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlRXh0ZXJuYWxLaW5kKTogYWRkIGFzIHBlciBzcGVjCisg
ICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OlBs
YW4pOiBmaXggc29tZSBvd25lcnNoaXAsIGltcHJvdmUgc29tZSBlcnJvciBtZXNzYWdlcworICAg
ICAgICAqIHdhc20vV2FzbVBsYW4uaDogZml4IHNvbWUgb3duZXJzaGlwCisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OmdldE1vZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6Z2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Y29tcGlsZWRGdW5j
dGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Y29tcGlsZWRGdW5jdGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmdldENvbXBpbGVkRnVuY3Rpb25zKToKKyAgICAg
ICAgKiB3YXNtL1dhc21TZWN0aW9ucy5oOiBtYWNyb2l6ZSB3aXRoIGRlc2NyaXB0aW9uLCBzbyB0
aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBzdXBlciBwcmV0dHkuIFRoaXMgY291bGQgYmUgYXV0by1n
ZW5lcmF0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKTogdGFrZSBtb2R1bGUgaW5m
b3JtYXRpb24KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJs
eU1vZHVsZSk6IGRpdHRvCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZSk6IGNoZWNrIHRoYXQg
bW9kdWxlcyB3aXRoIGltcG9ydHMgYXJlIGluc3RhbnRpYXRlZCB3aXRoIGFuIGltcG9ydCBvYmpl
Y3QsIGFzIHBlciBzcGVjLiBUaGlzIG5lZWRzIHRvIGJlIHRlc3RlZC4KKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2Vt
Ymx5TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZSk6CisKIDIw
MTYtMTEtMDMgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQXNr
aW5nIGZvciBhIHZhbHVlIHByb2ZpbGUgcHJlZGljdGlvbiBzaG91bGQgYmUgZGVmZW5zaXZlIGFn
YWluc3Qgbm90IGZpbmRpbmcgYSB2YWx1ZSBwcm9maWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDAxNmU0ZjkuLjkyNjBlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMjg4LDcgKzEyODgsNiBAQAogCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3RDMgLyogV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50
aW9uLmggKi87IH07CiAJCTUzRkY3Rjk5MURCRkNEOTAwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkY3Rjk4
MURCRkNEOTAwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuaCAqLzsgfTsKIAkJNTNGRjdGOUIxREJG
RDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZGN0Y5QTFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZh
bGlkYXRlLmNwcCAqLzsgfTsKLQkJNTNGRjdGOUQxREMwMERCMTAwQTI2Q0NDIC8qIFdhc21Gb3Jt
YXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
RjdGOUMxREMwMERCMTAwQTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwICovOyB9OwogCQk1QjcwQ0ZE
RTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEODFEQjY5RTVDMDBFQzIzRjkgLyog
SlNBc3luY0Z1bmN0aW9uLmggKi87IH07CiAJCTVCNzBDRkRGMURCNjlFNjYwMEVDMjNGOSAvKiBK
U0FzeW5jRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUI3MENGRDkxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5jcHAg
Ki87IH07CiAJCTVCNzBDRkUwMURCNjlFNjYwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qjcw
Q0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovOyB9OwpA
QCAtMTk4Myw2ICsxOTgyLDcgQEAKIAkJQUQyRkNDMkQxREI4MzhGRDAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUu
aCAqLzsgfTsKIAkJQUQyRkNDMzAxREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMkUx
REI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuY3BwICovOyB9OwogCQlBRDJGQ0MzMTFE
QjgzRDQ5MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHkuaCAqLzsgfTsKKwkJQUQyRkNDMzMxREM0MDQ1NDAwQjNFNzM2IC8qIFdhc21Gb3Jt
YXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQy
RkNDMzIxREM0MDQ1MzAwQjNFNzM2IC8qIFdhc21Gb3JtYXQuY3BwICovOyB9OwogCQlBRDg2QTkz
RTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8q
IFdlYWtHQ01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUREQjFGNjIx
OEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyog
UHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDFDRjA2ODE2RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi87
IH07CkBAIC0zNjQ4LDcgKzM2NDgsNiBAQAogCQk1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyog
V2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdhc21DYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21WYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0ZGN0Y5QTFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21WYWxpZGF0ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzRkY3RjlDMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNt
Rm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Gb3Jt
YXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEODFEQjY5RTVDMDBF
QzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQXN5bmNGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qjcw
Q0ZEOTFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXN5bmNGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkRBMURCNjlFNUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0
aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzeW5jRnVu
Y3Rpb25Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MjUsNiAr
NDQyNCw3IEBACiAJCUFEMkZDQzI3MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3Rv
dHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVByb3Rv
dHlwZS5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQyRkNDMkUxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJBc3NlbWJseS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzJGMURCODM5RjcwMEIzRTcz
NiAvKiBKU1dlYkFzc2VtYmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
V2ViQXNzZW1ibHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQyRkNDMzIxREM0
MDQ1MzAwQjNFNzM2IC8qIFdhc21Gb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyog
VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01OTQxLDcgKzU5NDEsNyBAQAogCQkJCTUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAv
KiBXYXNtQjNJUkdlbmVyYXRvci5oICovLAogCQkJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAv
KiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAogCQkJCTUzRkQwNEQyMUQ3QUIxODcwMDMy
ODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLywKLQkJCQk1M0ZGN0Y5QzFEQzAwREIx
MDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgKi8sCisJCQkJQUQyRkNDMzIxREM0MDQ1MzAwQjNF
NzM2IC8qIFdhc21Gb3JtYXQuY3BwICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAv
KiBXYXNtRm9ybWF0LmggKi8sCiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21G
dW5jdGlvblBhcnNlci5oICovLAogCQkJCTUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmNwcCAqLywKQEAgLTk4NDksNiArOTg0OSw3IEBACiAJCQkJMEYwQTc1MjIxQjk0QkZB
OTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZDOTIx
MTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQUQyRkNDMzMxREM0MDQ1NDAwQjNFNzM2IC8qIFdhc21Gb3JtYXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxp
emVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5
NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1
QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAppbmRleCBkMWI4OGQ4Li4yOTc0NWZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKQEAgLTI3NiwxMyArMjc2LDEzIEBAIHN0YXRpYyB2b2lk
IGNoZWNrUGxhbihQbGFuJiBwbGFuLCB1bnNpZ25lZCBleHBlY3RlZE51bWJlck9mRnVuY3Rpb25z
KQogICAgICAgICBDUkFTSCgpOwogICAgIH0KIAotICAgIGlmIChwbGFuLnJlc3VsdFNpemUoKSAh
PSBleHBlY3RlZE51bWJlck9mRnVuY3Rpb25zKSB7CisgICAgaWYgKHBsYW4uY29tcGlsZWRGdW5j
dGlvbkNvdW50KCkgIT0gZXhwZWN0ZWROdW1iZXJPZkZ1bmN0aW9ucykgewogICAgICAgICBkYXRh
TG9nTG4oIkluY29ycmVjdCBudW1iZXIgb2YgZnVuY3Rpb25zIik7CiAgICAgICAgIENSQVNIKCk7
CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4cGVjdGVkTnVtYmVyT2ZG
dW5jdGlvbnM7ICsraSkgewotICAgICAgICBpZiAoIXBsYW4ucmVzdWx0KGkpKSB7CisgICAgICAg
IGlmICghcGxhbi5jb21waWxlZEZ1bmN0aW9uKGkpKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4o
IkZ1bmN0aW9uIGF0IGluZGV4LCAiICwgaSwgIiBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHki
KTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0KQEAgLTMxNCwxMCArMzE0LDEwIEBA
IHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAyKTsK
IAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0soaXNJ
ZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBi
b3hmKDAuMCksIGJveGYoMS41KSB9KSwgLTEuNWYpKTsKLSAgICAgICAgQ0hFQ0soaXNJZGVudGlj
YWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3hmKDEw
MC4xMjM0KSwgYm94ZigxMi41KSB9KSwgODcuNjIzNGYpKTsKLSAgICAgICAgQ0hFQ0soaXNJZGVu
dGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3hm
KDAuMCksIGJveGYoMS41KSB9KSwgLTEuNWYpKTsKLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwo
aW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDEwMC4x
MjM0KSwgYm94ZigxMi41KSB9KSwgODcuNjIzNGYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGlj
YWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQs
IHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7CisgICAgICAgIENIRUNLKGlzSWRl
bnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBv
aW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0ZikpOworICAgICAg
ICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgLTEuNWYpKTsKKyAg
ICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3
LjYyMzRmKSk7CiAgICAgfQogCiAgICAgewpAQCAtMzQwLDEwICszNDAsMTAgQEAgc3RhdGljIHZv
aWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDIpOwogCiAgICAgICAg
IC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwg
Ym94ZigxLjUpIH0pLCAxLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxm
bG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJv
eGYoMTIuNSkgfSksIDExMi42MjM0ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZv
a2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94
ZigxLjUpIH0pLCAxLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9h
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYo
MTIuNSkgfSksIDExMi42MjM0ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8
ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3hmKDAu
MCksIGJveGYoMS41KSB9KSwgMS41ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZv
a2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3hm
KDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYyMzRmKSk7CisgICAgICAgIENIRUNLKGlz
SWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAxLjVmKSk7CisgICAgICAgIENIRUNL
KGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIuNjIzNGYpKTsK
ICAgICB9CiAKICAgICB7CkBAIC0zNzEsMTEgKzM3MSwxMSBAQCBzdGF0aWMgdm9pZCBydW5XYXNt
VGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7CiAKICAgICAgICAgLy8gVGVzdCB0
aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0p
LCAxMjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3go
MyksIGJveCg0KSwgYm94KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgx
MCksIGJveCgxMSksIGJveCgxMikgfSksIDc4KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgz
KSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEw
KSwgYm94KDExKSwgYm94KDEwMCkgfSksIDE2Nik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSks
IDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEyMDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpIH0pLCAxMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSwgYm94KDMpLCBi
b3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3goMTApLCBi
b3goMTEpLCBib3goMTIpIH0pLCA3OCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSwg
Ym94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBi
b3goMTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKICAgICB9CiAKICAgICB7CkBAIC00
MDIsMTAgKzQwMiwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVj
a1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSB9KSwg
Mik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCg0KSB9KSwgMjQpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMikgfSks
IDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0pLCAyNCk7CiAgICAgfQogCiAgICAgewpAQCAt
NDI1LDE4ICs0MjUsMTggQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgfTsK
IAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAgICBpZiAocGxhbi5yZXN1
bHRTaXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1bHQoMCkgfHwgIXBsYW4ucmVzdWx0KDEpKSB7Cisg
ICAgICAgIGlmIChwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpICE9IDIgfHwgIXBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKSB8fCAhcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpKSB7CiAgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CiAg
ICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgx
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCgwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTUpIH0pLCAxNik7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAyMDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDIp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCksIGJveCgwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1
KSB9KSwgMTYpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxMDApIH0pLCAyMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAyKTsKICAgICB9
CiAKICAgICB7CkBAIC00NTksMTIgKzQ1OSwxMiBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgx
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQ
b2ludCwgeyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9
KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwog
ICAgIH0KIAogICAgIHsKQEAgLTQ4OCw5ICs0ODgsOSBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVz
dHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlz
IGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0p
LCAxKTsKICAgICB9CiAKICAgICB7CkBAIC01MTUsOSArNTE1LDkgQEAgc3RhdGljIHZvaWQgcnVu
V2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNTUwLDEzICs1NTAsMTMgQEAgc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwog
ICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeSgp
LT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnkoKS0+c2l6ZSgpKTsKIAog
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc2l6ZW9mKHVpbnQzMl90KTsKLSAg
ICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGxhbi5tZW1v
cnkoKS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAg
ICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGxhbi5nZXRN
ZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxl
bmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwogICAgICAgICBD
SEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5
W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAgLTU2NSw3ICs1NjUsNyBAQCBzdGF0aWMgdm9pZCBy
dW5XYXNtVGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgICAgICBvZmZzZXQgPSA1
ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwor
ICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBvZmZz
ZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAt
IDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1
KTsKQEAgLTYwMiwxMyArNjAyLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAg
ICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEp
OwotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJU
KHBsYW4uZ2V0TWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChs
ZW5ndGgpIH0pOworICAgICAgICB1aW50OF90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4ocGxhbi5nZXRNZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zm
c2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAx
XSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC02MTYsNyAr
NjE2LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBsZW5ndGggPSAx
MDsKICAgICAgICAgb2Zmc2V0ID0gNTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0p
OworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBD
SEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAgICAgICBDSEVDS19FUShtZW1v
cnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCkBAIC02NDMsMTIgKzY0MywxMiBAQCBzdGF0aWMgdm9pZCBydW5XYXNt
VGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CiAgICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7Cisg
ICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRl
c3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNjczLDkgKzY3Myw5IEBAIHN0YXRpYyB2
b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAg
ICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTcwMCwxMCArNzAwLDEw
IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAx
KTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgtMTIpLCBib3gocGxhbi5tZW1vcnkoKS0+
c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSksIC0xMik7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3go
MCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwg
MTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KC0xMiksIGJveChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkgLSBzaXplb2YodWlu
dDY0X3QpKSB9KSwgLTEyKTsKICAgICB9CiAKICAgICB7CkBAIC03MjgsOSArNzI4LDkgQEAgc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAg
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNzYzLDEzICs3NjMs
MTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4oKnZt
LCB2ZWN0b3IpOwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VSVChw
bGFuLm1lbW9yeSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnkoKS0+
c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc2l6ZW9mKHVp
bnQzMl90KTsKLSAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQzMl90
Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVu
Z3RoKSB9KTsKKyAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQzMl90
Kj4ocGxhbi5nZXRNZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zm
c2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3Qp
OwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hF
Q0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAgLTc3OCw3ICs3NzgsNyBAQCBz
dGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgICAg
ICBvZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChs
ZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwog
ICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W29mZnNldCAtIDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAr
IGxlbmd0aF0sIDB1KTsKQEAgLTgxNSwxMyArODE1LDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21U
ZXN0cygpCiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hlY2tQ
bGFuKHBsYW4sIDEpOwotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKKyAg
ICAgICAgQVNTRVJUKHBsYW4uZ2V0TWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8gVGVz
dCB0aGlzIGRvZXNuJ3QgY3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgIGludm9r
ZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9m
ZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50OF90KiBtZW1vcnkgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4ocGxhbi5nZXRNZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBpbnZv
a2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIENIRUNLX0VRKG1lbW9y
eVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVu
Z3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CkBAIC04MjksNyArODI5LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAg
ICBsZW5ndGggPSAxMDsKICAgICAgICAgb2Zmc2V0ID0gNTsKLSAgICAgICAgaW52b2tlPHZvaWQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJv
eChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0p
OwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAgICAgICBD
SEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC04NTYsMTIgKzg1NiwxMiBAQCBzdGF0aWMg
dm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CiAg
ICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCkt
PnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwogCiAg
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtODg2LDkgKzg4Niw5
IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAx
KTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0p
LCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEw
MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTkx
MywxNCArOTEzLDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMSk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgyKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0p
LCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTk1MSwx
NCArOTUxLDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxh
bihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0p
LCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAogCkBAIC05NzUsNyArOTc1LDcg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEp
OwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyB9KSwgNSk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyB9KSwgNSk7CiAgICAgfQogCiAKQEAgLTk5Myw3ICs5OTMsNyBAQCBzdGF0
aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyB9KSwgMTEpOwogICAgIH0KIAogICAgIHsKQEAgLTEwMTAsNyArMTAxMCw3IEBAIHN0
YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAog
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAgICAgewpAQCAtMTAyNyw3ICsxMDI3LDcgQEAg
c3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwog
CiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgfSksIDExKTsKICAgICB9CiAKICAgICB7CkBAIC0xMDQzLDEwICsxMDQzLDEw
IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAx
KTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBi
b3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDEpIH0pLCAxMDEpOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
LTEpLCBib3goMSl9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSwgYm94KDEpIH0pLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
LCBib3goMSkgfSksIDEwMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goLTEpLCBib3goMSl9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJv
eCgxKSB9KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CiAgICAgfQogCiAgICAg
ewpAQCAtMTA2OSw4ICsxMDY5LDggQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAg
ICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTApIH0pLCAxMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwKSB9KSwgMTApOwog
ICAgIH0KIAogICAgIHsKQEAgLTExMDIsMTAgKzExMDIsMTAgQEAgc3RhdGljIHZvaWQgcnVuV2Fz
bVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSks
IDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMil9KSwgMyk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCA1MDUwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpfSksIDMpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSks
IDUwNTApOwogICAgIH0KIAogICAgIHsKQEAgLTExNDMsMTQgKzExNDMsMTQgQEAgc3RhdGljIHZv
aWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAg
IC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDIp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCA0
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9
KSwgNjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxMDApIH0pLCAxMDAwMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMCksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgw
KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMik7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJv
eCgyKSB9KSwgNCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMTIpOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgNjAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3goMTAwKSB9KSwgMTAwMDApOwogICAgIH0KIAogICAgIHsKQEAgLTExOTMsMTQg
KzExOTMsMTQgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFu
KHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDIpLCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMiksIGJveCg2KSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDAp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDIpLCBib3goMikgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMSkgfSks
IDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCmluZGV4IDJiZGM4MDAuLmJmOGUzNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCkBAIC0yNCwxMCArMjQsMTMgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNvbnN0IGNoYXIqIHRvU3RyaW5nKFR5
cGUgdHlwZSkKQEAgLTQ2LDYgKzQ5LDggQEAgY29uc3QgY2hhciogdG9TdHJpbmcoVHlwZSB0eXBl
KQogICAgIH0KIH0KIAorTW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbigpIHsg
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKaW5kZXggODI4NmFlZi4uNDk5NjQ0YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjEsMjMgKzIxLDYgQEAKICAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTUgYnkgdGhlIHJlcG9zaXRvcnkgYXV0aG9ycyBvZgotICogV2Vi
QXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTEuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
Ci0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogI3ByYWdtYSBvbmNlCkBAIC05
OCwzNyArODEsODMgQEAgaW5saW5lIGJvb2wgaXNWYWx1ZVR5cGUoVHlwZSB0eXBlKQogfQogCiBj
b25zdCBjaGFyKiB0b1N0cmluZyhUeXBlKTsKKyAgICAKK3N0cnVjdCBFeHRlcm5hbCB7CisgICAg
ZW51bSBLaW5kIDogdWludDhfdCB7CisgICAgICAgIEZ1bmN0aW9uID0gMCwKKyAgICAgICAgVGFi
bGUgPSAxLAorICAgICAgICBNZW1vcnkgPSAyLAorICAgICAgICBHbG9iYWwgPSAzLAorICAgIH07
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50PgorICAgIHN0YXRpYyBib29sIGlzVmFsaWQoSW50
IHZhbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodmFsKSB7CisgICAgICAgIGNhc2UgRnVuY3Rp
b246CisgICAgICAgIGNhc2UgVGFibGU6CisgICAgICAgIGNhc2UgTWVtb3J5OgorICAgICAgICBj
YXNlIEdsb2JhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0
YXRpY19hc3NlcnQoRnVuY3Rpb24gPT0gMCwgIldhc20gbmVlZHMgRnVuY3Rpb24gdG8gaGF2ZSB0
aGUgdmFsdWUgMCIpOworICAgIHN0YXRpY19hc3NlcnQoVGFibGUgICAgPT0gMSwgIldhc20gbmVl
ZHMgVGFibGUgdG8gaGF2ZSB0aGUgdmFsdWUgMSIpOworICAgIHN0YXRpY19hc3NlcnQoTWVtb3J5
ICAgPT0gMiwgIldhc20gbmVlZHMgTWVtb3J5IHRvIGhhdmUgdGhlIHZhbHVlIDIiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEdsb2JhbCAgID09IDMsICJXYXNtIG5lZWRzIEdsb2JhbCB0byBoYXZlIHRo
ZSB2YWx1ZSAzIik7Cit9OwogCiBzdHJ1Y3QgU2lnbmF0dXJlIHsKICAgICBUeXBlIHJldHVyblR5
cGU7CiAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50czsKIH07Ci0KLXN0cnVjdCBGdW5jdGlvbklt
cG9ydCB7Ci0gICAgU3RyaW5nIGZ1bmN0aW9uTmFtZTsKKyAgICAKK3N0cnVjdCBJbXBvcnQgewor
ICAgIFN0cmluZyBtb2R1bGU7CisgICAgU3RyaW5nIGZpZWxkOworICAgIEV4dGVybmFsOjpLaW5k
IGtpbmQ7CisgICAgdW5pb24geworICAgICAgICBTaWduYXR1cmUqIGZ1bmN0aW9uU2lnbmF0dXJl
OworICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQorICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgTWVt
b3J5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAg
ICAgLy8gRklYTUUgaW1wbGVtZW50IEdsb2JhbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0MTMzCisgICAgfTsKIH07CiAKLXN0cnVjdCBGdW5jdGlvbkltcG9ydFNp
Z25hdHVyZSB7Ci0gICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7Ci0gICAgdWludDMyX3QgZnVu
Y3Rpb25JbXBvcnRJbmRleDsKK3N0cnVjdCBGdW5jdGlvbkluZm9ybWF0aW9uIHsKKyAgICBTaWdu
YXR1cmUqIHNpZ25hdHVyZTsKKyAgICBzaXplX3Qgc3RhcnQ7CisgICAgc2l6ZV90IGVuZDsKIH07
CiAKLXN0cnVjdCBGdW5jdGlvbkRlY2xhcmF0aW9uIHsKLSAgICB1aW50MzJfdCBzaWduYXR1cmVJ
bmRleDsKK2NsYXNzIE1lbW9yeTsKKworc3RydWN0IEV4cG9ydCB7CisgICAgU3RyaW5nIGZpZWxk
OworICAgIEV4dGVybmFsOjpLaW5kIGtpbmQ7CisgICAgdW5pb24geworICAgICAgICBTaWduYXR1
cmUqIGZ1bmN0aW9uU2lnbmF0dXJlOworICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQorICAgICAgICAv
LyBGSVhNRSBpbXBsZW1lbnQgTWVtb3J5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQxMzQKKyAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IEdsb2JhbCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCisgICAgfTsKIH07CiAKLXN0
cnVjdCBGdW5jdGlvblBvaW50ZXJUYWJsZSB7Ci0gICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7
Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBmdW5jdGlvbkluZGljZXM7Ci0gICAgVmVjdG9yPEpTRnVu
Y3Rpb24qPiBmdW5jdGlvbnM7Ci19Oworc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKKyAgICBW
ZWN0b3I8U2lnbmF0dXJlPiBzaWduYXR1cmVzOworICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7
CisgICAgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+IGZ1bmN0aW9uczsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVtb3J5PiBtZW1vcnk7CisgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKIAot
c3RydWN0IEZ1bmN0aW9uSW5mb3JtYXRpb24gewotICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOwot
ICAgIHNpemVfdCBzdGFydDsKLSAgICBzaXplX3QgZW5kOworICAgIH5Nb2R1bGVJbmZvcm1hdGlv
bigpOwogfTsKIAorc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb247Cit0eXBlZGVmIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4+IENvbXBpbGVkRnVuY3Rpb25zOwor
CiBzdHJ1Y3QgVW5saW5rZWRDYWxsIHsKICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxMb2NhdGlv
bjsKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKaW5kZXggNTVjMjEyZS4uZGYyOThiMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKICNp
bmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKIApAQCAtNDAsNiArNDEsOCBAQCBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCiB7Cisg
ICAgbV9tb2R1bGUgPSBzdGQ6Om1ha2VfdW5pcXVlPE1vZHVsZUluZm9ybWF0aW9uPigpOworCiAg
ICAgY29uc3Qgc2l6ZV90IG1pblNpemUgPSA4OwogICAgIGlmIChsZW5ndGgoKSA8IG1pblNpemUp
IHsKICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiTW9kdWxlIGlzICIgKyBTdHJpbmc6Om51bWJl
cihsZW5ndGgoKSkgKyAiIGJ5dGVzLCBleHBlY3RlZCBhdCBsZWFzdCAiICsgU3RyaW5nOjpudW1i
ZXIobWluU2l6ZSkgKyAiIGJ5dGVzIjsKQEAgLTExMSw1NCArMTE0LDIwIEBAIGJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIGF1dG8gZW5kID0gbV9vZmZzZXQgKyBzZWN0aW9uTGVu
Z3RoOwogCiAgICAgICAgIHN3aXRjaCAoc2VjdGlvbikgewotCi0gICAgICAgIGNhc2UgU2VjdGlv
bnM6Ok1lbW9yeTogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJQYXJzaW5nIE1lbW9yeS4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VNZW1v
cnkoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgbWVtb3J5IjsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgU2VjdGlvbnM6OkZ1bmN0aW9uVHlwZXM6IHsKLSAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2lu
ZyB0eXBlcy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvblR5cGVzKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgICAgIG1fZXJy
b3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIHR5cGVzIjsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgU2VjdGlvbnM6OlNpZ25hdHVyZXM6IHsKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzaWdu
YXR1cmVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAgICAgICAgICAgICBt
X2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSBmdW5jdGlvbiBzaWduYXR1cmVzIjsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgU2VjdGlvbnM6OkRlZmluaXRpb25zOiB7
Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBh
cnNpbmcgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIik7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRnVu
Y3Rpb25EZWZpbml0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBl
cnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5
MTkKLSAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSBmdW5j
dGlvbiBkZWZpbml0aW9ucyI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNl
Y3Rpb25zOjpVbmtub3duOgotICAgICAgICAvLyBGSVhNRTogRGVsZXRlIHRoaXMgd2hlbiB3ZSBz
dXBwb3J0IGFsbCB0aGUgc2VjdGlvbnMuCi0gICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgLy8g
RklYTUUgaW1wcm92ZSBlcnJvciBtZXNzYWdlIGluIG1hY3JvIGJlbG93IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX1BB
UlNFKE5BTUUsIElELCBERVNDUklQVElPTikgXAorICAgICAgICBjYXNlIFNlY3Rpb25zOjpOQU1F
OiB7IFwKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSBcCisgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJQYXJzaW5nICIgREVTQ1JJUFRJT04pOyBcCisgICAgICAgICAgICBpZiAoIXBhcnNlICMj
IE5BTUUoKSkgeyBcCisgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3Qg
cGFyc2Ugc2VjdGlvbiAiICNOQU1FICI6ICIgREVTQ1JJUFRJT047IFwKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9IGJyZWFrOworICAg
ICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT04oV0FTTV9TRUNUSU9OX1BBUlNFKQorI3VuZGVmIFdB
U01fU0VDVElPTl9QQVJTRQorCisgICAgICAgIGNhc2UgU2VjdGlvbnM6OlVua25vd246IHsKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiVW5rbm93
biBzZWN0aW9uLCBza2lwcGluZy4iKTsKICAgICAgICAgICAgIC8vIElnbm9yZSBzZWN0aW9uJ3Mg
bmFtZSBMRUIgYW5kIGJ5dGVzOiB0aGV5J3JlIGFscmVhZHkgaW5jbHVkZWQgaW4gc2VjdGlvbkxl
bmd0aC4KQEAgLTE4NCw3OSArMTUzLDUzIEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZSgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCi17
Ci0gICAgdWludDhfdCBmbGFnczsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1aW50MzJfdCBzaXplOwotICAgIGlmICghcGFyc2VW
YXJVSW50MzIoc2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc2l6ZSA+IG1h
eFBhZ2VDb3VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDMyX3QgY2FwYWNp
dHkgPSBtYXhQYWdlQ291bnQ7Ci0gICAgaWYgKGZsYWdzKSB7Ci0gICAgICAgIGlmICghcGFyc2VW
YXJVSW50MzIoY2FwYWNpdHkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoc2l6ZSA+IGNhcGFjaXR5IHx8IGNhcGFjaXR5ID4gbWF4UGFnZUNvdW50KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNhcGFjaXR5ICo9IHBhZ2VTaXplOwotICAg
IHNpemUgKj0gcGFnZVNpemU7Ci0KLSAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0g
eyAwIH07Ci0gICAgbV9tZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lbW9yeT4oc2l6ZSwgY2Fw
YWNpdHksIHBpbm5lZFNpemVzKTsKLSAgICByZXR1cm4gbV9tZW1vcnktPm1lbW9yeSgpOwotfQot
Ci1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblR5cGVzKCkKK2Jvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZVR5cGUoKQogewogICAgIHVpbnQzMl90IGNvdW50OwogICAgIGlmICghcGFyc2VW
YXJVSW50MzIoY291bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgZGF0YUxvZ0xuKCJjb3VudDogIiwgY291bnQpOwotCi0gICAgbV9zaWduYXR1
cmVzLnJlc2l6ZShjb3VudCk7Ci0KKyAgICBpZiAoIW1fbW9kdWxlLT5zaWduYXR1cmVzLnRyeVJl
c2VydmVDYXBhY2l0eShjb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB1aW50OF90IHR5
cGU7Ci0gICAgICAgIGlmICghcGFyc2VVSW50Nyh0eXBlKSkKKyAgICAgICAgaW50OF90IHR5cGU7
CisgICAgICAgIGlmICghcGFyc2VJbnQ3KHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAodHlwZSAhPSAweDQwKSAvLyBGdW5jdGlvbiB0eXBlIGNvbnN0YW50Lgor
ICAgICAgICBpZiAodHlwZSAhPSAtMHgyMCkgLy8gRnVuY3Rpb24gdHlwZSBjb25zdGFudC4KICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkdvdCBmdW5jdGlvbiB0eXBlLiIpOwotCisgICAgICAg
IAogICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50OwogICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKGFyZ3VtZW50Q291bnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAg
ICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiYXJndW1l
bnRDb3VudDogIiwgYXJndW1lbnRDb3VudCk7Ci0KKyAgICAgICAgCiAgICAgICAgIFZlY3RvcjxU
eXBlPiBhcmd1bWVudFR5cGVzOwotICAgICAgICBhcmd1bWVudFR5cGVzLnJlc2l6ZShhcmd1bWVu
dENvdW50KTsKKyAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzLnRyeVJlc2VydmVDYXBhY2l0eShh
cmd1bWVudENvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXBhcnNlVUludDcodHlwZSkgfHwgIWlzVmFsdWVUeXBlKHN0YXRpY19jYXN0PFR5cGU+KHR5
cGUpKSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBhcmd1bWVudENvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYXJndW1lbnRUeXBlOworICAgICAgICAgICAgaWYg
KCFwYXJzZVVJbnQ3KGFyZ3VtZW50VHlwZSkgfHwgIWlzVmFsdWVUeXBlKHN0YXRpY19jYXN0PFR5
cGU+KGFyZ3VtZW50VHlwZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGFyZ3VtZW50VHlwZXNbaV0gPSBzdGF0aWNfY2FzdDxUeXBlPih0eXBlKTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50VHlwZXMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PFR5cGU+KGFy
Z3VtZW50VHlwZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKHR5
cGUpKQorICAgICAgICB1aW50OF90IHJldHVybkNvdW50OworICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDEocmV0dXJuQ291bnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBU
eXBlIHJldHVyblR5cGU7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZ0xuKHR5cGUpOwotCi0gICAgICAgIGlmICh0eXBlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG4ocmV0dXJuQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKHJldHVybkNv
dW50KSB7CiAgICAgICAgICAgICBUeXBlIHZhbHVlOwogICAgICAgICAgICAgaWYgKCFwYXJzZVZh
bHVlVHlwZSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjY0LDQ4
ICsyMDcsMTk1IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uVHlwZXMoKQogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOwogCi0gICAg
ICAgIG1fc2lnbmF0dXJlc1tpXSA9IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVudFR5cGVz
KSB9OworICAgICAgICBtX21vZHVsZS0+c2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoeyByZXR1
cm5UeXBlLCBXVEZNb3ZlKGFyZ3VtZW50VHlwZXMpIH0pOwogICAgIH0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCkKK2Jv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCiB7Ci0gICAgdWludDMyX3QgY291bnQ7Ci0g
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCisgICAgdWludDMyX3QgaW1wb3J0Q291bnQ7
CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbXBvcnRDb3VudCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIW1fbW9kdWxlLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBv
cnRDb3VudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZnVuY3Rpb25zLnJlc2l6
ZShjb3VudCk7CisgICAgZm9yICh1aW50MzJfdCBpbXBvcnROdW1iZXIgPSAwOyBpbXBvcnROdW1i
ZXIgIT0gaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CisgICAgICAgIEltcG9ydCBpOwor
ICAgICAgICB1aW50MzJfdCBtb2R1bGVMZW47CisgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOwor
ICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKG1vZHVsZUxlbikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghY29uc3VtZVVURjhTdHJpbmcoaS5tb2R1bGUsIG1vZHVs
ZUxlbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VWYXJV
SW50MzIoZmllbGRMZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWNvbnN1bWVVVEY4U3RyaW5nKGkuZmllbGQsIGZpZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFwYXJzZUV4dGVybmFsS2luZChpLmtpbmQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKGkua2luZCkgeworICAgICAgICBj
YXNlIEV4dGVybmFsOjpGdW5jdGlvbjogeworICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25T
aWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25T
aWduYXR1cmVJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXggPiBtX21vZHVsZS0+c2lnbmF0dXJlcy5zaXpl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaS5mdW5jdGlv
blNpZ25hdHVyZSA9ICZtX21vZHVsZS0+c2lnbmF0dXJlc1tmdW5jdGlvblNpZ25hdHVyZUluZGV4
XTsKKyAgICAgICAgfSBicmVhazsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6VGFibGU6CisgICAg
ICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0MTM1CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5
OgorICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDEzNAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6
Okdsb2JhbDoKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMzMKKyAgICAgICAgICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1t
dXRhYmxlIGdsb2JhbCB2YXJpYWJsZXMgY2FuIGJlIGltcG9ydGVkLgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIG1fbW9kdWxlLT5pbXBvcnRzLnVuY2hlY2tlZEFwcGVuZChpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1
bmN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9tb2R1bGUtPmZ1bmN0
aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CiAgICAgICAg
IHVpbnQzMl90IHR5cGVOdW1iZXI7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodHlwZU51
bWJlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHR5cGVOdW1i
ZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgCisgICAgICAgIGlmICh0eXBlTnVt
YmVyID49IG1fbW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBtX2Z1bmN0aW9uc1tpXS5zaWduYXR1cmUgPSAmbV9zaWduYXR1cmVz
W3R5cGVOdW1iZXJdOworICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVu
ZCh7ICZtX21vZHVsZS0+c2lnbmF0dXJlc1t0eXBlTnVtYmVyXSwgMCwgMCB9KTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VU
YWJsZSgpCit7CisgICAgLy8gRklYTUUKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkKK3sKKyAgICB1aW50OF90IGZsYWdzOworICAgIGlmICgh
cGFyc2VWYXJVSW50MShmbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQz
Ml90IHNpemU7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihzaXplKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChzaXplID4gbWF4UGFnZUNvdW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB1aW50MzJfdCBjYXBhY2l0eSA9IG1heFBhZ2VDb3VudDsKKyAgICBpZiAoZmxh
Z3MpIHsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjYXBhY2l0eSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkgfHwgY2FwYWNpdHkg
PiBtYXhQYWdlQ291bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAg
Y2FwYWNpdHkgKj0gcGFnZVNpemU7CisgICAgc2l6ZSAqPSBwYWdlU2l6ZTsKKworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKKyAgICBtX21vZHVsZS0+bWVtb3J5ID0g
c3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7Cisg
ICAgcmV0dXJuIG1fbW9kdWxlLT5tZW1vcnktPm1lbW9yeSgpOworfQorICAgIAorYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkKK3sKKyAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAg
Citib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQoKQoreworICAgIHVpbnQzMl90IGV4cG9y
dENvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoZXhwb3J0Q291bnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX21vZHVsZS0+ZXhwb3J0cy50cnlSZXNlcnZlQ2FwYWNp
dHkoZXhwb3J0Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICh1
aW50MzJfdCBleHBvcnROdW1iZXIgPSAwOyBleHBvcnROdW1iZXIgIT0gZXhwb3J0Q291bnQ7ICsr
ZXhwb3J0TnVtYmVyKSB7CisgICAgICAgIEV4cG9ydCBlOworICAgICAgICB1aW50MzJfdCBmaWVs
ZExlbjsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbikpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghY29uc3VtZVVURjhTdHJpbmcoZS5maWVsZCwg
ZmllbGRMZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXBhcnNl
RXh0ZXJuYWxLaW5kKGUua2luZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHN3aXRjaCAoZS5raW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6OkZ1bmN0aW9uOiB7Cisg
ICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvblNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25TaWduYXR1cmVJbmRl
eCA+IG1fbW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBlLmZ1bmN0aW9uU2lnbmF0dXJlID0gJm1fbW9kdWxlLT5zaWdu
YXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdOworICAgICAgICB9IGJyZWFrOworICAgICAg
ICBjYXNlIEV4dGVybmFsOjpUYWJsZToKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6CisgICAgICAgICAgICAvLyBGSVhNRSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOgorICAgICAgICAgICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgICAg
ICAgICAgLy8gSW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFsIHZhcmlhYmxlcyBjYW4g
YmUgZXhwb3J0ZWQuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbV9tb2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKGUpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVN0YXJ0
KCkKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpCit7CisgICAgLy8gRklYTUUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpCiti
b29sIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkKIHsKICAgICB1aW50MzJfdCBjb3VudDsKICAg
ICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKGNvdW50ICE9IG1fZnVuY3Rpb25zLnNpemUoKSkKKyAgICBpZiAoY291bnQgIT0gbV9t
b2R1bGUtPmZ1bmN0aW9ucy5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2l6ZTsK
ICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpemUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZnVuY3Rpb25TaXplID4gbGVuZ3RoKCkgfHwgZnVu
Y3Rpb25TaXplID4gbGVuZ3RoKCkgLSBtX29mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbaV07
CisgICAgICAgIEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8gPSBtX21vZHVsZS0+ZnVuY3Rpb25z
W2ldOwogICAgICAgICBpbmZvLnN0YXJ0ID0gbV9vZmZzZXQ7CiAgICAgICAgIGluZm8uZW5kID0g
bV9vZmZzZXQgKyBmdW5jdGlvblNpemU7CiAgICAgICAgIG1fb2Zmc2V0ID0gaW5mby5lbmQ7CkBA
IC0zMTMsNiArNDAzLDEyIEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5p
dGlvbnMoKQogCiAgICAgcmV0dXJuIHRydWU7CiB9CisgICAgCitib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VEYXRhKCkKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiB0cnVlOworfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmgKaW5kZXggMzgyOTNhYy4uODk5YmYyMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaApAQCAtMjcsNyArMjcsNyBAQAog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2Fz
bVBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU2LDI3ICs1NiwxOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsKICAgICB9CiAKLSAgICBjb25z
dCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9uSW5mb3JtYXRpb24oKSBjb25z
dAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0
aW9uKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAg
IHJldHVybiBtX2Z1bmN0aW9uczsKLSAgICB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4m
IG1lbW9yeSgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAg
ICAgICByZXR1cm4gbV9tZW1vcnk7CisgICAgICAgIHJldHVybiBtX21vZHVsZTsKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VNZW1vcnkoKTsKLSAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uVHlwZXMoKTsKLSAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uU2lnbmF0dXJlcygpOwotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpOwotICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKHVpbnQzMl90IG51bWJl
cik7CisjZGVmaW5lIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUihOQU1FLCBJRCwgREVTQ1JJ
UFRJT04pIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlICMjIE5BTUUoKTsKKyAgICBGT1Jf
RUFDSF9XQVNNX1NFQ1RJT04oV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKQorI3VuZGVmIFdB
U01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUgogCi0gICAgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRp
b24+IG1fZnVuY3Rpb25zOwotICAgIFZlY3RvcjxTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtX21lbW9yeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwogICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07
CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QYXJzZXIuaAppbmRleCA0NmE3YjM5Li40Y2Y2M2VmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAiV2FzbU9w
cy5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9MRUJEZWNvZGVy
Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC00Miwx
NCArNDQsMTcgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gY29u
c3VtZUNoYXJhY3RlcihjaGFyKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1l
U3RyaW5nKGNvbnN0IGNoYXIqKTsKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1l
VVRGOFN0cmluZyhTdHJpbmcgJiwgc2l6ZV90KTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVU
VVJOIHBhcnNlVmFyVUludDEodWludDhfdCYgcmVzdWx0KTsKKyAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZUludDcoaW50OF90JiByZXN1bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlVUludDcodWludDhfdCYgcmVzdWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKICAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQzMihtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zm
c2V0LCByZXN1bHQpOyB9CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50
NjQodWludDY0X3QmIHJlc3VsdCkgeyByZXR1cm4gV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50
NjQobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsgfQogCiAgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUoVHlwZSYgcmVzdWx0KTsKKyAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbDo6S2lu
ZCYgcmVzdWx0KTsKIAogICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlOyB9CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
TGVuZ3RoOyB9CkBAIC05Miw2ICs5NywyMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpj
b25zdW1lU3RyaW5nKGNvbnN0IGNoYXIqIHN0cikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQUxX
QVlTX0lOTElORSBib29sIFBhcnNlcjo6Y29uc3VtZVVURjhTdHJpbmcoU3RyaW5nICZyZXN1bHQs
IHNpemVfdCBzdHJpbmdMZW5ndGgpCit7CisgICAgaWYgKHN0cmluZ0xlbmd0aCA9PSAwKSB7Cisg
ICAgICAgIHJlc3VsdCA9IFN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgaWYgKGxlbmd0aCgpIDwgc3RyaW5nTGVuZ3RoIHx8IG1fb2Zmc2V0ID4gbGVuZ3RoKCkgLSBz
dHJpbmdMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBTdHJpbmc6
OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0IExDaGFyKj4oJnNvdXJjZSgpW21fb2Zmc2V0XSks
IHN0cmluZ0xlbmd0aCk7CisgICAgbV9vZmZzZXQgKz0gc3RyaW5nTGVuZ3RoOworICAgIGlmIChy
ZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDMyKHVpbnQzMl90JiBy
ZXN1bHQpCiB7CiAgICAgaWYgKGxlbmd0aCgpIDwgNCB8fCBtX29mZnNldCA+IGxlbmd0aCgpIC0g
NCkKQEAgLTEwMSw2ICsxMjEsMTUgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VV
SW50MzIodWludDMyX3QmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQUxXQVlTX0lO
TElORSBib29sIFBhcnNlcjo6cGFyc2VJbnQ3KGludDhfdCYgcmVzdWx0KQoreworICAgIGlmICht
X29mZnNldCA+PSBsZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVpbnQ4X3Qg
diA9IHNvdXJjZSgpW21fb2Zmc2V0KytdOworICAgIHJlc3VsdCA9ICh2ICYgMHg0MCkgPyBXVEY6
OmJpdHdpc2VfY2FzdDxpbnQ4X3Q+KHVpbnQ4X3QodiB8IDB4ODApKSA6IHY7CisgICAgcmV0dXJu
ICh2ICYgMHg4MCkgPT0gMDsKK30KKwogQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VV
SW50Nyh1aW50OF90JiByZXN1bHQpCiB7CiAgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQpA
QCAtMTI4LDYgKzE1NywxNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVZhbHVl
VHlwZShUeXBlJiByZXN1bHQpCiAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUp
OwogICAgIHJldHVybiB0cnVlOwogfQorICAgIAorQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6
cGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWw6OktpbmQmIHJlc3VsdCkKK3sKKyAgICB1aW50OF90
IHZhbHVlOworICAgIGlmICghcGFyc2VVSW50Nyh2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIUV4dGVybmFsOjppc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEV4dGVybmFsOjpLaW5kPih2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAppbmRleCA3MzliZTQyLi4yZTAyOGQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCkBAIC0zMSw5ICszMSwxMSBA
QAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21N
ZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbVZh
bGlkYXRlLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAg
LTQ4LDQwICs1MCw1MCBAQCBQbGFuOjpQbGFuKFZNJiB2bSwgY29uc3QgdWludDhfdCogc291cmNl
LCBzaXplX3Qgc291cmNlTGVuZ3RoKQogewogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nTG4oIlN0YXJ0aW5nIHBsYW4uIik7Ci0gICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihz
b3VyY2UsIHNvdXJjZUxlbmd0aCk7Ci0gICAgaWYgKCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgewot
ICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9kdWxlIGZhaWxlZDogIiwgbW9kdWxlUGFyc2Vy
LmVycm9yTWVzc2FnZSgpKTsKLSAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtb2R1bGVQYXJzZXIu
ZXJyb3JNZXNzYWdlKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICB7CisgICAgICAgIE1vZHVsZVBh
cnNlciBtb2R1bGVQYXJzZXIoc291cmNlLCBzb3VyY2VMZW5ndGgpOworICAgICAgICBpZiAoIW1v
ZHVsZVBhcnNlci5wYXJzZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgbW9k
dWxlIGZhaWxlZDogIiwgbW9kdWxlUGFyc2VyLmVycm9yTWVzc2FnZSgpKTsKKyAgICAgICAgICAg
IG1fZXJyb3JNZXNzYWdlID0gbW9kdWxlUGFyc2VyLmVycm9yTWVzc2FnZSgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fbW9kdWxlSW5mb3JtYXRpb24gPSBXVEZN
b3ZlKG1vZHVsZVBhcnNlci5tb2R1bGVJbmZvcm1hdGlvbigpKTsKICAgICB9Ci0KICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzZWQgbW9kdWxlLiIpOwogCi0gICAgZm9y
IChjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvIDogbW9kdWxlUGFyc2VyLmZ1bmN0aW9u
SW5mb3JtYXRpb24oKSkgeworICAgIGlmICghbV9jb21waWxlZEZ1bmN0aW9ucy50cnlSZXNlcnZl
Q2FwYWNpdHkobV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKSkpIHsKKyAgICAg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IkZhaWxlZCBhbGxvY2F0aW5nIGVub3VnaCBzcGFjZSBmb3IgIik7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTnVtYmVyKG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCkpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb21waWxlZCBmdW5jdGlvbnMiKTsKKyAgICAg
ICAgbV9lcnJvck1lc3NhZ2UgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBmb3IgKGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8gOiBtX21v
ZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgZnVuY2lvbiBzdGFydGluZyBhdDogIiwgaW5m
by5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBpbmZvLmVuZCk7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIlByb2Nlc3NpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQsICIg
YW5kIGVuZGluZyBhdDogIiwgaW5mby5lbmQpOwogICAgICAgICBjb25zdCB1aW50OF90KiBmdW5j
dGlvblN0YXJ0ID0gc291cmNlICsgaW5mby5zdGFydDsKICAgICAgICAgc2l6ZV90IGZ1bmN0aW9u
TGVuZ3RoID0gaW5mby5lbmQgLSBpbmZvLnN0YXJ0OwogICAgICAgICBBU1NFUlQoZnVuY3Rpb25M
ZW5ndGggPD0gc291cmNlTGVuZ3RoKTsKIAotICAgICAgICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0
ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBpbmZvLnNpZ25hdHVyZSwg
bW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSk7CisgICAgICAgIFN0cmluZyBlcnJv
ciA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIGluZm8u
c2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMpOwogICAgICAgICBpZiAo
IWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9yZXN1bHQuYXBwZW5k
KHBhcnNlQW5kQ29tcGlsZSh2bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIG1vZHVs
ZVBhcnNlci5tZW1vcnkoKS5nZXQoKSwgaW5mby5zaWduYXR1cmUsIG1vZHVsZVBhcnNlci5mdW5j
dGlvbkluZm9ybWF0aW9uKCkpKTsKKyAgICAgICAgbV9jb21waWxlZEZ1bmN0aW9ucy51bmNoZWNr
ZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKHZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpLCBpbmZvLnNpZ25hdHVyZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zKSk7CiAgICAgfQogCiAgICAgLy8gUGF0Y2ggdGhl
IGNhbGwgc2l0ZXMgZm9yIGVhY2ggZnVuY3Rpb24uCi0gICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8
RnVuY3Rpb25Db21waWxhdGlvbj4mIGZ1bmN0aW9uUHRyIDogbV9yZXN1bHQpIHsKKyAgICBmb3Ig
KHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIgOiBtX2Nv
bXBpbGVkRnVuY3Rpb25zKSB7CiAgICAgICAgIEZ1bmN0aW9uQ29tcGlsYXRpb24qIGZ1bmN0aW9u
ID0gZnVuY3Rpb25QdHIuZ2V0KCk7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGZ1bmN0aW9u
LT51bmxpbmtlZENhbGxzKQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChtX3Jlc3VsdFtjYWxsLmZ1bmN0
aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwobV9jb21waWxl
ZEZ1bmN0aW9uc1tjYWxsLmZ1bmN0aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsKICAgICB9CiAK
LSAgICBtX21lbW9yeSA9IFdURk1vdmUobW9kdWxlUGFyc2VyLm1lbW9yeSgpKTsKICAgICBtX2Zh
aWxlZCA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRl
eCBiODRmOWQ3Li5hN2M4MDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgK
QEAgLTM4LDggKzM4LDYgQEAgY2xhc3MgTWVtb3J5OwogCiBjbGFzcyBQbGFuIHsKIHB1YmxpYzoK
LSAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4+
IENvbXBpbGVkRnVuY3Rpb25zOwotCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZl
Y3Rvcjx1aW50OF90Pik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5QbGFuKCk7CkBAIC01MCwz
NiArNDgsMzcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWlsZWQoKSk7CiAg
ICAgICAgIHJldHVybiBtX2Vycm9yTWVzc2FnZTsKICAgICB9Ci0gICAgc2l6ZV90IHJlc3VsdFNp
emUoKSBjb25zdAorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4m
IGdldE1vZHVsZUluZm9ybWF0aW9uKCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFm
YWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdC5zaXplKCk7CisgICAgICAgIHJldHVy
biBtX21vZHVsZUluZm9ybWF0aW9uOwogICAgIH0KLSAgICBjb25zdCBGdW5jdGlvbkNvbXBpbGF0
aW9uKiByZXN1bHQoc2l6ZV90IG4pIGNvbnN0CisgICAgY29uc3QgTWVtb3J5KiBnZXRNZW1vcnko
KSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fcmVzdWx0LmF0KG4pLmdldCgpOworICAgICAgICByZXR1cm4gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpOwogICAgIH0KLSAgICBjb25zdCBNZW1vcnkqIG1lbW9y
eSgpIGNvbnN0CisgICAgc2l6ZV90IGNvbXBpbGVkRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9t
ZW1vcnkuZ2V0KCk7CisgICAgICAgIHJldHVybiBtX2NvbXBpbGVkRnVuY3Rpb25zLnNpemUoKTsK
ICAgICB9Ci0gICAgCi0gICAgQ29tcGlsZWRGdW5jdGlvbnMqIGdldEZ1bmN0aW9ucygpCisgICAg
Y29uc3QgRnVuY3Rpb25Db21waWxhdGlvbiogY29tcGlsZWRGdW5jdGlvbihzaXplX3QgaSkgY29u
c3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJl
dHVybiAmbV9yZXN1bHQ7CisgICAgICAgIHJldHVybiBtX2NvbXBpbGVkRnVuY3Rpb25zLmF0KGkp
LmdldCgpOwogICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiogZ2V0TWVtb3J5KCkK
KyAgICBDb21waWxlZEZ1bmN0aW9ucyYgZ2V0Q29tcGlsZWRGdW5jdGlvbnMoKQogICAgIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuICZtX21lbW9y
eTsKKyAgICAgICAgcmV0dXJuIG1fY29tcGlsZWRGdW5jdGlvbnM7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIENvbXBpbGVkRnVuY3Rpb25zIG1fcmVzdWx0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxN
ZW1vcnk+IG1fbWVtb3J5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4g
bV9tb2R1bGVJbmZvcm1hdGlvbjsKKyAgICBDb21waWxlZEZ1bmN0aW9ucyBtX2NvbXBpbGVkRnVu
Y3Rpb25zOworCiAgICAgYm9vbCBtX2ZhaWxlZCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaApp
bmRleCA3MjU3ODY3Li45OTYwNTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU2VjdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2VjdGlvbnMuaApAQCAtMjksMTIgKzI5LDI0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKKyNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKG1hY3JvKSBcCisgICAg
bWFjcm8oVHlwZSwgICAgIDEsICJGdW5jdGlvbiBzaWduYXR1cmUgZGVjbGFyYXRpb25zIikgXAor
ICAgIG1hY3JvKEltcG9ydCwgICAyLCAiSW1wb3J0IGRlY2xhcmF0aW9ucyIpIFwKKyAgICBtYWNy
byhGdW5jdGlvbiwgMywgIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyIpIFwKKyAgICBtYWNybyhUYWJs
ZSwgICAgNCwgIkluZGlyZWN0IGZ1bmN0aW9uIHRhYmxlIGFuZCBvdGhlciB0YWJsZXMiKSBcCisg
ICAgbWFjcm8oTWVtb3J5LCAgIDUsICJNZW1vcnkgYXR0cmlidXRlcyIpIFwKKyAgICBtYWNybyhH
bG9iYWwsICAgNiwgIkdsb2JhbCBkZWNsYXJhdGlvbnMiKSBcCisgICAgbWFjcm8oRXhwb3J0LCAg
IDcsICJFeHBvcnRzIikgXAorICAgIG1hY3JvKFN0YXJ0LCAgICA4LCAiU3RhcnQgZnVuY3Rpb24g
ZGVjbGFyYXRpb24iKSBcCisgICAgbWFjcm8oRWxlbWVudCwgIDksICJFbGVtZW50cyBzZWN0aW9u
IikgXAorICAgIG1hY3JvKENvZGUsICAgIDEwLCAiRnVuY3Rpb24gYm9kaWVzIChjb2RlKSIpIFwK
KyAgICBtYWNybyhEYXRhLCAgICAxMSwgIkRhdGEgc2VnbWVudHMiKQorCiBzdHJ1Y3QgU2VjdGlv
bnMgewogICAgIGVudW0gU2VjdGlvbiA6IHVpbnQ4X3QgewotICAgICAgICBGdW5jdGlvblR5cGVz
ID0gMSwKLSAgICAgICAgU2lnbmF0dXJlcyA9IDMsCi0gICAgICAgIE1lbW9yeSA9IDUsCi0gICAg
ICAgIERlZmluaXRpb25zID0gMTAsCisjZGVmaW5lIERFRklORV9XQVNNX1NFQ1RJT05fRU5VTShO
QU1FLCBJRCwgREVTQ1JJUFRJT04pIE5BTUUgPSBJRCwKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9T
RUNUSU9OKERFRklORV9XQVNNX1NFQ1RJT05fRU5VTSkKKyN1bmRlZiBERUZJTkVfV0FTTV9TRUNU
SU9OX0VOVU0KICAgICAgICAgVW5rbm93bgogICAgIH07CiAgICAgc3RhdGljIGJvb2wgdmFsaWRh
dGVPcmRlcihTZWN0aW9uIHByZXZpb3VzLCBTZWN0aW9uIG5leHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IDY1
Y2NhOTUuLmQ2YmEzODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0zNSw5ICszNSw5IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4qIGNvbXBpbGVkRnVuY3Rpb25zLCBzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6TWVtb3J5PiogbWVtb3J5KQorSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uLCBX
YXNtOjpDb21waWxlZEZ1bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMpCiB7Ci0gICAgYXV0byog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxl
Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBjb21waWxlZEZ1
bmN0aW9ucywgbWVtb3J5KTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9k
dWxlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLCBjb21waWxlZEZ1bmN0aW9ucyk7
CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CkBAIC00NywxMCArNDcsMTAgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1i
bHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4qIGNv
bXBpbGVkRnVuY3Rpb25zLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiogbWVtb3J5KQor
SlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiBt
b2R1bGVJbmZvcm1hdGlvbiwgV2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rp
b25zKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICwgbV9jb21waWxlZEZ1bmN0aW9u
cyhXVEZNb3ZlKCpjb21waWxlZEZ1bmN0aW9ucykpCi0gICAgLCBtX21lbW9yeShXVEZNb3ZlKCpt
ZW1vcnkpKQorICAgICwgbV9tb2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKG1vZHVsZUluZm9ybWF0
aW9uKSkKKyAgICAsIG1fY29tcGlsZWRGdW5jdGlvbnMoV1RGTW92ZShjb21waWxlZEZ1bmN0aW9u
cykpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaAppbmRleCBhNDM4YTYxLi45ZGEyMTIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC0yOSwz
MiArMjksMzIgQEAKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1zdHJ1Y3QgRnVuY3Rpb25Db21waWxhdGlvbjsKLWNsYXNz
IE1lbW9yeTsKLX0KLQogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVj
dCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlv
bj4+Kiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qKTsKKyAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJik7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAorICAgIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uKiBtb2R1bGVJbmZvcm1hdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsKKyAgICB9CisKIHByb3RlY3RlZDoKLSAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4qLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVt
b3J5PiopOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiwgV2FzbTo6Q29tcGlsZWRGdW5jdGlv
bnMmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0KIHByaXZhdGU6Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4gbV9jb21waWxlZEZ1bmN0aW9uczsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CisgICAgV2FzbTo6Q29t
cGlsZWRGdW5jdGlvbnMgbV9jb21waWxlZEZ1bmN0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTlmZjExZC4uYzhhZWEy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC02NCw4ICs2NCw5IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShFeGVjU3RhdGUqIHN0CiAgICAgaWYgKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVmaW5l
ZCgpICYmICFpbXBvcnRPYmplY3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0
ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5k
ZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBl
Rm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOwogCi0gICAgLy8gRklYTUUgdXNlIHRoZSBpbXBv
cnRPYmplY3QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMzkK
ICAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3QgZW1wdHkgYW5kIFR5
cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCisg
ICAgaWYgKG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS0+aW1wb3J0cy5zaXplKCkgJiYgIWlt
cG9ydE9iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNv
bmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBPYmplY3QgYmVjYXVz
ZSB0aGUgV2ViQXNzZW1ibHkuTW9kdWxlIGhhcyBpbXBvcnRzIiksIGRlZmF1bHRTb3VyY2VBcHBl
bmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAKICAgICAvLyBG
SVhNRSBTdHJpbmcgdGhpbmdzIGZyb20gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDAyMwogICAgIC8vIExldCBleHBvcnRzIGJlIGEgbGlzdCBvZiAoc3RyaW5nLCBK
UyB2YWx1ZSkgcGFpcnMgdGhhdCBpcyBtYXBwZWQgZnJvbSBlYWNoIGV4dGVybmFsIHZhbHVlIGUg
aW4gaW5zdGFuY2UuZXhwb3J0cyBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cAppbmRleCAxYzU4MmI0Li5jZmNhYzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcApA
QCAtNDcsNiArNDcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
MTM0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5IGRvZXNuJ3Qg
eWV0IGltcGxlbWVudCB0aGUgTWVtb3J5IGNvbnN0cnVjdG9yIHByb3BlcnR5IikpKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMGIwNTVhMC4uYmI2ODRlMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTczLDEzICs3MywxMSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNT
dGF0ZSogc3RhdAogICAgIGlmIChwbGFuLmZhaWxlZCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlV2ViQXNzZW1ibHlD
b21waWxlRXJyb3Ioc3RhdGUsIHBsYW4uZXJyb3JNZXNzYWdlKCkpKSk7CiAKLSAgICAvLyBUaGUg
c3BlYyBzdHJpbmcgdmFsdWVzIGluc2lkZSBBc3QubW9kdWxlIGFyZSBkZWNvZGVkIGFzIFVURjgg
YXMgZGVzY3JpYmVkIGluIFdlYi5tZC4gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDAyMwotCiAgICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2
YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBh
c0ludGVybmFsRnVuY3Rpb24oc3RhdGUtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPldlYkFz
c2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFz
c2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcGxhbi5nZXRGdW5jdGlvbnMoKSwg
cGxhbi5nZXRNZW1vcnkoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRp
b24oKSwgcGxhbi5nZXRDb21waWxlZEZ1bmN0aW9ucygpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSog
c3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcAppbmRleCBjYWE3ZTllLi5jOTU4MGJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxl
Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseVRhYmxlKEV4ZWNT
dGF0ZSogc3RhdGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwgQVNDSUlM
aXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIFRhYmxlIGNvbnN0
cnVjdG9yIHByb3BlcnR5IikpKSk7CiB9CiAKLS0gCjIuOS4zCgo=
</data>
<flag name="review"
          id="316726"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293867</attachid>
            <date>2016-11-03 22:24:22 -0700</date>
            <delta_ts>2016-11-04 14:40:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-more-sections.patch</filename>
            <type>text/plain</type>
            <size>153904</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA0Nzc5MjVmMGRiZTVlOWYzOWM5ZWNhMjk1M2NlN2RkYjNjZWZhNzUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDI3IE9jdCAyMDE2IDE0OjM0OjA0IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0aW9ucwoKT24gdGhlIEpTQyBzaWRlOgoK
IC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgogLSBQ
YXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0aW9ucy4KIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBp
bnN0ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxz
LiBUaGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24g
d2hlbiBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgogLSBFbmNhcHN1bGF0ZSBhbGwgcGFy
c2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQg
ZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJ
bnN0YW5jZSkuCiAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1bGUg
aW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVlZGxl
c3NseS4KIC0gUmVtb3ZlIGFsbCByZW1haW5kZXJzIG9mIHBvbHlmaWxsLXByb3RvdHlwZS0xLCBh
bmQgdXBkYXRlIGxpY2Vuc2UuCiAtIEFkZCBtaXNzaW5nIFdhc21PcHMuaCBhbmQgV2FzbVZhbGlk
YXRlSW5saW5lcy5oIGF1dG8tZ2VuZXJhdGlvbiBmb3IgY21ha2UgYnVpbGQuCgpPbiB0aGUgQnVp
bGRlci5qcyB0ZXN0aW5nIHNpZGU6CgogLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KIC0gQ2hlY2sgc2VjdGlv
biBvcmRlciBhbmQgdW5pcXVlbmVzcy4KIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRoZSBU
eXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50cmll
cy4KIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NyArKysKIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzAzICsrKysrKysrKyst
LS0KIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzICAgICAgICAgIHwg
MTA3ICsrKysrCiBKU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMgICAgICAgICAgICAgICAg
ICAgICB8ICAxMiArCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgOSArCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICA4NyArKystCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpz
ICAgICAgICAgICAgICAgICB8ICAxMCArCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNf
YXBpLmpzICAgICAgICAgICAgICB8ICAgOCArLQogSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0
X0J1aWxkZXJKU09OLmpzICAgICAgICAgfCA0OTAgKysrKysrKysrKysrKysrLS0tLS0tCiBKU1Rl
c3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzICB8ICAxMyAtCiBK
U1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfV0FTTS5qcyAgICAgICAgICAgICAgICB8ICAxMiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgfCAg
MTcgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
fCAgNzQgKysrKwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
ICAgICAgfCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgICAgICAg
ICAgICAgICAgIHwgMjY2ICsrKysrLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmNwcCAgICAgICAgICB8ICAgNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oICAgICAgICAgICAgfCAgOTcgKystLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgICAgfCAzMTYgKysrKysrKystLS0tLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oICAgICAgfCAgMjMgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCAgICAgICAgICAgIHwgIDQw
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAgICB8
ICAzOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCAgICAgICAgICAg
ICAgfCAgMjkgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oICAg
ICAgICAgIHwgIDIwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcCB8ICAxMCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oICAgfCAgMjAgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHAgICAgIHwgICAzICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgMSArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1i
bHlUYWJsZUNvbnN0cnVjdG9yLmNwcCAgICAgICAgfCAgIDEgKwogMjkgZmlsZXMgY2hhbmdlZCwg
MTQ5NiBpbnNlcnRpb25zKCspLCA1ODUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
SlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQxZWI3ODkuLmE4M2Nj
NGEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNjAgQEAKKzIwMTYtMTEtMDIgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IG1vcmUgc2Vj
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDAyMworCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICBPbiB0
aGUgSlNDIHNpZGU6CisKKyAgICAgICAgIC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdl
YkFzc2VtYmx5IHNlY3Rpb25zLgorICAgICAgICAgLSBQYXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0
aW9ucy4KKyAgICAgICAgIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBpbnN0ZWFkIG9mIHJlc2Vy
dmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxzLiBUaGlzIHByZXZlbnRz
IHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24gd2hlbiBmYWNlZCB3aXRo
IGEgbWFsaWNpb3VzIGlucHV0LgorICAgICAgICAgLSBFbmNhcHN1bGF0ZSBhbGwgcGFyc2VkIG1v
ZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQgZWFzaWVy
IHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJbnN0YW5j
ZSkuCisgICAgICAgICAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1
bGUgaW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVl
ZGxlc3NseS4KKyAgICAgICAgIC0gcGFyc2VDb2RlOiBhdm9pZCBvdmVyZmxvdyB0aHJvdWdoIGZ1
bmN0aW9uIHNpemUuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVycyBvZiBwb2x5Zmls
bC1wcm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAgLSBBZGQgbWlzc2lu
ZyBXYXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdlbmVyYXRpb24gZm9y
IGNtYWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRlc3Rpbmcgc2lkZToK
KworICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlvbiBvbmx5KSwgRXhw
b3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hlY2sgc2VjdGlvbiBv
cmRlciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRl
IHRoZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUg
ZW50cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KKworICAg
ICAgICAqIHdhc20vQnVpbGRlci5qczogYnVpbGQgdHlwZSwgaW1wb3J0LCBhbmQgZXhwb3J0IHNl
Y3Rpb25zCisgICAgICAgIChjb25zdC5fbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUpOgorICAg
ICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qczogQWRkZWQuIEZvcmtlZCBm
cm9tIEJ1aWxkZXIuanMKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlR5cGUpOgorICAgICAgICAo
Y29uc3QuZW1pdHRlcnMuSW1wb3J0KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkZ1bmN0aW9u
KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlRhYmxlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLk1lbW9yeSk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5HbG9iYWwpOgorICAgICAgICAo
Y29uc3QuZW1pdHRlcnMuRXhwb3J0KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlN0YXJ0KToK
KyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkVsZW1lbnQpOgorICAgICAgICAoY29uc3QuZW1pdHRl
cnMuQ29kZSk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5EYXRhKToKKyAgICAgICAgKGV4cG9y
dC5jb25zdC5CaW5hcnkpOgorICAgICAgICAqIHdhc20vTG93TGV2ZWxCaW5hcnkuanM6IEFkZCBh
IGZldyB1c2VmdWwgb3V0cHV0cworICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTG93TGV2ZWxCaW5h
cnkucHJvdG90eXBlLnZhcnVpbnQxKToKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0Lkxvd0xldmVs
QmluYXJ5LnByb3RvdHlwZS52YXJpbnQ3KToKKyAgICAgICAgKiB3YXNtL1dBU00uanM6IHZhbHVl
IHR5cGUgYW5kIGV4dGVybmFsIGtpbmQgaGVscGVycworICAgICAgICAqIHdhc20vYXNzZXJ0Lmpz
OiBhcnJheSBlbGVtZW50LXdpc2UgZXF1YWxpdHkgY29tcGFyaXNvbgorICAgICAgICAoY29uc3Qu
X2VxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qczoKKyAgICAgICAgKE1v
ZHVsZVdpdGhJbXBvcnRzKToKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJK
U09OLmpzOiBtYW55IG1vcmUgdGVzdHMgZm9yIGFsbCB0aGUgbmV3IEJ1aWxkZXIgQVBJcywgYW5k
IHVwZGF0ZSB0byBzb21lIG9sZGVyIHRlc3RzIHdoaWNoIG5vdyByZXF1aXJlIGEgVHlwZSBzZWN0
aW9uIG9yIHJlamlnZ2VyZWQgRnVuY3Rpb24gc2lnbmF0dXJlCisgICAgICAgIChjb25zdC5hc3Nl
cnRPcFRocm93cyk6CisgICAgICAgIChTZWN0aW9uc1dpdGhTYW1lQ3VzdG9tTmFtZSk6CisgICAg
ICAgIChUd29UeXBlU2VjdGlvbnMpOgorICAgICAgICAoRW1wdHlJbXBvcnRTZWN0aW9uKToKKyAg
ICAgICAgKEltcG9ydEJlZm9yZVR5cGVTZWN0aW9ucyk6CisgICAgICAgICogd2FzbS9zZWxmLXRl
c3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanM6IHJlbW92ZSBhIHRlc3Qgd2hpY2ggd2Fzbid0
IGhlbHBmdWwgYW5kIGlzIG5vdyBvYnNvbGV0ZQorICAgICAgICAoQ3VzdG9tU2VjdGlvbik6CisK
IDIwMTYtMTEtMDMgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgzNjQuCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vQnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmluZGV4IDA1NmQ3
MmQuLmQxZTQ3NjggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pT
VGVzdHMvd2FzbS9CdWlsZGVyLmpzCkBAIC0yMyw3ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLWltcG9ydCBMb3dMZXZlbEJpbmFyeSBmcm9tICdMb3dMZXZlbEJpbmFyeS5qcyc7Citp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0LmpzJzsKK2ltcG9ydCAqIGFzIEJ1aWxkV2Vi
QXNzZW1ibHkgZnJvbSAnQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcyc7CiBpbXBvcnQgKiBh
cyBXQVNNIGZyb20gJ1dBU00uanMnOwogCiBjb25zdCBfdG9KYXZhU2NyaXB0TmFtZSA9IG5hbWUg
PT4gewpAQCAtNDMsNTEgKzQ0LDExNCBAQCBjb25zdCBfaXNWYWxpZFZhbHVlID0gKHZhbHVlLCB0
eXBlKSA9PiB7CiB9OwogY29uc3QgX3Vua25vd25TZWN0aW9uSWQgPSAwOwogCi1jb25zdCBfQnVp
bGRXZWJBc3NlbWJseUJpbmFyeSA9IChwcmVhbWJsZSwgc2VjdGlvbnMpID0+IHsKLSAgICBsZXQg
d2FzbUJpbiA9IG5ldyBMb3dMZXZlbEJpbmFyeSgpOwotICAgIGNvbnN0IHB1dCA9IChiaW4sIHR5
cGUsIHZhbHVlKSA9PiBiaW5bdHlwZV0odmFsdWUpOwotICAgIGZvciAoY29uc3QgcCBvZiBXQVNN
LmRlc2NyaXB0aW9uLnByZWFtYmxlKQotICAgICAgICBwdXQod2FzbUJpbiwgcC50eXBlLCBwcmVh
bWJsZVtwLm5hbWVdKTsKLSAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHsKLSAg
ICAgICAgcHV0KHdhc21CaW4sIFdBU00uc2VjdGlvbkVuY29kaW5nVHlwZSwgc2VjdGlvbi5pZCk7
Ci0gICAgICAgIGxldCBzZWN0aW9uQmluID0gd2FzbUJpbi5uZXdQYXRjaGFibGUoInZhcnVpbnQi
KTsKLSAgICAgICAgc3dpdGNoIChzZWN0aW9uLm5hbWUpIHsKLSAgICAgICAgY2FzZSAiVHlwZSI6
IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24u
bmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIkltcG9ydCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2Ug
IkZ1bmN0aW9uIjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUg
IiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAgICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJy
b3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAg
ICAgICBjYXNlICJNZW1vcnkiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rp
b24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJv
dyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9
ImApOwotICAgICAgICBjYXNlICJFeHBvcnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50
ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJTdGFy
dCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rp
b24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIkVsZW1lbnQiOiB0aHJvdyBuZXcgRXJyb3IoYFVu
aW1wbGVtZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBj
YXNlICJDb2RlIjoKLSAgICAgICAgICAgIGNvbnN0IG51bWJlck9mRnVuY3Rpb25Cb2RpZXMgPSBz
ZWN0aW9uLmRhdGEubGVuZ3RoOwotICAgICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJ2YXJ1aW50
IiwgbnVtYmVyT2ZGdW5jdGlvbkJvZGllcyk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGZ1bmMg
b2Ygc2VjdGlvbi5kYXRhKSB7Ci0gICAgICAgICAgICAgICAgbGV0IGZ1bmNCaW4gPSBzZWN0aW9u
QmluLm5ld1BhdGNoYWJsZSgidmFydWludCIpOwotICAgICAgICAgICAgICAgIGNvbnN0IGxvY2Fs
Q291bnQgPSBmdW5jLmxvY2Fscy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgcHV0KGZ1bmNCaW4s
ICJ2YXJ1aW50IiwgbG9jYWxDb3VudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsQ291bnQg
IT09IDApIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogbG9jYWxzYCk7IC8vIEZJWE1F
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKLSAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IG9wIG9mIGZ1bmMuY29kZSkgewotICAgICAgICAgICAgICAgICAg
ICBwdXQoZnVuY0JpbiwgInVpbnQ4Iiwgb3AudmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAob3AuYXJndW1lbnRzLmxlbmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVu
dGVkOiBhcmd1bWVudHNgKTsgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MjcwNgotICAgICAgICAgICAgICAgICAgICBpZiAob3AuaW1tZWRpYXRlcy5s
ZW5ndGggIT09IDApIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1tZWRpYXRlc2Ap
OyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzA2
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZ1bmNCaW4uYXBwbHkoKTsKK2Nv
bnN0IF9ub3JtYWxpemVGdW5jdGlvblNpZ25hdHVyZSA9IChwYXJhbXMsIHJldCkgPT4geworICAg
IGFzc2VydC5pc0FycmF5KHBhcmFtcyk7CisgICAgZm9yIChjb25zdCBwIG9mIHBhcmFtcykKKyAg
ICAgICAgYXNzZXJ0LnRydXRoeShXQVNNLmlzVmFsaWRWYWx1ZVR5cGUocCksIGBUeXBlIHBhcmFt
ZXRlciAke3B9IG5lZWRzIGEgdmFsaWQgdmFsdWUgdHlwZWApOworICAgIGlmICh0eXBlb2YocmV0
KSA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgIHJldCA9ICJ2b2lkIjsKKyAgICBhc3NlcnQuaXNO
b3RBcnJheShyZXQsIGBNdWx0aXBsZSByZXR1cm4gdmFsdWVzIG5vdCBzdXBwb3J0ZWQgYnkgV2Vi
QXNzZW1ibHkgeWV0YCk7CisgICAgYXNzZXJ0LmZhbHN5KHJldCAhPT0gInZvaWQiICYmICFXQVNN
LmlzVmFsaWRWYWx1ZVR5cGUocmV0KSwgYFR5cGUgcmV0dXJuICR7cmV0fSBtdXN0IGJlIHZhbGlk
IHZhbHVlIHR5cGVgKTsKKyAgICByZXR1cm4gW3BhcmFtcywgcmV0XTsKK307CisKK2NvbnN0IF9t
YXliZVJlZ2lzdGVyVHlwZSA9IChidWlsZGVyLCB0eXBlKSA9PiB7CisgICAgY29uc3QgdHlwZVNl
Y3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAgaWYgKHR5cGVvZih0eXBl
KSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgLy8gVHlwZSBudW1iZXJzIGFscmVhZHkgcmVmZXIg
dG8gdGhlIHR5cGUgc2VjdGlvbiwgbm8gbmVlZCB0byByZWdpc3RlciB0aGVtLgorICAgICAgICBp
ZiAoYnVpbGRlci5fY2hlY2tlZCkgeworICAgICAgICAgICAgYXNzZXJ0LmlzTm90VW5kZWYodHlw
ZVNlY3Rpb24sIGBDYW4ndCB1c2UgdHlwZSAke3R5cGV9IGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0
IHByZXNlbnRgKTsKKyAgICAgICAgICAgIGFzc2VydC5pc05vdFVuZGVmKHR5cGVTZWN0aW9uLmRh
dGFbdHlwZV0sIGBUeXBlICR7dHlwZX0gZG9lc24ndCBleGlzdCBpbiB0eXBlIHNlY3Rpb25gKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHlwZTsKKyAgICB9CisgICAgYXNzZXJ0Lmhhc09i
amVjdFByb3BlcnR5KHR5cGUsICJwYXJhbXMiLCBgRXhwZWN0ZWQgdHlwZSB0byBiZSBhIG51bWJl
ciBvciBvYmplY3Qgd2l0aCAncGFyYW1zJyBhbmQgb3B0aW9uYWxseSAncmV0JyBmaWVsZHNgKTsK
KyAgICBjb25zdCBbcGFyYW1zLCByZXRdID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHR5
cGUucGFyYW1zLCB0eXBlLnJldCk7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYodHlwZVNlY3Rpb24s
IGBDYW4ndCBhZGQgdHlwZSBpZiBhIHR5cGUgc2VjdGlvbiBpc24ndCBwcmVzZW50YCk7CisgICAg
Ly8gVHJ5IHJldXNpbmcgYW4gZXF1aXZhbGVudCB0eXBlIGZyb20gdGhlIHR5cGUgc2VjdGlvbi4K
KyAgICB0eXBlczoKKyAgICBmb3IgKGxldCBpID0gMDsgaSAhPT0gdHlwZVNlY3Rpb24uZGF0YS5s
ZW5ndGg7ICsraSkgeworICAgICAgICBjb25zdCB0ID0gdHlwZVNlY3Rpb24uZGF0YVtpXTsKKyAg
ICAgICAgaWYgKHQucmV0ID09PSByZXQgJiYgcGFyYW1zLmxlbmd0aCA9PT0gdC5wYXJhbXMubGVu
Z3RoKSB7CisgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiAhPT0gdC5wYXJhbXMubGVuZ3Ro
OyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1zW2pdICE9PSB0LnBhcmFtc1tqXSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWUgdHlwZXM7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiRGF0YSI6IHRocm93IG5ldyBFcnJvcihgVW5p
bXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoc2VjdGlvbi5pZCAhPT0gX3Vua25vd25TZWN0aW9uSWQp
IHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzZWN0aW9uICIke3NlY3Rpb24ubmFtZX0iIHdpdGgg
bnVtYmVyICR7c2VjdGlvbi5pZH1gKTsKLSAgICAgICAgICAgIHB1dChzZWN0aW9uQmluLCAic3Ry
aW5nIiwgc2VjdGlvbi5uYW1lKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiBzZWN0
aW9uLmRhdGEpCi0gICAgICAgICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJ1aW50OCIsIGJ5dGUp
OworICAgICAgICAgICAgdHlwZSA9IGk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBzZWN0aW9uQmluLmFwcGx5KCk7CiAgICAgfQotICAgIHJldHVybiB3YXNtQmluOwor
ICAgIGlmICh0eXBlb2YodHlwZSkgIT09ICJudW1iZXIiKSB7CisgICAgICAgIC8vIENvdWxkbid0
IHJldXNlIGEgcHJlLWV4aXN0aW5nIHR5cGUsIHJlZ2lzdGVyIHRoaXMgdHlwZSBpbiB0aGUgdHlw
ZSBzZWN0aW9uLgorICAgICAgICB0eXBlU2VjdGlvbi5kYXRhLnB1c2goeyBwYXJhbXM6IHBhcmFt
cywgcmV0OiByZXQgfSk7CisgICAgICAgIHR5cGUgPSB0eXBlU2VjdGlvbi5kYXRhLmxlbmd0aCAt
IDE7CisgICAgfQorICAgIHJldHVybiB0eXBlOworfTsKKworY29uc3QgX2ltcG9ydEZ1bmN0aW9u
Q29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CisgICAg
cmV0dXJuIChtb2R1bGUsIGZpZWxkLCB0eXBlKSA9PiB7CisgICAgICAgIGFzc2VydC5pc1N0cmlu
Zyhtb2R1bGUsIGBJbXBvcnQgZnVuY3Rpb24gbW9kdWxlIHNob3VsZCBiZSBhIHN0cmluZywgZ290
ICIke21vZHVsZX0iYCk7CisgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBm
dW5jdGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CisgICAg
ICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiVHlwZSIpOworICAg
ICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOworICAgICAgICBz
ZWN0aW9uLmRhdGEucHVzaCh7IGZpZWxkOiBmaWVsZCwgdHlwZTogdHlwZSwga2luZDogIkZ1bmN0
aW9uIiwgbW9kdWxlOiBtb2R1bGUgfSk7CisgICAgICAgIC8vIEltcG9ydHMgYWxzbyBjb3VudCBp
biB0aGUgZnVuY3Rpb24gaW5kZXggc3BhY2UuIE1hcCB0aGVtIGFzIG9iamVjdHMgdG8gYXZvaWQg
Y2xhc2hpbmcgd2l0aCBDb2RlIGZ1bmN0aW9ucycgbmFtZXMuCisgICAgICAgIGJ1aWxkZXIuX3Jl
Z2lzdGVyRnVuY3Rpb25Ub0luZGV4U3BhY2UoeyBtb2R1bGU6IG1vZHVsZSwgZmllbGQ6IGZpZWxk
IH0pOworICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CisgICAgfTsKK307CisKK2NvbnN0IF9l
eHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRl
cikgPT4geworICAgIHJldHVybiAoZmllbGQsIGluZGV4LCB0eXBlKSA9PiB7CisgICAgICAgIGFz
c2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5jdGlvbiBmaWVsZCBzaG91bGQgYmUgYSBz
dHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CisgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gYnVp
bGRlci5fZ2V0U2VjdGlvbigiVHlwZSIpOworICAgICAgICBpZiAodHlwZW9mKHR5cGUpICE9PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgLy8gRXhwb3J0cyBjYW4gbGVhdmUgdGhlIHR5cGUg
dW5zcGVjaWZpZWQsIGxldHRpbmcgdGhlIENvZGUgYnVpbGRlciBwYXRjaCB0aGVtIHVwIGxhdGVy
LgorICAgICAgICAgICAgdHlwZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBXZSBjYW4ndCBjaGVjayBtdWNoIGFib3V0ICJpbmRleCIg
aGVyZSBiZWNhdXNlIHRoZSBDb2RlIHNlY3Rpb24gc3VjY2VlZHMgdGhlIEV4cG9ydCBzZWN0aW9u
LiBNb3JlIHdvcmsgaXMgZG9uZSBhdCBDb2RlKCkuRW5kKCkgdGltZS4KKyAgICAgICAgc3dpdGNo
ICh0eXBlb2YoaW5kZXgpKSB7CisgICAgICAgIGNhc2UgInN0cmluZyI6IGJyZWFrOyAvLyBBc3N1
bWUgaXQncyBhIGZ1bmN0aW9uIG5hbWUgd2hpY2ggd2lsbCBiZSByZXZlYWxlZCBpbiB0aGUgQ29k
ZSBzZWN0aW9uLgorICAgICAgICBjYXNlICJudW1iZXIiOiBicmVhazsgLy8gQXNzdW1lIGl0J3Mg
YSBudW1iZXIgaW4gdGhlICJmdW5jdGlvbiBpbmRleCBzcGFjZSIuCisgICAgICAgIGNhc2UgIm9i
amVjdCI6CisgICAgICAgICAgICAvLyBSZS1leHBvcnRpbmcgYW4gaW1wb3J0LgorICAgICAgICAg
ICAgYXNzZXJ0Lmhhc09iamVjdFByb3BlcnR5KGluZGV4LCAibW9kdWxlIiwgYFJlLWV4cG9ydGlu
ZyAiJHtmaWVsZH0iIGZyb20gYW4gaW1wb3J0YCk7CisgICAgICAgICAgICBhc3NlcnQuaGFzT2Jq
ZWN0UHJvcGVydHkoaW5kZXgsICJmaWVsZCIsIGBSZS1leHBvcnRpbmcgIiR7ZmllbGR9IiBmcm9t
IGFuIGltcG9ydGApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgInVuZGVmaW5l
ZCI6CisgICAgICAgICAgICAvLyBBc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgZmllbGQgKGku
ZS4gaXQncyBub3QgYmVpbmcgcmVuYW1lZCkuCisgICAgICAgICAgICBpbmRleCA9IGZpZWxkOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgRXhw
b3J0IHNlY3Rpb24ncyBpbmRleCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBnb3QgJHtp
bmRleH1gKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBjb3JyZXNwb25kaW5nSW1wb3J0ID0g
YnVpbGRlci5fZ2V0RnVuY3Rpb25Gcm9tSW5kZXhTcGFjZShpbmRleCk7CisgICAgICAgIGNvbnN0
IGltcG9ydFNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJJbXBvcnQiKTsKKyAgICAgICAg
aWYgKHR5cGVvZihpbmRleCkgPT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICAvLyBSZS1leHBv
cnRpbmcgYW4gaW1wb3J0IHVzaW5nIGl0cyBtb2R1bGUrZmllbGQgbmFtZS4KKyAgICAgICAgICAg
IGFzc2VydC5pc05vdFVuZGVmKGNvcnJlc3BvbmRpbmdJbXBvcnQsIGBSZS1leHBvcnRpbmcgIiR7
ZmllbGR9IiBjb3VsZG4ndCBmaW5kIGltcG9ydCBmcm9tIG1vZHVsZSAiJHtpbmRleC5tb2R1bGV9
IiBmaWVsZCAiJHtpbmRleC5maWVsZH0iYCk7CisgICAgICAgICAgICBpbmRleCA9IGNvcnJlc3Bv
bmRpbmdJbXBvcnQ7CisgICAgICAgICAgICBpZiAodHlwZW9mKHR5cGUpID09PSAidW5kZWZpbmVk
IikKKyAgICAgICAgICAgICAgICB0eXBlID0gaW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS50eXBl
OworICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQpCisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxKHR5cGUsIGltcG9ydFNlY3Rpb24uZGF0YVtpbmRleF0udHlwZSwgYFJlLWV4cG9ydGlu
ZyBpbXBvcnQgIiR7aW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS5maWVsZH0iIGFzICIke2ZpZWxk
fSIgaGFzIG1pc21hdGNoaW5nIHR5cGVgKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YoY29y
cmVzcG9uZGluZ0ltcG9ydCkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBSZS1l
eHBvcnRpbmcgYW4gaW1wb3J0IHVzaW5nIGl0cyBpbmRleC4KKyAgICAgICAgICAgIGxldCBleHBv
cnRlZEltcG9ydDsKKyAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpbXBvcnRTZWN0aW9uLmRh
dGEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaS5tb2R1bGUgPT09IGNvcnJlc3BvbmRpbmdJbXBv
cnQubW9kdWxlICYmIGkuZmllbGQgPT09IGNvcnJlc3BvbmRpbmdJbXBvcnQuZmllbGQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRJbXBvcnQgPSBpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodHlwZW9mKHR5cGUpID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICB0eXBlID0g
ZXhwb3J0ZWRJbXBvcnQudHlwZTsKKyAgICAgICAgICAgIGlmIChidWlsZGVyLl9jaGVja2VkKQor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcSh0eXBlLCBleHBvcnRlZEltcG9ydC50eXBlLCBgUmUt
ZXhwb3J0aW5nIGltcG9ydCAiJHtleHBvcnRlZEltcG9ydC5maWVsZH0iIGFzICIke2ZpZWxkfSIg
aGFzIG1pc21hdGNoaW5nIHR5cGVgKTsKKyAgICAgICAgfQorICAgICAgICBzZWN0aW9uLmRhdGEu
cHVzaCh7IGZpZWxkOiBmaWVsZCwgdHlwZTogdHlwZSwga2luZDogIkZ1bmN0aW9uIiwgaW5kZXg6
IGluZGV4IH0pOworICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7CisgICAgfTsKIH07CiAKIGV4
cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewpAQCAtOTgsNiArMTYyLDggQEAgZXhwb3J0IGRl
ZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICBwcmVhbWJsZVtwLm5hbWVdID0gcC52
YWx1ZTsKICAgICAgICAgdGhpcy5zZXRQcmVhbWJsZShwcmVhbWJsZSk7CiAgICAgICAgIHRoaXMu
X3NlY3Rpb25zID0gW107CisgICAgICAgIHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZSA9IHt9Owor
ICAgICAgICB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2VDb3VudCA9IDA7CiAgICAgICAgIHRoaXMu
X3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJzKCk7CiAgICAgfQogICAgIHNldENoZWNrZWQoY2hlY2tl
ZCkgewpAQCAtMTA4LDI1ICsxNzQsMTE5IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIg
ewogICAgICAgICB0aGlzLl9wcmVhbWJsZSA9IE9iamVjdC5hc3NpZ24odGhpcy5fcHJlYW1ibGUg
fHwge30sIHApOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CisgICAgX3JlZ2lzdGVyRnVu
Y3Rpb25Ub0luZGV4U3BhY2UobmFtZSkgeworICAgICAgICBpZiAodHlwZW9mKG5hbWUpID09PSAi
dW5kZWZpbmVkIikgeworICAgICAgICAgICAgLy8gUmVnaXN0ZXJpbmcgYSBuYW1lbGVzcyBmdW5j
dGlvbiBzdGlsbCBhZGRzIGl0IHRvIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZS4gUmVnaXN0ZXIg
aXQgYXMgc29tZXRoaW5nIHRoYXQgY2FuJ3Qgbm9ybWFsbHkgYmUgcmVnaXN0ZXJlZC4KKyAgICAg
ICAgICAgIG5hbWUgPSB7fTsKKyAgICAgICAgfQorICAgICAgICAvLyBDb2xsaXNpb25zIGFyZSBm
aW5lOiB3ZSdsbCBzaW1wbHkgY291bnQgdGhlIGZ1bmN0aW9uIGFuZCBmb3JnZXQgdGhlIHByZXZp
b3VzIG9uZS4KKyAgICAgICAgdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlW25hbWVdID0gdGhpcy5f
ZnVuY3Rpb25JbmRleFNwYWNlQ291bnQrKzsKKyAgICAgICAgLy8gTWFwIGl0IGJvdGggd2F5cywg
dGhlIG51bWJlciBzcGFjZSBpcyBkaXN0aW5jdCBmcm9tIHRoZSBuYW1lIHNwYWNlLgorICAgICAg
ICB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2VbdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlW25hbWVd
XSA9IG5hbWU7CisgICAgfQorICAgIF9nZXRGdW5jdGlvbkZyb21JbmRleFNwYWNlKG5hbWUpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZVtuYW1lXTsKKyAgICB9CiAg
ICAgX3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJzKCkgewogICAgICAgICBmb3IgKGNvbnN0IHNlY3Rp
b24gaW4gV0FTTS5kZXNjcmlwdGlvbi5zZWN0aW9uKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHNl
Y3Rpb24pIHsKKyAgICAgICAgICAgIGNhc2UgIlR5cGUiOgorICAgICAgICAgICAgICAgIHRoaXNb
c2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRo
aXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxk
ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlQnVpbGRlciA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gYnVpbGRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEZ1bmM6IChwYXJhbXMsIHJldCkgPT4geworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUocGFyYW1z
LCByZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKHsgcGFyYW1z
OiBwYXJhbXMsIHJldDogcmV0IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0eXBlQnVpbGRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlQnVpbGRlcjsKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAi
SW1wb3J0IjoKKyAgICAgICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnRCdWlsZGVyID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgVGFi
bGU6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgdGFibGVg
KTsgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeTogKCkgPT4geyB0aHJvdyBuZXcg
RXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBtZW1vcnlgKTsgfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdsb2JhbDogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6
IGltcG9ydCBnbG9iYWxgKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1wb3J0QnVpbGRlci5GdW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVh
dGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGltcG9ydEJ1aWxkZXI7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgIkV4cG9ydCI6CisgICAgICAgICAgICAgICAgdGhpc1tzZWN0
aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5f
YWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0QnVp
bGRlciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFRhYmxlOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogZXhwb3J0IHRhYmxlYCk7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1v
cnk6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBleHBvcnQgbWVtb3J5
YCk7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWw6ICgpID0+IHsgdGhyb3cgbmV3
IEVycm9yKGBVbmltcGxlbWVudGVkOiBleHBvcnQgZ2xvYmFsYCk7IH0sCisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRnVuY3Rpb24gPSBf
ZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRCdWlsZGVyOworICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJDb2RlIjoKICAgICAg
ICAgICAgICAgICB0aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgICAg
ICAgICBjb25zdCBidWlsZGVyID0gdGhpczsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29k
ZUJ1aWxkZXIgPSAgewotICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiBidWlsZGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IHBhcmFtZXRlcnMgPT4gewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWRQYXJhbWV0ZXJUeXBlcyA9
IHBhcmFtZXRlcnMuZmlsdGVyKHAgPT4gIVdBU00uaXNWYWxpZFZhbHVlVHlwZShwKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRQYXJhbWV0ZXJUeXBlcy5sZW5ndGgg
IT09IDApIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gZGVjbGFyZWQgd2l0aCBwYXJhbWV0ZXJz
IFske3BhcmFtZXRlcnN9XSwgaW52YWxpZDogWyR7aW52YWxpZFBhcmFtZXRlclR5cGVzfV1gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4geworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIG5vdyBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZW1hcCB0aGUg
ZXhwb3J0IHNlY3Rpb24ncyAidHlwZSIgYW5kICJpbmRleCIgYWNjb3JkaW5nIHRvIHRoZSBDb2Rl
IHNlY3Rpb24gd2UncmUgY3VycmVudGx5IGVuZGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB0eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnRTZWN0aW9uID0gYnVpbGRlci5f
Z2V0U2VjdGlvbigiSW1wb3J0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZXhwb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkV4cG9ydCIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVTZWN0aW9uID0gczsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhwb3J0U2VjdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZXhwb3J0U2VjdGlvbi5kYXRhKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZihlLmluZGV4KSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVy
cm9yKGBVbmV4cGVjdGVkIGV4cG9ydCBpbmRleCAiJHtlLmluZGV4fSJgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGJ1aWxkZXIuX2dldEZ1bmN0
aW9uRnJvbUluZGV4U3BhY2UoZS5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0LmlzTnVtYmVyKGluZGV4LCBgRXhwb3J0IHNlY3Rpb24gY29udGFp
bnMgdW5kZWZpbmVkIGZ1bmN0aW9uICIke2UuaW5kZXh9ImApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGUuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gLy8gRmFsbHRocm91Z2guCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICJudW1iZXIiOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBidWlsZGVyLl9nZXRGdW5jdGlvbkZyb21J
bmRleFNwYWNlKGUuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChidWlsZGVyLl9jaGVja2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhc3NlcnQuaXNOb3RVbmRlZihpbmRleCwgYEV4cG9ydCAiJHtlLmZpZWxk
fSIgZG9lc24ndCBjb3JyZXNwb25kIHRvIGEgZGVmaW5lZCB2YWx1ZSBpbiB0aGUgZnVuY3Rpb24g
aW5kZXggc3BhY2VgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1bmRlZmluZWQi
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cihgVW5pbXBsZW1lbnRlZDogRnVuY3Rpb24oKS5FbmQoKSB3aXRoIHVuZGVmaW5lZCBleHBvcnQg
aW5kZXhgKTsgLy8gRklYTUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoZS50eXBlKSA9
PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIG11c3QgYmUgYSBmdW5jdGlvbiBleHBvcnQgZnJvbSB0aGUgQ29kZSBzZWN0aW9u
IChyZS1leHBvcnRzIHdlcmUgaGFuZGxlZCBlYXJsaWVyKS4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4U3BhY2VPZmZzZXQgPSBpbXBv
cnRTZWN0aW9uID8gaW1wb3J0U2VjdGlvbi5kYXRhLmxlbmd0aCA6IDA7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25JbmRleCA9IGUuaW5kZXgg
LSBmdW5jdGlvbkluZGV4U3BhY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZS50eXBlID0gY29kZVNlY3Rpb24uZGF0YVtmdW5jdGlvbkluZGV4XS50eXBl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiAoYTAsIGExKSA9PiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNpZ25hdHVyZSA9IHR5cGVvZihhMCkg
PT09ICJzdHJpbmciID8gYTEgOiBhMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBmdW5jdGlvbk5hbWUgPSB0eXBlb2YoYTApID09PSAic3RyaW5nIiA/IGEwIDogdW5kZWZpbmVk
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yoc2lnbmF0dXJlKSA9PT0g
InVuZGVmaW5lZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9
IHsgcGFyYW1zOiBbXSB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5oYXNP
YmplY3RQcm9wZXJ0eShzaWduYXR1cmUsICJwYXJhbXMiLCBgRXhwZWN0IGZ1bmN0aW9uIHNpZ25h
dHVyZSB0byBiZSBhbiBvYmplY3Qgd2l0aCBhICJwYXJhbXMiIGZpZWxkLCBnb3QgIiR7c2lnbmF0
dXJlfSJgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyYW1zLCByZXRd
ID0gX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVy
ZS5yZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IHsgcGFyYW1z
OiBwYXJhbXMsIHJldDogcmV0IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZnVuYyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiBwYXJhbWV0
ZXJzLCAvLyBQYXJhbWV0ZXJzIGFyZSB0aGUgZmlyc3QgbG9jYWxzLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJDb3VudDogcGFyYW1ldGVycy5sZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIs
IHNpZ25hdHVyZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZTog
c2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHBhcmFt
cywgLy8gUGFyYW1ldGVycyBhcmUgdGhlIGZpcnN0IGxvY2Fscy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyQ291bnQ6IHBhcmFtcy5sZW5ndGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFtdCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaChmdW5jKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLl9yZWdpc3RlckZ1bmN0aW9uVG9JbmRl
eFNwYWNlKGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1
bmN0aW9uQnVpbGRlciA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29u
c3Qgb3AgaW4gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbmFtZSA9IF90b0phdmFTY3JpcHROYW1lKG9wKTsKQEAgLTE3NCwx
OSArMzM0LDIxIEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IDogKCkgPT4ge307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
ZWNrSW1tcyA9IGJ1aWxkZXIuX2NoZWNrZWQgPyAob3AsIGltbXMpID0+IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbW1zLmxlbmd0aCAhPSBpbW0ubGVuZ3RoKSB0
aHJvdyBuZXcgRXJyb3IoYCIke29wfSIgZXhwZWN0cyAke2ltbS5sZW5ndGh9IGltbWVkaWF0ZXMs
IGdvdCAke2ltbXMubGVuZ3RofWApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxKGltbXMubGVuZ3RoLCBpbW0ubGVuZ3RoLCBgIiR7b3B9IiBleHBlY3RzICR7
aW1tLmxlbmd0aH0gaW1tZWRpYXRlcywgZ290ICR7aW1tcy5sZW5ndGh9YCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggIT09IGltbS5s
ZW5ndGg7ICsraWR4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ290ID0gaW1tc1tpZHhdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGV4cGVjdCA9IGltbVtpZHhdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhwZWN0Lm5hbWUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJmdW5jdGlvbl9pbmRleCI6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2lzVmFsaWRWYWx1ZShnb3Qs
ICJpMzIiKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIG9uICR7b3B9OiBnb3QgIiR7
Z290fSIsIGV4cGVjdGVkIGkzMmApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQudHJ1dGh5KF9pc1ZhbGlkVmFsdWUoZ290LCAiaTMyIiksIGBJbnZh
bGlkIHZhbHVlIG9uICR7b3B9OiBnb3QgIiR7Z290fSIsIGV4cGVjdGVkIGkzMmApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBjaGVjayBmdW5j
dGlvbiBpbmRpY2VzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
NDIxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImxvY2FsX2luZGV4
IjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiAiJHtleHBlY3QubmFtZX0iIG9uICIk
e29wfSJgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJn
bG9iYWxfaW5kZXgiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6ICIke2V4cGVjdC5u
YW1lfSIgb24gIiR7b3B9ImApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgInR5cGVfaW5kZXgiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6ICIk
e2V4cGVjdC5uYW1lfSIgb24gIiR7b3B9ImApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgInZhbHVlIjogaWYgKCFfaXNWYWxpZFZhbHVlKGdvdCwgcmV0WzBd
KSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIG9uICR7b3B9OiBnb3QgIiR7Z290fSIs
IGV4cGVjdGVkICR7cmV0WzBdfWApOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICJ2YWx1ZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoX2lzVmFsaWRWYWx1ZShnb3QsIHJldFswXSks
IGBJbnZhbGlkIHZhbHVlIG9uICR7b3B9OiBnb3QgIiR7Z290fSIsIGV4cGVjdGVkICR7cmV0WzBd
fWApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJmbGFncyI6IHRo
cm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogIiR7ZXhwZWN0Lm5hbWV9IiBvbiAiJHtvcH0i
YCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAib2Zmc2V0
IjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiAiJHtleHBlY3QubmFtZX0iIG9uICIk
e29wfSJgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250
cm9sOgpAQCAtMjI2LDcgKzM4OCwxMSBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsK
ICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzOwogICAgICAgICAgICAgY29uc3QgdW5r
bm93bkJ1aWxkZXIgPSAgewogICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gYnVpbGRlciwKLSAg
ICAgICAgICAgICAgICBCeXRlOiBiID0+IHsgaWYgKChiICYgMHhGRikgIT09IGIpIHRocm93IG5l
dyBSYW5nZUVycm9yKGBVbmtub3duIHNlY3Rpb24gZXhwZWN0ZWQgYnl0ZSwgZ290OiAiJHtifSJg
KTsgcy5kYXRhLnB1c2goYik7IHJldHVybiB1bmtub3duQnVpbGRlcjsgfQorICAgICAgICAgICAg
ICAgIEJ5dGU6IGIgPT4geworICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoYiAmIDB4RkYs
IGIsIGBVbmtub3duIHNlY3Rpb24gZXhwZWN0ZWQgYnl0ZSwgZ290OiAiJHtifSJgKTsKKyAgICAg
ICAgICAgICAgICAgICAgcy5kYXRhLnB1c2goYik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB1bmtub3duQnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogICAg
ICAgICAgICAgcmV0dXJuIHVua25vd25CdWlsZGVyOwogICAgICAgICB9OwpAQCAtMjM0LDEwICs0
MDAsMzkgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgX2FkZFNlY3Rpb24o
bmFtZU9yTnVtYmVyLCBleHRyYU9iamVjdCkgewogICAgICAgICBjb25zdCBuYW1lID0gdHlwZW9m
KG5hbWVPck51bWJlcikgPT09ICJzdHJpbmciID8gbmFtZU9yTnVtYmVyIDogIiI7CiAgICAgICAg
IGNvbnN0IG51bWJlciA9IHR5cGVvZihuYW1lT3JOdW1iZXIpID09PSAibnVtYmVyIiA/IG5hbWVP
ck51bWJlciA6IChXQVNNLmRlc2NyaXB0aW9uLnNlY3Rpb25bbmFtZV0gPyBXQVNNLmRlc2NyaXB0
aW9uLnNlY3Rpb25bbmFtZV0udmFsdWUgOiBfdW5rbm93blNlY3Rpb25JZCk7CisgICAgICAgIGlm
ICh0aGlzLl9jaGVja2VkKSB7CisgICAgICAgICAgICAvLyBDaGVjayB1bmlxdWVuZXNzLgorICAg
ICAgICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3NlY3Rpb25zKQorICAgICAgICAgICAgICAg
IGFzc2VydC5mYWxzeShzLm5hbWUgPT09IG5hbWUgJiYgcy5pZCA9PT0gbnVtYmVyLCBgQ2Fubm90
IGhhdmUgdHdvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSAiJHtuYW1lfSIgYW5kIElEICR7
bnVtYmVyfWApOworICAgICAgICAgICAgLy8gQ2hlY2sgb3JkZXJpbmcuCisgICAgICAgICAgICBp
ZiAoKG51bWJlciAhPT0gX3Vua25vd25TZWN0aW9uSWQpICYmICh0aGlzLl9zZWN0aW9ucy5sZW5n
dGggIT09IDApKSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3NlY3Rpb25z
Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9zZWN0aW9uc1tpXS5pZCA9PT0gX3Vua25vd25TZWN0aW9uSWQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmxlKHRoaXMuX3Nl
Y3Rpb25zW2ldLmlkLCBudW1iZXIsIGBCYWQgc2VjdGlvbiBvcmRlcmluZzogIiR7dGhpcy5fc2Vj
dGlvbnNbaV0ubmFtZX0iIGNhbm5vdCBwcmVjZWRlICIke25hbWV9ImApOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KICAgICAgICAgY29uc3QgcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lOiBuYW1lLCBpZDogbnVt
YmVyLCBkYXRhOiBbXSB9LCBleHRyYU9iamVjdCB8fCB7fSk7CiAgICAgICAgIHRoaXMuX3NlY3Rp
b25zLnB1c2gocyk7CiAgICAgICAgIHJldHVybiBzOwogICAgIH0KKyAgICBfZ2V0U2VjdGlvbihu
YW1lT3JOdW1iZXIpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlb2YobmFtZU9yTnVtYmVyKSkgewor
ICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06
IGNhbid0IGdldCBzZWN0aW9uICIke25hbWVPck51bWJlcn0iYCk7CisgICAgICAgIGNhc2UgInN0
cmluZyI6CisgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCisgICAg
ICAgICAgICAgICAgaWYgKHMubmFtZSA9PT0gbmFtZU9yTnVtYmVyKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gczsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIGNh
c2UgIm51bWJlciI6CisgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMp
CisgICAgICAgICAgICAgICAgaWYgKHMuaWQgPT09IG5hbWVPck51bWJlcikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAg
ICB9CisgICAgfQogICAgIG9wdGltaXplKCkgewogICAgICAgICAvLyBGSVhNRSBBZGQgbW9yZSBv
cHRpbWl6YXRpb25zLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYz
NDI0CiAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtMjU0LDUgKzQ0OSw1IEBAIGV4cG9ydCBkZWZh
dWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAvLyBGSVhNRSBDcmVhdGUgYW4gYXNtLmpzIGVx
dWl2YWxlbnQgc3RyaW5nIHdoaWNoIGNhbiBiZSBldmFsJ2QuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjUKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhc20u
anMgbm90IGltcGxlbWVudGVkIHlldCIpOwogICAgIH0KLSAgICBXZWJBc3NlbWJseSgpIHsgcmV0
dXJuIF9CdWlsZFdlYkFzc2VtYmx5QmluYXJ5KHRoaXMuX3ByZWFtYmxlLCB0aGlzLl9zZWN0aW9u
cyk7IH0KKyAgICBXZWJBc3NlbWJseSgpIHsgcmV0dXJuIEJ1aWxkV2ViQXNzZW1ibHkuQmluYXJ5
KHRoaXMuX3ByZWFtYmxlLCB0aGlzLl9zZWN0aW9ucyk7IH0KIH07CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcyBiL0pTVGVzdHMvd2FzbS9CdWls
ZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmYyYjBhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJB
c3NlbWJseUJpbmFyeS5qcwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ltcG9ydCBMb3dMZXZlbEJpbmFyeSBmcm9tICdMb3dM
ZXZlbEJpbmFyeS5qcyc7CitpbXBvcnQgKiBhcyBXQVNNIGZyb20gJ1dBU00uanMnOworCitjb25z
dCBwdXQgPSAoYmluLCB0eXBlLCB2YWx1ZSkgPT4gYmluW3R5cGVdKHZhbHVlKTsKKworY29uc3Qg
ZW1pdHRlcnMgPSB7CisgICAgVHlwZTogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQo
YmluLCAidmFydWludCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0
IGVudHJ5IG9mIHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgY29uc3QgZnVuY1R5cGVDb25z
dHJ1Y3RvciA9IC0weDIwOyAvLyBGSVhNRSBNb3ZlIHRoaXMgdG8gd2FzbS5qc29uLgorICAgICAg
ICAgICAgcHV0KGJpbiwgInZhcmludDciLCBmdW5jVHlwZUNvbnN0cnVjdG9yKTsKKyAgICAgICAg
ICAgIHB1dChiaW4sICJ2YXJ1aW50IiwgZW50cnkucGFyYW1zLmxlbmd0aCk7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IHBhcmFtIG9mIGVudHJ5LnBhcmFtcykKKyAgICAgICAgICAgICAgICBwdXQo
YmluLCAidWludDgiLCBXQVNNLnZhbHVlVHlwZVZhbHVlW3BhcmFtXSk7CisgICAgICAgICAgICBp
ZiAoZW50cnkucmV0ID09PSAidm9pZCIpCisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVp
bnQxIiwgMCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAi
dmFydWludDEiLCAxKTsKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLnZh
bHVlVHlwZVZhbHVlW2VudHJ5LnJldF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSwKKyAgICBJbXBvcnQ6IChzZWN0aW9uLCBiaW4pID0+IHsKKyAgICAgICAgcHV0KGJpbiwgInZh
cnVpbnQiLCBzZWN0aW9uLmRhdGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChjb25zdCBlbnRyeSBv
ZiBzZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAgIHB1dChiaW4sICJzdHJpbmciLCBlbnRyeS5t
b2R1bGUpOworICAgICAgICAgICAgcHV0KGJpbiwgInN0cmluZyIsIGVudHJ5LmZpZWxkKTsKKyAg
ICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00uZXh0ZXJuYWxLaW5kVmFsdWVbZW50cnku
a2luZF0pOworICAgICAgICAgICAgc3dpdGNoIChlbnRyeS5raW5kKSB7CisgICAgICAgICAgICBk
ZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVuZXhwZWN0
ZWQga2luZCAke2VudHJ5LmtpbmR9YCk7CisgICAgICAgICAgICBjYXNlICJGdW5jdGlvbiI6IHB1
dChiaW4sICJ2YXJ1aW50IiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAi
VGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKKyAgICAgICAg
ICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGAp
OworICAgICAgICAgICAgY2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGlt
cGxlbWVudGVkYCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorICAgIEZ1bmN0
aW9uOiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1l
bnRlZGApOyB9LAorICAgIFRhYmxlOiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJv
cihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIE1lbW9yeTogKHNlY3Rpb24sIGJpbikg
PT4geyB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBHbG9i
YWw6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVu
dGVkYCk7IH0sCisgICAgRXhwb3J0OiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJv
cihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIFN0YXJ0OiAoc2VjdGlvbiwgYmluKSA9
PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIEVsZW1l
bnQ6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVu
dGVkYCk7IH0sCisgICAgQ29kZTogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBwdXQoYmlu
LCAidmFydWludCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IGZ1
bmMgb2Ygc2VjdGlvbi5kYXRhKSB7CisgICAgICAgICAgICBsZXQgZnVuY0JpbiA9IGJpbi5uZXdQ
YXRjaGFibGUoInZhcnVpbnQiKTsKKyAgICAgICAgICAgIGNvbnN0IGxvY2FsQ291bnQgPSBmdW5j
LmxvY2Fscy5sZW5ndGg7CisgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInZhcnVpbnQiLCBsb2Nh
bENvdW50KTsKKyAgICAgICAgICAgIGlmIChsb2NhbENvdW50ICE9PSAwKSB0aHJvdyBuZXcgRXJy
b3IoYFVuaW1wbGVtZW50ZWQ6IGxvY2Fsc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzA2CisgICAgICAgICAgICBmb3IgKGNvbnN0IG9wIG9m
IGZ1bmMuY29kZSkgeworICAgICAgICAgICAgICAgIHB1dChmdW5jQmluLCAidWludDgiLCBvcC52
YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKG9wLmFyZ3VtZW50cy5sZW5ndGggIT09IDApIHRo
cm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogYXJndW1lbnRzYCk7IC8vIEZJWE1FIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKKyAgICAgICAgICAgICAg
ICBpZiAob3AuaW1tZWRpYXRlcy5sZW5ndGggIT09IDApIHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogaW1tZWRpYXRlc2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyNzA2CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmdW5jQmlu
LmFwcGx5KCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIERhdGE6IChzZWN0aW9uLCBiaW4pID0+
IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCit9OworCitleHBv
cnQgY29uc3QgQmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9ucykgPT4geworICAgIGxldCB3YXNt
QmluID0gbmV3IExvd0xldmVsQmluYXJ5KCk7CisgICAgZm9yIChjb25zdCBwIG9mIFdBU00uZGVz
Y3JpcHRpb24ucHJlYW1ibGUpCisgICAgICAgIHB1dCh3YXNtQmluLCBwLnR5cGUsIHByZWFtYmxl
W3AubmFtZV0pOworICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykgeworICAgICAg
ICBwdXQod2FzbUJpbiwgV0FTTS5zZWN0aW9uRW5jb2RpbmdUeXBlLCBzZWN0aW9uLmlkKTsKKyAg
ICAgICAgbGV0IHNlY3Rpb25CaW4gPSB3YXNtQmluLm5ld1BhdGNoYWJsZSgidmFydWludCIpOwor
ICAgICAgICBjb25zdCBlbWl0dGVyID0gZW1pdHRlcnNbc2VjdGlvbi5uYW1lXTsKKyAgICAgICAg
aWYgKGVtaXR0ZXIpCisgICAgICAgICAgICBlbWl0dGVyKHNlY3Rpb24sIHNlY3Rpb25CaW4pOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFVua25vd24gc2VjdGlvbi4KKyAgICAgICAg
ICAgIHB1dChzZWN0aW9uQmluLCAic3RyaW5nIiwgc2VjdGlvbi5uYW1lKTsKKyAgICAgICAgICAg
IGZvciAoY29uc3QgYnl0ZSBvZiBzZWN0aW9uLmRhdGEpCisgICAgICAgICAgICAgICAgcHV0KHNl
Y3Rpb25CaW4sICJ1aW50OCIsIGJ5dGUpOworICAgICAgICB9CisgICAgICAgIHNlY3Rpb25CaW4u
YXBwbHkoKTsKKyAgICB9CisgICAgcmV0dXJuIHdhc21CaW47Cit9OwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy93YXNtL0xvd0xldmVsQmluYXJ5LmpzIGIvSlNUZXN0cy93YXNtL0xvd0xldmVsQmluYXJ5
LmpzCmluZGV4IDBhODMzYzEuLjcyMDA5NzYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9Mb3dM
ZXZlbEJpbmFyeS5qcworKysgYi9KU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMKQEAgLTI3
LDYgKzI3LDggQEAgY29uc3QgX2luaXRpYWxBbGxvY2F0aW9uU2l6ZSA9IDEwMjQ7CiBjb25zdCBf
Z3Jvd0FsbG9jYXRpb25TaXplID0gYWxsb2NhdGVkID0+IGFsbG9jYXRlZCAqIDI7CiAKIGV4cG9y
dCBjb25zdCB2YXJ1aW50TWluID0gMDsKK2V4cG9ydCBjb25zdCB2YXJpbnQ3TWluID0gLTBiMTAw
MDAwMDsKK2V4cG9ydCBjb25zdCB2YXJpbnQ3TWF4ID0gMGIxMTExMTE7CiBleHBvcnQgY29uc3Qg
dmFydWludDdNYXggPSAwYjExMTExMTE7CiBleHBvcnQgY29uc3QgdmFydWludE1heCA9ICgoKCgx
IDw8IDMxKSA+Pj4gMCkgLSAxKSAqIDIpICsgMTsKIGV4cG9ydCBjb25zdCB2YXJpbnRNaW4gPSAt
KCgxIDw8IDMxKSA+Pj4gMCk7CkBAIC0xMjksNiArMTMxLDE2IEBAIGV4cG9ydCBkZWZhdWx0IGNs
YXNzIExvd0xldmVsQmluYXJ5IHsKICAgICAgICAgICAgIHRoaXMudWludDgoMHg4MCB8IGIpOwog
ICAgICAgICB9IHdoaWxlICh0cnVlKTsKICAgICB9CisgICAgdmFydWludDEodikgeworICAgICAg
ICBpZiAodiAhPT0gMCAmJiB2ICE9PSAxKQorICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJy
b3IoYEludmFsaWQgdmFydWludDEgJHt2fSByYW5nZSBpcyBbMCwgMV1gKTsKKyAgICAgICAgdGhp
cy52YXJ1aW50KHYpOworICAgIH0KKyAgICB2YXJpbnQ3KHYpIHsKKyAgICAgICAgaWYgKHYgPCB2
YXJpbnQ3TWluIHx8IHZhcmludDdNYXggPCB2KQorICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdl
RXJyb3IoYEludmFsaWQgdmFyaW50NyAke3Z9IHJhbmdlIGlzIFske3ZhcmludDdNaW59LCAke3Zh
cmludDdNYXh9XWApOworICAgICAgICB0aGlzLnZhcmludCh2KTsKKyAgICB9CiAgICAgdmFydWlu
dDcodikgewogICAgICAgICBpZiAodiA8IHZhcnVpbnRNaW4gfHwgdmFydWludDdNYXggPCB2KQog
ICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdmFydWludDcgJHt2fSBy
YW5nZSBpcyBbJHt2YXJ1aW50TWlufSwgJHt2YXJ1aW50N01heH1dYCk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vV0FTTS5qcyBiL0pTVGVzdHMvd2FzbS9XQVNNLmpzCmluZGV4IDhlN2I3ZWYu
LmQ4ZWFlZjYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9XQVNNLmpzCisrKyBiL0pTVGVzdHMv
d2FzbS9XQVNNLmpzCkBAIC0yNSw5ICsyNSwxOCBAQAogCiBpbXBvcnQgKiBhcyB1dGlsaXRpZXMg
ZnJvbSAndXRpbGl0aWVzLmpzJzsKIAorY29uc3QgX21hcFZhbHVlcyA9IGZyb20gPT4geworICAg
IGxldCB2YWx1ZXMgPSB7fTsKKyAgICBmb3IgKGNvbnN0IGtleSBpbiBmcm9tKQorICAgICAgICB2
YWx1ZXNba2V5XSA9IGZyb21ba2V5XS52YWx1ZTsKKyAgICByZXR1cm4gdmFsdWVzOworfTsKKwog
ZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID0gdXRpbGl0aWVzLmpzb24oIndhc20uanNvbiIpOwog
ZXhwb3J0IGNvbnN0IHZhbHVlVHlwZSA9IE9iamVjdC5rZXlzKGRlc2NyaXB0aW9uLnZhbHVlX3R5
cGUpOwogY29uc3QgX3ZhbHVlVHlwZVNldCA9IG5ldyBTZXQodmFsdWVUeXBlKTsKIGV4cG9ydCBj
b25zdCBpc1ZhbGlkVmFsdWVUeXBlID0gdiA9PiBfdmFsdWVUeXBlU2V0Lmhhcyh2KTsKK2V4cG9y
dCBjb25zdCB2YWx1ZVR5cGVWYWx1ZSA9IF9tYXBWYWx1ZXMoZGVzY3JpcHRpb24udmFsdWVfdHlw
ZSk7CitleHBvcnQgY29uc3QgZXh0ZXJuYWxLaW5kVmFsdWUgPSBfbWFwVmFsdWVzKGRlc2NyaXB0
aW9uLmV4dGVybmFsX2tpbmQpOwogZXhwb3J0IGNvbnN0IHNlY3Rpb25zID0gT2JqZWN0LmtleXMo
ZGVzY3JpcHRpb24uc2VjdGlvbik7CiBleHBvcnQgY29uc3Qgc2VjdGlvbkVuY29kaW5nVHlwZSA9
IGRlc2NyaXB0aW9uLnNlY3Rpb25bc2VjdGlvbnNbMF1dLnR5cGU7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3dhc20vYXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwppbmRleCAyZWE1Zjcw
Li4wMmM1YTdhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vYXNzZXJ0LmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9hc3NlcnQuanMKQEAgLTIzLDI2ICsyMyw3NCBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi1jb25zdCBfbm90VW5kZWYgPSAodikgPT4gewotICAgIGlmICh0eXBlb2YgdiA9PT0gInVu
ZGVmaW5lZCIpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiU2hvdWxkbid0IGJlIHVuZGVmaW5l
ZCIpOworY29uc3QgX2ZhaWwgPSAobXNnLCBleHRyYSkgPT4geworICAgIHRocm93IG5ldyBFcnJv
cihtc2cgKyAoZXh0cmEgPyAiOiAiICsgZXh0cmEgOiAiIikpOwogfTsKIAotY29uc3QgX2lzVW5k
ZWYgPSAodikgPT4gewotICAgIGlmICh0eXBlb2YgdiAhPT0gInVuZGVmaW5lZCIpCi0gICAgICAg
IHRocm93IG5ldyBFcnJvcigiU2hvdWxkIGJlIHVuZGVmaW5lZCIpOworZXhwb3J0IGNvbnN0IGlz
Tm90QSA9ICh2LCB0LCBtc2cpID0+IHsKKyAgICBpZiAodHlwZW9mIHYgPT09IHQpCisgICAgICAg
IF9mYWlsKGBTaG91bGRuJ3QgYmUgJHt0fWAsIG1zZyk7CiB9OwogCi1jb25zdCBfZXEgPSAobGhz
LCByaHMpID0+IHsKLSAgICBpZiAobGhzICE9PSByaHMpCi0gICAgICAgIHRocm93IG5ldyBFcnJv
cihgTm90IHRoZSBzYW1lOiAiJHtsaHN9IiBhbmQgIiR7cmhzfSJgKTsKK2V4cG9ydCBjb25zdCBp
c0EgPSAodiwgdCwgbXNnKSA9PiB7CisgICAgaWYgKHR5cGVvZiB2ICE9PSB0KQorICAgICAgICBf
ZmFpbChgU2hvdWxkIGJlICR7dH0sIGdvdCAke3R5cGVvZih2KX1gLCBtc2cpOwogfTsKIAotY29u
c3QgX2dlID0gKGxocywgcmhzKSA9PiB7Ci0gICAgX25vdFVuZGVmKGxocyk7Ci0gICAgX25vdFVu
ZGVmKHJocyk7CitleHBvcnQgY29uc3QgaXNOb3RVbmRlZiA9ICh2LCBtc2cpID0+IGlzTm90QSh2
LCAidW5kZWZpbmVkIiwgbXNnKTsKK2V4cG9ydCBjb25zdCBpc1VuZGVmID0gKHYsIG1zZykgPT4g
aXNBKHYsICJ1bmRlZmluZWQiLCBtc2cpOworZXhwb3J0IGNvbnN0IG5vdE9iamVjdCA9ICh2LCBt
c2cpID0+IGlzTm90QSh2LCAib2JqZWN0IiwgbXNnKTsKK2V4cG9ydCBjb25zdCBpc09iamVjdCA9
ICh2LCBtc2cpID0+IGlzQSh2LCAib2JqZWN0IiwgbXNnKTsKK2V4cG9ydCBjb25zdCBub3RTdHJp
bmcgPSAodiwgbXNnKSA9PiBpc05vdEEodiwgInN0cmluZyIsIG1zZyk7CitleHBvcnQgY29uc3Qg
aXNTdHJpbmcgPSAodiwgbXNnKSA9PiBpc0EodiwgInN0cmluZyIsIG1zZyk7CitleHBvcnQgY29u
c3Qgbm90TnVtYmVyID0gKHYsIG1zZykgPT4gaXNOb3RBKHYsICJudW1iZXIiLCBtc2cpOworZXhw
b3J0IGNvbnN0IGlzTnVtYmVyID0gKHYsIG1zZykgPT4gaXNBKHYsICJudW1iZXIiLCBtc2cpOwor
CitleHBvcnQgY29uc3QgaGFzT2JqZWN0UHJvcGVydHkgPSAobywgcCwgbXNnKSA9PiB7CisgICAg
aXNPYmplY3QobywgbXNnKTsKKyAgICBpc05vdFVuZGVmKG9bcF0sIG1zZywgYGV4cGVjdGVkIG9i
amVjdCB0byBoYXZlIHByb3BlcnR5ICR7cH1gKTsKK307CisKK2V4cG9ydCBjb25zdCBpc0FycmF5
ID0gKHYsIG1zZykgPT4geworICAgIGlmICghQXJyYXkuaXNBcnJheSh2KSkKKyAgICAgICAgX2Zh
aWwoYEV4cGVjdGVkIGFuIGFycmF5LCBnb3QgJHt0eXBlb2Yodil9YCwgbXNnKTsKK307CisKK2V4
cG9ydCBjb25zdCBpc05vdEFycmF5ID0gKHYsIG1zZykgPT4geworICAgIGlmIChBcnJheS5pc0Fy
cmF5KHYpKQorICAgICAgICBfZmFpbChgRXhwZWN0ZWQgdG8gbm90IGJlIGFuIGFycmF5YCwgbXNn
KTsKK307CisKK2V4cG9ydCBjb25zdCB0cnV0aHkgPSAodiwgbXNnKSA9PiB7CisgICAgaWYgKCF2
KQorICAgICAgICBfZmFpbChgRXhwZWN0ZWQgdHJ1dGh5YCwgbXNnKTsKK307CisKK2V4cG9ydCBj
b25zdCBmYWxzeSA9ICh2LCBtc2cpID0+IHsKKyAgICBpZiAodikKKyAgICAgICAgX2ZhaWwoYEV4
cGVjdGVkIGZhbHN5YCwgbXNnKTsKK307CisKK2V4cG9ydCBjb25zdCBlcSA9IChsaHMsIHJocywg
bXNnKSA9PiB7CisgICAgaWYgKEFycmF5LmlzQXJyYXkobGhzKSAmJiBBcnJheS5pc0FycmF5KHJo
cykgJiYgKGxocy5sZW5ndGggPT09IHJocy5sZW5ndGgpKSB7CisgICAgICAgIGZvciAobGV0IGkg
PSAwOyBpICE9PSBsaHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBlcShsaHNbaV0sIHJoc1tp
XSwgbXNnKTsKKyAgICB9IGVsc2UgaWYgKGxocyAhPT0gcmhzKQorICAgICAgICBfZmFpbChgTm90
IHRoZSBzYW1lOiAiJHtsaHN9IiBhbmQgIiR7cmhzfSJgLCBtc2cpOworfTsKKworZXhwb3J0IGNv
bnN0IGdlID0gKGxocywgcmhzLCBtc2cpID0+IHsKKyAgICBpc05vdFVuZGVmKGxocyk7CisgICAg
aXNOb3RVbmRlZihyaHMpOwogICAgIGlmICghKGxocyA+PSByaHMpKQotICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoYEV4cGVjdGVkOiAiJHtsaHN9IiA8ICIke3Joc30iYCk7CisgICAgICAgIF9mYWls
KGBFeHBlY3RlZDogIiR7bGhzfSIgPCAiJHtyaHN9ImAsIG1zZyk7Cit9OworCitleHBvcnQgY29u
c3QgbGUgPSAobGhzLCByaHMsIG1zZykgPT4geworICAgIGlzTm90VW5kZWYobGhzKTsKKyAgICBp
c05vdFVuZGVmKHJocyk7CisgICAgaWYgKCEobGhzIDw9IHJocykpCisgICAgICAgIF9mYWlsKGBF
eHBlY3RlZDogIiR7bGhzfSIgPiAiJHtyaHN9ImAsIG1zZyk7CiB9OwogCiBjb25zdCBfdGhyb3dz
ID0gKGZ1bmMsIHR5cGUsIG1lc3NhZ2UsIC4uLmFyZ3MpID0+IHsKQEAgLTUxLDE5ICs5OSwxOCBA
QCBjb25zdCBfdGhyb3dzID0gKGZ1bmMsIHR5cGUsIG1lc3NhZ2UsIC4uLmFyZ3MpID0+IHsKICAg
ICB9IGNhdGNoIChlKSB7CiAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgdHlwZSAmJiBlLm1lc3Nh
Z2UgPT09IG1lc3NhZ2UpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRocm93IG5ldyBF
cnJvcihgRXhwZWN0ZWQgdG8gdGhyb3cgYSAke3R5cGUubmFtZX0gd2l0aCBtZXNzYWdlICIke21l
c3NhZ2V9IiwgZ290ICR7ZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7ZS5tZXNzYWdlfSJgKTsKKyAg
ICAgICAgX2ZhaWwoYEV4cGVjdGVkIHRvIHRocm93IGEgJHt0eXBlLm5hbWV9IHdpdGggbWVzc2Fn
ZSAiJHttZXNzYWdlfSIsIGdvdCAke2UubmFtZX0gd2l0aCBtZXNzYWdlICIke2UubWVzc2FnZX0i
YCk7CiAgICAgfQotICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdG8gdGhyb3cgYSAke3R5
cGUubmFtZX0gd2l0aCBtZXNzYWdlICIke21lc3NhZ2V9ImApOworICAgIF9mYWlsKGBFeHBlY3Rl
ZCB0byB0aHJvdyBhICR7dHlwZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7bWVzc2FnZX0iYCk7CiB9
OwogCi1jb25zdCBfaW5zdGFuY2VvZiA9IChvYmosIHR5cGUpID0+IG9iaiBpbnN0YW5jZW9mIHR5
cGU7Citjb25zdCBfaW5zdGFuY2VvZiA9IChvYmosIHR5cGUsIG1zZykgPT4geworICAgIGlmICgh
KG9iaiBpbnN0YW5jZW9mIHR5cGUpKQorICAgICAgICBfZmFpbChgRXhwZWN0ZWQgYSAke3R5cGVv
Zih0eXBlKX0sIGdvdCAke3R5cGVvZiBvYmp9YCk7Cit9OwogCiAvLyBVc2UgdW5kZXJzY29yZSBu
YW1lcyB0byBhdm9pZCBjbGFzaGluZyB3aXRoIGJ1aWx0aW4gbmFtZXMuCiBleHBvcnQgewotICAg
IF9ub3RVbmRlZiBhcyBub3RVbmRlZiwKLSAgICBfaXNVbmRlZiBhcyBpc1VuZGVmLAotICAgIF9l
cSBhcyBlcSwKLSAgICBfZ2UgYXMgZ2UsCiAgICAgX3Rocm93cyBhcyB0aHJvd3MsCiAgICAgX2lu
c3RhbmNlb2YgYXMgaW5zdGFuY2VvZiwKIH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMt
YXBpL3Rlc3RfTW9kdWxlLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qcwpp
bmRleCA4MjFkYTg0Li45NGRiMWE0IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfTW9kdWxlLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9Nb2R1bGUuanMKQEAg
LTcsMyArNywxMyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICBj
b25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CiAgICAgYXNzZXJ0Lmlu
c3RhbmNlb2YobW9kdWxlLCBXZWJBc3NlbWJseS5Nb2R1bGUpOwogfSkoKTsKKworKGZ1bmN0aW9u
IE1vZHVsZVdpdGhJbXBvcnRzKCkgeworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIo
KSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiZm9vIiwgImJhciIsIHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAuRW5kKCk7
CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKK30pKCk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzIGIvSlNUZXN0cy93YXNtL2pz
LWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCAwNTRlYWVmLi44MGVjZTI5IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCisrKyBiL0pTVGVzdHMvd2Fz
bS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKQEAgLTI4LDcgKzI4LDcgQEAgY29uc3QgY29uc3Ry
dWN0b3JQcm9wZXJ0aWVzID0gewogfTsKIAogCi1hc3NlcnQubm90VW5kZWYoV2ViQXNzZW1ibHkp
OworYXNzZXJ0LmlzTm90VW5kZWYoV2ViQXNzZW1ibHkpOwogY2hlY2tPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodXRpbGl0aWVzLmdsb2JhbCwgIldlYkFzc2VtYmx5IiwgeyB0eXBlb2Z2YWx1ZTogIm9i
amVjdCIsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZh
bHNlIH0pOwogYXNzZXJ0LmVxKFN0cmluZyhXZWJBc3NlbWJseSksICJbb2JqZWN0IFdlYkFzc2Vt
Ymx5XSIpOwogYXNzZXJ0LmlzVW5kZWYoV2ViQXNzZW1ibHkubGVuZ3RoKTsKQEAgLTM3LDEzICsz
NywxMyBAQCBhc3NlcnQudGhyb3dzKCgpID0+IFdlYkFzc2VtYmx5KCksIFR5cGVFcnJvciwgYFdl
YkFzc2VtYmx5IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSQogYXNzZXJ0LnRocm93cygoKSA9PiBuZXcg
V2ViQXNzZW1ibHkoKSwgVHlwZUVycm9yLCBgV2ViQXNzZW1ibHkgaXMgbm90IGEgY29uc3RydWN0
b3IgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseSgpJylgKTsKIAogZm9yIChjb25zdCBmIGlu
IGZ1bmN0aW9uUHJvcGVydGllcykgewotICAgIGFzc2VydC5ub3RVbmRlZihXZWJBc3NlbWJseVtm
XSk7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoV2ViQXNzZW1ibHlbZl0pOwogICAgIGFzc2VydC5l
cShXZWJBc3NlbWJseVtmXS5uYW1lLCBmKTsKICAgICBhc3NlcnQuZXEoV2ViQXNzZW1ibHlbZl0u
bGVuZ3RoLCBmdW5jdGlvblByb3BlcnRpZXNbZl0ubGVuZ3RoKTsKIH0KIAogZm9yIChjb25zdCBj
IGluIGNvbnN0cnVjdG9yUHJvcGVydGllcykgewotICAgIGFzc2VydC5ub3RVbmRlZihXZWJBc3Nl
bWJseVtjXSk7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoV2ViQXNzZW1ibHlbY10pOwogICAgIGFz
c2VydC5lcShXZWJBc3NlbWJseVtjXS5uYW1lLCBjKTsKICAgICBhc3NlcnQuZXEoV2ViQXNzZW1i
bHlbY10ubGVuZ3RoLCBjb25zdHJ1Y3RvclByb3BlcnRpZXNbY10ubGVuZ3RoKTsKICAgICBjaGVj
a093blByb3BlcnR5RGVzY3JpcHRvcihXZWJBc3NlbWJseSwgYywgY29uc3RydWN0b3JQcm9wZXJ0
aWVzW2NdKTsKQEAgLTY2LDcgKzY2LDcgQEAgZm9yIChjb25zdCBjIGluIGNvbnN0cnVjdG9yUHJv
cGVydGllcykgewogICAgICAgICBhc3NlcnQuaW5zdGFuY2VvZihpbnN0YW5jZSwgV2ViQXNzZW1i
bHkuSW5zdGFuY2UpOwogICAgICAgICBmb3IgKGNvbnN0IGludmFsaWQgb2YgaW52YWxpZEluc3Rh
bmNlSW1wb3J0cykKICAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5W2NdKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIGludmFsaWQp
LCBUeXBlRXJyb3IsIGBzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVz
dCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHlb
Y10obmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgaW52YWxpZCknKWAp
OwotICAgICAgICBhc3NlcnQubm90VW5kZWYoaW5zdGFuY2UuZXhwb3J0cyk7CisgICAgICAgIGFz
c2VydC5pc05vdFVuZGVmKGluc3RhbmNlLmV4cG9ydHMpOwogICAgICAgICBjaGVja093blByb3Bl
cnR5RGVzY3JpcHRvcihpbnN0YW5jZSwgImV4cG9ydHMiLCB7IHR5cGVvZnZhbHVlOiAib2JqZWN0
Iiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9
KTsKICAgICAgICAgYXNzZXJ0LmlzVW5kZWYoaW5zdGFuY2UuZXhwb3J0cy5fX3Byb3RvX18pOwog
ICAgICAgICBhc3NlcnQuZXEoUmVmbGVjdC5pc0V4dGVuc2libGUoaW5zdGFuY2UuZXhwb3J0cyks
IGZhbHNlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVy
SlNPTi5qcyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwppbmRl
eCAwOTM0MjMxLi5lZWMzYmU5IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rl
c3RfQnVpbGRlckpTT04uanMKKysrIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxk
ZXJKU09OLmpzCkBAIC0yLDE3ICsyLDE3IEBAIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9h
c3NlcnQuanMnOwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAKIGNvbnN0
IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKLSAgICBsZXQgZiA9IChuZXcg
QnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKTsKKyAgICBsZXQgZiA9IChuZXcgQnVpbGRlcigp
KS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCk7CiAgICAgYXNzZXJ0LnRocm93cyhvcEZu
LCBFcnJvciwgbWVzc2FnZSwgZik7CiB9OwogCiAoZnVuY3Rpb24gRW1wdHlNb2R1bGUoKSB7CiAg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5q
c29uKCkpOwotICAgIGFzc2VydC5ub3RVbmRlZihqLnByZWFtYmxlKTsKLSAgICBhc3NlcnQubm90
VW5kZWYoai5wcmVhbWJsZVsibWFnaWMgbnVtYmVyIl0pOwotICAgIGFzc2VydC5ub3RVbmRlZihq
LnByZWFtYmxlLnZlcnNpb24pOwotICAgIGFzc2VydC5ub3RVbmRlZihqLnNlY3Rpb24pOworICAg
IGFzc2VydC5pc05vdFVuZGVmKGoucHJlYW1ibGUpOworICAgIGFzc2VydC5pc05vdFVuZGVmKGou
cHJlYW1ibGVbIm1hZ2ljIG51bWJlciJdKTsKKyAgICBhc3NlcnQuaXNOb3RVbmRlZihqLnByZWFt
YmxlLnZlcnNpb24pOworICAgIGFzc2VydC5pc05vdFVuZGVmKGouc2VjdGlvbik7CiAgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDApOwogfSkoKTsKIApAQCAtMjAsMTQgKzIwLDE0IEBA
IGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKICAgICBjb25zdCBi
ID0gKG5ldyBCdWlsZGVyKCkpLnNldFByZWFtYmxlKHsgIm1hZ2ljIG51bWJlciI6IDEzMzcgfSk7
CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwogICAgIGFzc2VydC5lcShqLnBy
ZWFtYmxlWyJtYWdpYyBudW1iZXIiXSwgMTMzNyk7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGoucHJl
YW1ibGUudmVyc2lvbik7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoai5wcmVhbWJsZS52ZXJzaW9u
KTsKIH0pKCk7CiAKIChmdW5jdGlvbiBDdXN0b21WZXJzaW9uKCkgewogICAgIGNvbnN0IGIgPSAo
bmV3IEJ1aWxkZXIoKSkuc2V0UHJlYW1ibGUoeyAidmVyc2lvbiI6IDEzMzcgfSk7CiAgICAgY29u
c3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwogICAgIGFzc2VydC5lcShqLnByZWFtYmxlWyJ2
ZXJzaW9uIl0sIDEzMzcpOwotICAgIGFzc2VydC5ub3RVbmRlZihqLnByZWFtYmxlLnZlcnNpb24p
OworICAgIGFzc2VydC5pc05vdFVuZGVmKGoucHJlYW1ibGUudmVyc2lvbik7CiB9KSgpOwogCiAo
ZnVuY3Rpb24gQ3VzdG9tU2VjdGlvbigpIHsKQEAgLTU3LDE1ICs1Nyw4IEBAIGNvbnN0IGFzc2Vy
dE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIH0pKCk7CiAKIChmdW5jdGlvbiBDdXN0
b21TZWN0aW9uSW52YWxpZEJ5dGUoKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Ci0g
ICAgbGV0IHUgPSBiLlVua25vd24oImN1c3RvbSBzZWN0aW9uIik7Ci0gICAgdHJ5IHsKLSAgICAg
ICAgdS5CeXRlKDB4RkYgKyAxKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChlIGlu
c3RhbmNlb2YgUmFuZ2VFcnJvcikgeyByZXR1cm47IH0KLSAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBFeHBlY3RlZCBhIFJhbmdlRXJyb3IsIGdvdCAke2V9YCk7Ci0gICAgfQotICAgIHRocm93IG5l
dyBFcnJvcihgRXhwZWN0ZWQgdG8gdGhyb3cgYSBSYW5nZUVycm9yYCk7CisgICAgY29uc3QgdSA9
IChuZXcgQnVpbGRlcigpKS5Vbmtub3duKCJjdXN0b20gc2VjdGlvbiIpOworICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gdS5CeXRlKDB4RkYgKyAxKSwgRXJyb3IsIGBOb3QgdGhlIHNhbWU6ICIwIiBh
bmQgIjI1NiI6IFVua25vd24gc2VjdGlvbiBleHBlY3RlZCBieXRlLCBnb3Q6ICIyNTYiYCk7CiB9
KSgpOwogCiAoZnVuY3Rpb24gVHdvQ3VzdG9tU2VjdGlvbnMoKSB7CkBAIC04Niw2ICs3OSwxNjgg
QEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXSwgMHgxMSk7CiB9KSgpOwogCisoZnVuY3Rpb24gU2Vj
dGlvbnNXaXRoU2FtZUN1c3RvbU5hbWUoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigp
KS5Vbmtub3duKCJmb28iKS5FbmQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGIuVW5rbm93
bigiZm9vIiksIEVycm9yLCBgRXhwZWN0ZWQgZmFsc3k6IENhbm5vdCBoYXZlIHR3byBzZWN0aW9u
cyB3aXRoIHRoZSBzYW1lIG5hbWUgImZvbyIgYW5kIElEIDBgKTsKK30pKCk7CisKKyhmdW5jdGlv
biBFbXB0eVR5cGVTZWN0aW9uKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlw
ZSgpLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5u
YW1lLCAiVHlwZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDAp
OworfSkoKTsKKworKGZ1bmN0aW9uIFR3b1R5cGVTZWN0aW9ucygpIHsKKyAgICBjb25zdCBiID0g
KG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGIu
VHlwZSgpLCBFcnJvciwgYEV4cGVjdGVkIGZhbHN5OiBDYW5ub3QgaGF2ZSB0d28gc2VjdGlvbnMg
d2l0aCB0aGUgc2FtZSBuYW1lICJUeXBlIiBhbmQgSUQgMWApOworfSkoKTsKKworKGZ1bmN0aW9u
IFNpbXBsZVR5cGVTZWN0aW9uKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlw
ZSgpCisgICAgICAgICAgICAuRnVuYyhbXSkKKyAgICAgICAgICAgIC5GdW5jKFtdLCAidm9pZCIp
CisgICAgICAgICAgICAuRnVuYyhbXSwgImkzMiIpCisgICAgICAgICAgICAuRnVuYyhbXSwgImk2
NCIpCisgICAgICAgICAgICAuRnVuYyhbXSwgImYzMiIpCisgICAgICAgICAgICAuRnVuYyhbXSwg
ImY2NCIpCisgICAgICAgICAgICAuRnVuYyhbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCJdKQor
ICAgICAgICAuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDcpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0ucmV0LCAidm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YVsxXS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ucmV0
LCAidm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5wYXJhbXMsIFtd
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMl0ucmV0LCAiaTMyIik7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzNdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVszXS5yZXQsICJpNjQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzBdLmRhdGFbNF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhWzRdLnJldCwgImYzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs1XS5w
YXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNV0ucmV0LCAiZjY0
Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzZdLnBhcmFtcywgWyJpMzIiLCAi
aTY0IiwgImYzMiIsICJmNjQiXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzZd
LnJldCwgInZvaWQiKTsKK30pKCk7CisKKyhmdW5jdGlvbiBFbXB0eUltcG9ydFNlY3Rpb24oKSB7
CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5JbXBvcnQoKS5FbmQoKTsKKyAgICBjb25z
dCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5n
dGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkltcG9ydCIpOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDApOworfSkoKTsKKworKGZ1bmN0
aW9uIEltcG9ydEJlZm9yZVR5cGVTZWN0aW9ucygpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWls
ZGVyKCkpLkltcG9ydCgpLkVuZCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYi5UeXBlKCks
IEVycm9yLCBgRXhwZWN0ZWQ6ICIyIiA+ICIxIjogQmFkIHNlY3Rpb24gb3JkZXJpbmc6ICJJbXBv
cnQiIGNhbm5vdCBwcmVjZWRlICJUeXBlImApOworfSkoKTsKKworKGZ1bmN0aW9uIEltcG9ydEZ1
bmN0aW9uV2l0aG91dFR5cGVTZWN0aW9uKCkgeworICAgIGNvbnN0IGkgPSAobmV3IEJ1aWxkZXIo
KSkuSW1wb3J0KCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpLkZ1bmN0aW9uKCJmb28iLCAi
YmFyIiwgMCksIEVycm9yLCBgU2hvdWxkbid0IGJlIHVuZGVmaW5lZDogQ2FuJ3QgdXNlIHR5cGUg
MCBpZiBhIHR5cGUgc2VjdGlvbiBpc24ndCBwcmVzZW50YCk7Cit9KSgpOworCisoZnVuY3Rpb24g
SW1wb3J0RnVuY3Rpb25XaXRoSW52YWxpZFR5cGUoKSB7CisgICAgY29uc3QgaSA9IChuZXcgQnVp
bGRlcigpKS5UeXBlKCkuRW5kKCkuSW1wb3J0KCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiBp
LkZ1bmN0aW9uKCJmb28iLCAiYmFyIiwgMCksIEVycm9yLCBgU2hvdWxkbid0IGJlIHVuZGVmaW5l
ZDogVHlwZSAwIGRvZXNuJ3QgZXhpc3QgaW4gdHlwZSBzZWN0aW9uYCk7Cit9KSgpOworCisoZnVu
Y3Rpb24gSW1wb3J0RnVuY3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKQor
ICAgICAgICAuVHlwZSgpLkZ1bmMoW10pLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYmFyIiwgMCkKKyAgICAgICAgLkVuZCgpOworICAgIGNv
bnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFd
LmRhdGEubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubW9k
dWxlLCAiZm9vIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmZpZWxkLCAi
YmFyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnR5cGUsIDApOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5raW5kLCAiRnVuY3Rpb24iKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbnNXaXRoRXhpc3RpbmdUeXBlcygpIHsKKyAgICBj
b25zdCBiID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgIC5G
dW5jKFtdKQorICAgICAgICAgICAgLkZ1bmMoW10sICJpMzIiKQorICAgICAgICAgICAgLkZ1bmMo
WyJpNjQiLCAiaTMyIl0pCisgICAgICAgICAgICAuRnVuYyhbImk2NCIsICJpNjQiXSkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
LCAiYmFyIiwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJi
YXoiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgIC5GdW5jdGlvbigi
Zm9vIiwgImJvbyIsIHsgcGFyYW1zOiBbImk2NCIsICJpNjQiXSB9KQorICAgICAgICAuRW5kKCk7
CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YS5sZW5ndGgsIDQpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50eXBlLCAw
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0udHlwZSwgMSk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLnR5cGUsIDMpOworfSkoKTsKKworKGZ1bmN0aW9u
IEltcG9ydEZ1bmN0aW9uV2l0aE5ld1R5cGUoKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRl
cigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCAiYmFyIiwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIsICJiYXoiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJvbyIsIHsgcGFyYW1zOiBbImk2NCIsICJpNjQiXSB9
KQorICAgICAgICAuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVsxXS5yZXQsICJpMzIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0u
cGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzJdLnJldCwgInZv
aWQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMl0ucGFyYW1zLCBbImk2NCIs
ICJpNjQiXSk7Cit9KSgpOworCisoZnVuY3Rpb24gRW1wdHlFeHBvcnRTZWN0aW9uKCkgeworICAg
IGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuRXhwb3J0KCkuRW5kKCk7CisgICAgY29uc3QgaiA9
IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVuZ3RoLCAx
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJFeHBvcnQiKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAwKTsKK30pKCk7CisKKyhmdW5jdGlvbiBF
eHBvcnRGdW5jdGlvbldpdGhvdXRUeXBlU2VjdGlvbigpIHsKKyAgICBjb25zdCBlID0gKG5ldyBC
dWlsZGVyKCkpLkV4cG9ydCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZS5GdW5jdGlvbigi
Zm9vIiwgMCwgMCksIEVycm9yLCBgU2hvdWxkbid0IGJlIHVuZGVmaW5lZDogQ2FuJ3QgdXNlIHR5
cGUgMCBpZiBhIHR5cGUgc2VjdGlvbiBpc24ndCBwcmVzZW50YCk7Cit9KSgpOworCisoZnVuY3Rp
b24gRXhwb3J0RnVuY3Rpb25XaXRoSW52YWxpZFR5cGUoKSB7CisgICAgY29uc3QgZSA9IChuZXcg
QnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuRXhwb3J0KCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9
PiBlLkZ1bmN0aW9uKCJmb28iLCAwLCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVk
OiBUeXBlIDAgZG9lc24ndCBleGlzdCBpbiB0eXBlIHNlY3Rpb25gKTsKK30pKCk7CisKKyhmdW5j
dGlvbiBFeHBvcnRBbkltcG9ydCgpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLkZ1bmN0aW9uKCJmb28iLCAi
YmFyIiwgeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5GdW5jdGlvbigi
RXhwb3J0QW5JbXBvcnQiLCB7IG1vZHVsZTogImZvbyIsIGZpZWxkOiAiYmFyIiB9KS5FbmQoKTsK
KyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsyXS5uYW1lLCAiRXhwb3J0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsyXS5kYXRh
Lmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsyXS5kYXRhWzBdLmZpZWxkLCAi
RXhwb3J0QW5JbXBvcnQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGFbMF0udHlw
ZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsyXS5kYXRhWzBdLmluZGV4LCAwKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGFbMF0ua2luZCwgIkZ1bmN0aW9uIik7Cit9KSgp
OworCisoZnVuY3Rpb24gRXhwb3J0TWlzbWF0Y2hlZEltcG9ydCgpIHsKKyAgICBjb25zdCBlID0g
KG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgp
LkZ1bmN0aW9uKCJmb28iLCAiYmFyIiwgeyBwYXJhbXM6IFtdIH0pLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGUuRnVuY3Rpb24oImZvbyIsIDAsIHsg
cGFyYW1zOiBbImkzMiJdIH0pLCBFcnJvciwgYE5vdCB0aGUgc2FtZTogIjEiIGFuZCAiMCI6IFJl
LWV4cG9ydGluZyBpbXBvcnQgImJhciIgYXMgImZvbyIgaGFzIG1pc21hdGNoaW5nIHR5cGVgKTsK
K30pKCk7CisKIChmdW5jdGlvbiBFbXB0eUNvZGVTZWN0aW9uKCkgewogICAgIGNvbnN0IGIgPSBu
ZXcgQnVpbGRlcigpOwogICAgIGIuQ29kZSgpOwpAQCAtOTcsMTk5ICsyNTIsMjU0IEBAIGNvbnN0
IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3NhZ2UpID0+IHsKIAogKGZ1bmN0aW9uIENvZGVT
ZWN0aW9uV2l0aEVtcHR5RnVuY3Rpb24oKSB7CiAgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7
Ci0gICAgYi5Db2RlKCkKLSAgICAgICAgLkZ1bmN0aW9uKCk7CisgICAgYi5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCk7CiAgICAgY29uc3QgaiA9
IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVuZ3RoLCAx
KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLm5hbWUsICJDb2RlIik7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvbi5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFt
ZSwgIlR5cGUiKTsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAxKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1ldGVyQ291bnQsIDApOwot
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDApOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0ucmV0LCAidm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0ubmFtZSwgIkNvZGUiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVu
Z3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubmFtZSwgdW5kZWZp
bmVkKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlwZSwgMCk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnBhcmFtZXRlckNvdW50LCAwKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwgMCk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAwKTsKIH0pKCk7CiAKIChm
dW5jdGlvbiBDb2RlU2VjdGlvbldpdGhFbXB0eUZ1bmN0aW9uV2l0aFBhcmFtZXRlcnMoKSB7CiAg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Ci0gICAgYi5Db2RlKCkKLSAgICAgICAgLkZ1bmN0
aW9uKFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0Il0pOworICAgIGIuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7IHBhcmFtczogWyJpMzIiLCAi
aTY0IiwgImYzMiIsICJmNjQiXSB9KTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24o
KSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvbi5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0ubmFtZSwgIkNvZGUiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0
aCwgMik7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMSk7Ci0gICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtZXRlckNvdW50LCA0KTsKLSAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzBdLCAiaTMyIik7Ci0gICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fsc1sxXSwgImk2NCIpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHNbMl0sICJmMzIiKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzNdLCAiZjY0Iik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1zLCBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCJdKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucmV0LCAidm9pZCIpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0ucGFyYW1ldGVyQ291bnQsIDQpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVswXS5sb2NhbHNbMF0sICJpMzIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0ubG9jYWxzWzFdLCAiaTY0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmxvY2Fsc1syXSwgImYzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5s
b2NhbHNbM10sICJmNjQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZS5sZW5ndGgsIDApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEludmFsaWRGdW5jdGlvblBhcmFtZXRl
cnMoKSB7Ci0gICAgZm9yIChsZXQgaW52YWxpZCBpbiBbIiIsICJ2b2lkIiwgImJvb2wiLCAiYW55
IiwgInN0cnVjdCJdKSB7CisgICAgZm9yIChsZXQgaW52YWxpZCBvZiBbIiIsICJ2b2lkIiwgImJv
b2wiLCAiYW55IiwgInN0cnVjdCIsIDAsIDMuMTQsIHVuZGVmaW5lZCwgW10sIHt9XSkgewogICAg
ICAgICBjb25zdCBjID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKTsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgIGMuRnVuY3Rpb24oW2ludmFsaWRdKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewot
ICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgeyBjb250aW51ZTsgfQotICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhbiBFcnJvciwgZ290ICR7ZX1gKTsKLSAg
ICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHRvIHRocm93IGFuIEVy
cm9yIGZvciAke2ludmFsaWR9YCk7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYy5GdW5j
dGlvbih7IHBhcmFtczogW2ludmFsaWRdIH0pLCBFcnJvciwgYEV4cGVjdGVkIHRydXRoeTogVHlw
ZSBwYXJhbWV0ZXIgJHtpbnZhbGlkfSBuZWVkcyBhIHZhbGlkIHZhbHVlIHR5cGVgKTsKICAgICB9
CiB9KSgpOwogCiAoZnVuY3Rpb24gU2ltcGxlRnVuY3Rpb24oKSB7CiAgICAgY29uc3QgYiA9IG5l
dyBCdWlsZGVyKCk7Ci0gICAgYi5Db2RlKCkKLSAgICAgICAgLkZ1bmN0aW9uKCkKLSAgICAgICAg
ICAgIC5Ob3AoKQotICAgICAgICAgICAgLk5vcCgpCi0gICAgICAgIC5FbmQoKTsKKyAgICBiLlR5
cGUoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKQorICAg
ICAgICAgICAgICAgIC5Ob3AoKQorICAgICAgICAgICAgICAgIC5Ob3AoKQorICAgICAgICAgICAg
LkVuZCgpOwogICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFd
LmRhdGEubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9j
YWxzLmxlbmd0aCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUu
bGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5u
YW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0u
bmFtZSwgIm5vcCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJd
Lm5hbWUsICJlbmQiKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBUd29TaW1wbGVGdW5jdGlvbnMoKSB7
CiAgICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7Ci0gICAgYi5Db2RlKCkKLSAgICAgICAgLkZ1
bmN0aW9uKCkKLSAgICAgICAgICAgIC5Ob3AoKQotICAgICAgICAgICAgLk5vcCgpCisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkKKyAg
ICAgICAgICAgICAgICAuTm9wKCkKKyAgICAgICAgICAgICAgICAuTm9wKCkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAuUmV0dXJu
KCkKKyAgICAgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24o
KSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMik7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmxvY2Fscy5sZW5ndGgsIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgIm5vcCIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLmxvY2Fscy5sZW5ndGgsIDApOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVsxXS5jb2RlLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzFdLmNvZGVbMF0ubmFtZSwgInJldHVybiIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVsxXS5jb2RlWzFdLm5hbWUsICJlbmQiKTsKK30pKCk7CisKKyhm
dW5jdGlvbiBOYW1lZEZ1bmN0aW9ucygpIHsKKyAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKS5U
eXBlKCkuRW5kKCkuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbigiaGVsbG8iKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oIndvcmxkIiwgeyBwYXJhbXM6IFsiaTMyIl0gfSkuRW5kKCkKKyAgICAu
RW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YVswXS5uYW1lLCAiaGVsbG8iKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0ucGFyYW1ldGVyQ291bnQsIDApOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVsxXS5uYW1lLCAid29ybGQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMV0ucGFyYW1ldGVyQ291bnQsIDEpOworfSkoKTsKKworKGZ1bmN0aW9uIEV4cG9y
dFNpbXBsZUZ1bmN0aW9ucygpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpCisgICAg
ICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImZvbyIsIDAsIHsgcGFyYW1zOiBbXSB9KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIi
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiZXR0ZXJOYW1lRm9yQmFyIiwgImJhciIpCiAgICAg
ICAgIC5FbmQoKQotICAgICAgICAuRnVuY3Rpb24oKQotICAgICAgICAgICAgLlJldHVybigpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbih7IHBhcmFtczogW10gfSkuTm9w
KCkuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIiwgeyBwYXJhbXM6IFtdIH0pLk5v
cCgpLkVuZCgpCiAgICAgICAgIC5FbmQoKTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpz
b24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMik7Ci0gICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fscy5sZW5ndGgsIDApOwotICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgIm5vcCIpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJub3AiKTsKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7Ci0gICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLmxvY2Fscy5sZW5ndGgsIDApOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVsxXS5jb2RlLmxlbmd0aCwgMik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzFdLmNvZGVbMF0ubmFtZSwgInJldHVybiIpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVsxXS5jb2RlWzFdLm5hbWUsICJlbmQiKTsKKyAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzBdLmRhdGFbMF0ucmV0LCAidm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVu
Z3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uZmllbGQsICJmb28i
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0udHlwZSwgMCk7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmluZGV4LCAwKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzFdLmRhdGFbMF0ua2luZCwgIkZ1bmN0aW9uIik7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzFdLmZpZWxkLCAiYmFyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzFdLnR5cGUsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsxXS5p
bmRleCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLmtpbmQsICJGdW5j
dGlvbiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsyXS5maWVsZCwgImJldHRl
ck5hbWVGb3JCYXIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0udHlwZSwg
MCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJdLmluZGV4LCAxKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0ua2luZCwgIkZ1bmN0aW9uIik7Cit9KSgpOwor
CisoZnVuY3Rpb24gRXhwb3J0VW5kZWZpbmVkRnVuY3Rpb24oKSB7CisgICAgY29uc3QgYyA9IChu
ZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuRXhwb3J0KCkuRnVuY3Rpb24oImZvbyIpLkVuZCgp
LkNvZGUoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGMuRW5kKCksIEVycm9yLCBgU2hvdWxk
IGJlIG51bWJlciwgZ290IHVuZGVmaW5lZDogRXhwb3J0IHNlY3Rpb24gY29udGFpbnMgdW5kZWZp
bmVkIGZ1bmN0aW9uICJmb28iYCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gVHdvQnVpbGRlcnNBdFRo
ZVNhbWVUaW1lKCkgewogICAgIGNvbnN0IGIgPSBbbmV3IEJ1aWxkZXIoKSwgbmV3IEJ1aWxkZXIo
KV07Ci0gICAgY29uc3QgZiA9IGIubWFwKGJ1aWxkZXIgPT4gYnVpbGRlci5Db2RlKCkuRnVuY3Rp
b24oKSk7CisgICAgY29uc3QgZiA9IGIubWFwKGJ1aWxkZXIgPT4gYnVpbGRlci5UeXBlKCkuRW5k
KCkuQ29kZSgpLkZ1bmN0aW9uKCkpOwogICAgIGZbMF0uTm9wKCk7CiAgICAgZlsxXS5SZXR1cm4o
KS5FbmQoKS5FbmQoKTsKICAgICBmWzBdLk5vcCgpLkVuZCgpLkVuZCgpOwogICAgIGNvbnN0IGog
PSBiLm1hcChidWlsZGVyID0+IEpTT04ucGFyc2UoYnVpbGRlci5qc29uKCkpKTsKLSAgICBhc3Nl
cnQuZXEoalswXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOwotICAgIGFzc2Vy
dC5lcShqWzBdLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKLSAgICBh
c3NlcnQuZXEoalswXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7Ci0g
ICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIp
OwotICAgIGFzc2VydC5lcShqWzFdLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMik7
Ci0gICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgInJl
dHVybiIpOwotICAgIGFzc2VydC5lcShqWzFdLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLm5h
bWUsICJlbmQiKTsKKyAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5s
ZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBd
Lm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZVsxXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbMl0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5lcShqWzFdLnNlY3Rpb25bMV0uZGF0
YVswXS5jb2RlLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblsxXS5kYXRh
WzBdLmNvZGVbMF0ubmFtZSwgInJldHVybiIpOworICAgIGFzc2VydC5lcShqWzFdLnNlY3Rpb25b
MV0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJlbmQiKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBDaGVj
a2VkT3Bjb2RlQXJndW1lbnRzVG9vTWFueSgpIHsKLSAgICBhc3NlcnRPcFRocm93cyhmID0+IGYu
Tm9wKCJ1aC1vaCEiKSwgYCJub3AiIGV4cGVjdHMgMCBpbW1lZGlhdGVzLCBnb3QgMWApOworICAg
IGFzc2VydE9wVGhyb3dzKGYgPT4gZi5Ob3AoInVoLW9oISIpLCBgTm90IHRoZSBzYW1lOiAiMSIg
YW5kICIwIjogIm5vcCIgZXhwZWN0cyAwIGltbWVkaWF0ZXMsIGdvdCAxYCk7CiB9KSgpOwogCiAo
ZnVuY3Rpb24gVW5jaGVja2VkT3Bjb2RlQXJndW1lbnRzVG9vTWFueSgpIHsKLSAgICAobmV3IEJ1
aWxkZXIoKSkuc2V0Q2hlY2tlZChmYWxzZSkuQ29kZSgpLkZ1bmN0aW9uKCkuTm9wKCJUaGlzIGlz
IGZpbmUuIiwgIkknbSBPSyB3aXRoIHRoZSBldmVudHMgdGhhdCBhcmUgdW5mb2xkaW5nIGN1cnJl
bnRseS4iKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuc2V0Q2hlY2tlZChmYWxzZSkuVHlwZSgpLkVu
ZCgpLkNvZGUoKS5GdW5jdGlvbigpLk5vcCgiVGhpcyBpcyBmaW5lLiIsICJJJ20gT0sgd2l0aCB0
aGUgZXZlbnRzIHRoYXQgYXJlIHVuZm9sZGluZyBjdXJyZW50bHkuIik7CiB9KSgpOwogCiAoZnVu
Y3Rpb24gQ2hlY2tlZE9wY29kZUFyZ3VtZW50c05vdEVub3VnaCgpIHsKLSAgICBhc3NlcnRPcFRo
cm93cyhmID0+IGYuSTMyQ29uc3QoKSwgYCJpMzIuY29uc3QiIGV4cGVjdHMgMSBpbW1lZGlhdGVz
LCBnb3QgMGApOworICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5JMzJDb25zdCgpLCBgTm90IHRo
ZSBzYW1lOiAiMCIgYW5kICIxIjogImkzMi5jb25zdCIgZXhwZWN0cyAxIGltbWVkaWF0ZXMsIGdv
dCAwYCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gVW5jaGVja2VkT3Bjb2RlQXJndW1lbnRzTm90RW5v
dWdoKCkgewotICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNlKS5Db2RlKCkuRnVu
Y3Rpb24oKS5JMzJDb25zdCgpOworICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNl
KS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuSTMyQ29uc3QoKTsKIH0pKCk7CiAKIChm
dW5jdGlvbiBDYWxsTm9Bcmd1bWVudHMoKSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigp
KS5Db2RlKCkuRnVuY3Rpb24oKS5DYWxsKDApLkVuZCgpLkVuZCgpOworICAgIGNvbnN0IGIgPSAo
bmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuRW5k
KCkuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImNhbGwiKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0
aCwgMSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRp
YXRlc1swXSwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0u
bmFtZSwgImVuZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxl
bmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFt
ZSwgImNhbGwiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5h
cmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlc1swXSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9u
IENhbGxJbnZhbGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWy0xLCAweDEwMDAwMDAwMCwgIjAi
LCB7fSwgSW5maW5pdHksIC1JbmZpbml0eSwgTmFOLCAtTmFOLCBudWxsXSkKLSAgICAgICAgYXNz
ZXJ0T3BUaHJvd3MoZiA9PiBmLkNhbGwoYyksIGBJbnZhbGlkIHZhbHVlIG9uIGNhbGw6IGdvdCAi
JHtjfSIsIGV4cGVjdGVkIGkzMmApOworICAgICAgICBhc3NlcnRPcFRocm93cyhmID0+IGYuQ2Fs
bChjKSwgYEV4cGVjdGVkIHRydXRoeTogSW52YWxpZCB2YWx1ZSBvbiBjYWxsOiBnb3QgIiR7Y30i
LCBleHBlY3RlZCBpMzJgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBJMzJDb25zdFZhbGlkKCkgewog
ICAgIGZvciAobGV0IGMgb2YgWzAsIDEsIDIsIDQyLCAxMzM3LCAweEZGLCAweEZGRkYsIDB4N0ZG
RkZGRkYsIDB4RkZGRkZGRkUsIDB4RkZGRkZGRkZdKSB7Ci0gICAgICAgIGNvbnN0IGIgPSAobmV3
IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuSTMyQ29uc3QoYykuUmV0dXJuKCkuRW5kKCku
RW5kKCk7CisgICAgICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNv
ZGUoKS5GdW5jdGlvbigpLkkzMkNvbnN0KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOwogICAgICAg
ICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJpMzIuY29uc3QiKTsKLSAgICAgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uYXJndW1lbnRzLmxlbmd0aCwgMCk7
Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0
ZXMubGVuZ3RoLCAxKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNv
ZGVbMF0uaW1tZWRpYXRlc1swXSwgYyk7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVswXS5jb2RlWzBdLm5hbWUsICJpMzIuY29uc3QiKTsKKyAgICAgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uYXJndW1lbnRzLmxlbmd0aCwgMCk7CisgICAgICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXMubGVuZ3Ro
LCAxKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1t
ZWRpYXRlc1swXSwgYyk7CiAgICAgfQogfSkoKTsKIAogKGZ1bmN0aW9uIEkzMkNvbnN0SW52YWxp
ZCgpIHsKICAgICBmb3IgKGxldCBjIG9mIFstMSwgMHgxMDAwMDAwMDAsIDAuMSwgLTAuMSwgIjAi
LCB7fSwgSW5maW5pdHksIG51bGxdKQotICAgICAgICBhc3NlcnRPcFRocm93cyhmID0+IGYuSTMy
Q29uc3QoYyksIGBJbnZhbGlkIHZhbHVlIG9uIGkzMi5jb25zdDogZ290ICIke2N9IiwgZXhwZWN0
ZWQgaTMyYCk7CisgICAgICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5JMzJDb25zdChjKSwgYEV4
cGVjdGVkIHRydXRoeTogSW52YWxpZCB2YWx1ZSBvbiBpMzIuY29uc3Q6IGdvdCAiJHtjfSIsIGV4
cGVjdGVkIGkzMmApOwogfSkoKTsKIAogLy8gRklYTUU6IHRlc3QgaTY0LiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNDIwCiAKIChmdW5jdGlvbiBGMzJDb25zdFZh
bGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWzAsIC0wLiwgMC4yLCBNYXRoLlBJLCAweDEwMDAw
MDAwMF0pIHsKLSAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rp
b24oKS5GMzJDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKKyAgICAgICAgY29uc3QgYiA9
IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuRjMyQ29uc3Qo
YykuUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAgICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIu
anNvbigpKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0u
bmFtZSwgImYzMi5jb25zdCIpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwotICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsK
KyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImYz
Mi5jb25zdCIpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsw
XS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOworICAgICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsKICAgICB9CiB9
KSgpOwogCiAoZnVuY3Rpb24gRjMyQ29uc3RJbnZhbGlkKCkgewogICAgIGZvciAobGV0IGMgb2Yg
WyIwIiwge30sIEluZmluaXR5LCAtSW5maW5pdHksIE5hTiwgLU5hTiwgbnVsbF0pCi0gICAgICAg
IGFzc2VydE9wVGhyb3dzKGYgPT4gZi5GMzJDb25zdChjKSwgYEludmFsaWQgdmFsdWUgb24gZjMy
LmNvbnN0OiBnb3QgIiR7Y30iLCBleHBlY3RlZCBmMzJgKTsKKyAgICAgICAgYXNzZXJ0T3BUaHJv
d3MoZiA9PiBmLkYzMkNvbnN0KGMpLCBgRXhwZWN0ZWQgdHJ1dGh5OiBJbnZhbGlkIHZhbHVlIG9u
IGYzMi5jb25zdDogZ290ICIke2N9IiwgZXhwZWN0ZWQgZjMyYCk7CiB9KSgpOwogCiAoZnVuY3Rp
b24gRjY0Q29uc3RWYWxpZCgpIHsKICAgICBmb3IgKGxldCBjIG9mIFswLCAtMC4sIDAuMiwgTWF0
aC5QSSwgMHgxMDAwMDAwMDBdKSB7Ci0gICAgICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSku
Q29kZSgpLkZ1bmN0aW9uKCkuRjY0Q29uc3QoYykuUmV0dXJuKCkuRW5kKCkuRW5kKCk7CisgICAg
ICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlv
bigpLkY2NENvbnN0KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOwogICAgICAgICBjb25zdCBqID0g
SlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YVswXS5jb2RlWzBdLm5hbWUsICJmNjQuY29uc3QiKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGVbMF0uYXJndW1lbnRzLmxlbmd0aCwgMCk7Ci0gICAgICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXMubGVuZ3RoLCAx
KTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRp
YXRlc1swXSwgYyk7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2Rl
WzBdLm5hbWUsICJmNjQuY29uc3QiKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMF0uYXJndW1lbnRzLmxlbmd0aCwgMCk7CisgICAgICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKKyAgICAg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlc1swXSwg
Yyk7CiAgICAgfQogfSkoKTsKIAogKGZ1bmN0aW9uIEY2NENvbnN0SW52YWxpZCgpIHsKICAgICBm
b3IgKGxldCBjIG9mIFsiMCIsIHt9LCBJbmZpbml0eSwgLUluZmluaXR5LCBOYU4sIC1OYU4sIG51
bGxdKQotICAgICAgICBhc3NlcnRPcFRocm93cyhmID0+IGYuRjY0Q29uc3QoYyksIGBJbnZhbGlk
IHZhbHVlIG9uIGY2NC5jb25zdDogZ290ICIke2N9IiwgZXhwZWN0ZWQgZjY0YCk7CisgICAgICAg
IGFzc2VydE9wVGhyb3dzKGYgPT4gZi5GNjRDb25zdChjKSwgYEV4cGVjdGVkIHRydXRoeTogSW52
YWxpZCB2YWx1ZSBvbiBmNjQuY29uc3Q6IGdvdCAiJHtjfSIsIGV4cGVjdGVkIGY2NGApOwogfSko
KTsKIAogKGZ1bmN0aW9uIENhbGxPbmVGcm9tU3RhY2soKSB7Ci0gICAgY29uc3QgYiA9IChuZXcg
QnVpbGRlcigpKS5Db2RlKCkKLSAgICAgICAgLkZ1bmN0aW9uKFsiaTMyIl0pCisgICAgY29uc3Qg
YiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpCisgICAgICAgIC5GdW5jdGlv
bih7IHBhcmFtczogWyJpMzIiXSB9KQogICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQogICAgICAg
ICAgICAgLkNhbGwoMCkKICAgICAgICAgLkVuZCgpCiAgICAgLkVuZCgpOwogICAgIGNvbnN0IGog
PSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZS5sZW5ndGgsIDMpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5j
b2RlWzBdLm5hbWUsICJpMzIuY29uc3QiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCA0Mik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgImNhbGwiKTsKLSAgICAvLyBGSVhNRTogYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0uYXJndW1lbnRzLmxlbmd0aCwgMSk7IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0uaW1tZWRpYXRlc1swXSwg
MCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVu
ZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5j
b25zdCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVk
aWF0ZXNbMF0sIDQyKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsx
XS5uYW1lLCAiY2FsbCIpOworICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0uY29kZVsxXS5hcmd1bWVudHMubGVuZ3RoLCAxKTsgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzI2NworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVswXS5jb2RlWzFdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5pbW1lZGlhdGVzWzBdLCAwKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7CiB9KSgpOwogCiAvLyBG
SVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3IGFsbCBv
ZiB0aGVzZToKQEAgLTMwMSwyMiArNTExLDIyIEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9w
Rm4sIG1lc3NhZ2UpID0+IHsKIC8vICB0ZXN0IGZ1bmN0aW9uIG5hbWVzIChib3RoIHNldHRpbmcg
YW5kIGNhbGxpbmcgdGhlbSkuCiAKIChmdW5jdGlvbiBDYWxsTWFueUZyb21TdGFjaygpIHsKLSAg
ICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKQotICAgICAgICAgIC5GdW5jdGlvbihb
ImkzMiIsICJpMzIiLCAiaTMyIiwgImkzMiJdKQorICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIo
KSkuVHlwZSgpLkVuZCgpLkNvZGUoKQorICAgICAgICAuRnVuY3Rpb24oeyBwYXJhbXM6IFsiaTMy
IiwgImkzMiIsICJpMzIiLCAiaTMyIl0gfSkKICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKS5J
MzJDb25zdCgxMzM3KS5JMzJDb25zdCgweEJFRUYpLkkzMkNvbnN0KDB4RkZGRikKICAgICAgICAg
ICAgICAgLkNhbGwoMCkKICAgICAgICAgLkVuZCgpCiAgICAgLkVuZCgpOwogICAgIGNvbnN0IGog
PSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFb
MF0uY29kZS5sZW5ndGgsIDYpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5j
b2RlWzRdLm5hbWUsICJjYWxsIik7Ci0gICAgLy8gRklYTUU6IGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YVswXS5jb2RlWzRdLmFyZ3VtZW50cy5sZW5ndGgsIDQpOyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblsw
XS5kYXRhWzBdLmNvZGVbNF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzRdLmltbWVkaWF0ZXNbMF0sIDApOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgNik7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbNF0ubmFtZSwgImNhbGwiKTsKKyAgICAvLyBGSVhN
RTogYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbNF0uYXJndW1lbnRzLmxlbmd0
aCwgNCk7IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVs0XS5pbW1lZGlhdGVzLmxlbmd0
aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbNF0uaW1tZWRp
YXRlc1swXSwgMCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gT3Bjb2RlQWRkKCkgewotICAgIGNvbnN0
IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpCisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigp
KS5UeXBlKCkuRW5kKCkuQ29kZSgpCiAgICAgICAgICAgLkZ1bmN0aW9uKCkKICAgICAgICAgICAg
ICAgLkkzMkNvbnN0KDQyKS5JMzJDb25zdCgxMzM3KQogICAgICAgICAgICAgICAuSTMyQWRkKCkK
QEAgLTMyNCwzOSArNTM0LDM5IEBAIGNvbnN0IGFzc2VydE9wVGhyb3dzID0gKG9wRm4sIG1lc3Nh
Z2UpID0+IHsKICAgICAgICAgLkVuZCgpCiAgICAgLkVuZCgpOwogICAgIGNvbnN0IGogPSBKU09O
LnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29k
ZS5sZW5ndGgsIDUpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzJd
Lm5hbWUsICJpMzIuYWRkIik7Ci0gICAgLy8gRklYTUU6IGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlWzJdLmFyZ3VtZW50cy5sZW5ndGgsIDIpOyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhWzBdLmNvZGVbM10ubmFtZSwgInJldHVybiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgNSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMl0ubmFtZSwgImkzMi5hZGQiKTsKKyAgICAvLyBGSVhNRTogYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMl0uYXJndW1lbnRzLmxlbmd0aCwgMik7IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVszXS5uYW1lLCAicmV0dXJuIik7CiAgICAgLy8gRklY
TUUgY2hlY2sgcmV0dXJuLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYzMjY3CiB9KSgpOwogCiAoZnVuY3Rpb24gT3Bjb2RlVW5yZWFjaGFibGUoKSB7Ci0gICAgY29u
c3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLkVu
ZCgpLkVuZCgpOworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNv
ZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7CiAgICAgY29uc3QgaiA9
IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsw
XS5jb2RlLmxlbmd0aCwgMik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNv
ZGVbMF0ubmFtZSwgInVucmVhY2hhYmxlIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZVswXS5uYW1lLCAidW5yZWFjaGFibGUiKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNv
ZGVVbnJlYWNoYWJsZUNvbWJpbmF0aW9ucygpIHsKLSAgICAobmV3IEJ1aWxkZXIoKSkuQ29kZSgp
LkZ1bmN0aW9uKCkuTm9wKCkuVW5yZWFjaGFibGUoKS5FbmQoKS5FbmQoKTsKLSAgICAobmV3IEJ1
aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5Ob3AoKS5FbmQoKS5FbmQo
KTsKLSAgICAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkuUmV0dXJuKCkuVW5yZWFj
aGFibGUoKS5FbmQoKS5FbmQoKTsKLSAgICAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9u
KCkuVW5yZWFjaGFibGUoKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKLSAgICAobmV3IEJ1aWxkZXIo
KSkuQ29kZSgpLkZ1bmN0aW9uKCkuQ2FsbCgwKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpOwot
ICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLkNhbGwo
MCkuRW5kKCkuRW5kKCk7CisgICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCku
RnVuY3Rpb24oKS5Ob3AoKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAo
bmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxl
KCkuTm9wKCkuRW5kKCkuRW5kKCkuanNvbigpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCku
RW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuUmV0dXJuKCkuVW5yZWFjaGFibGUoKS5FbmQoKS5FbmQo
KS5qc29uKCk7CisgICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rp
b24oKS5VbnJlYWNoYWJsZSgpLlJldHVybigpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3
IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuVW5yZWFj
aGFibGUoKS5FbmQoKS5FbmQoKS5qc29uKCk7CisgICAgKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5F
bmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLkNhbGwoMCkuRW5kKCkuRW5kKCku
anNvbigpOwogfSkoKTsKIAogKGZ1bmN0aW9uIE9wY29kZVNlbGVjdCgpIHsKLSAgICBjb25zdCBi
ID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpCisgICAgY29uc3QgYiA9IChuZXcg
QnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkKICAgICAgICAgLkkzMkNv
bnN0KDEpLkkzMkNvbnN0KDIpLkkzMkNvbnN0KDApCiAgICAgICAgIC5TZWxlY3QoKQogICAgICAg
ICAuUmV0dXJuKCkKICAgICAgIC5FbmQoKQogICAgIC5FbmQoKTsKICAgICBjb25zdCBqID0gSlNP
Ti5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNv
ZGUubGVuZ3RoLCA2KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsz
XS5uYW1lLCAic2VsZWN0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNv
ZGUubGVuZ3RoLCA2KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsz
XS5uYW1lLCAic2VsZWN0Iik7CiB9KSgpOwogCiAvLyBGSVhNRSB0ZXN0IHR5cGUgbWlzbWF0Y2gg
d2l0aCBzZWxlY3QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMy
NjcKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNz
ZW1ibHkuanMgYi9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5
LmpzCmluZGV4IGEyNTFjNDMuLmFjNTdkMzcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9zZWxm
LXRlc3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanMKKysrIGIvSlNUZXN0cy93YXNtL3NlbGYt
dGVzdC90ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qcwpAQCAtMzAsMTYgKzMwLDMgQEAgaW1wb3J0
IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAgICAgICAgICAgICAgIFsiMDAwMDAwMDAg
MDAgNjEgNzMgNmQgMGMgMDAgMDAgMDAgMDAgMGYgMGEgNGYgMDAgNDggMDAgNDggIHzCt2FzbcK3
wrfCt8K3wrfCt8K3T8K3SMK3SHwiLAogICAgICAgICAgICAgICAgIjAwMDAwMDEwIDAwIDQxIDAw
IDQ5IDAwIGRlIGFkIGMwIGZlICAgICAgICAgICAgICAgICAgICAgICB8wrdBwrdJwrfCt8K3wrfC
tyAgICAgICB8Il0uam9pbigiXG4iKSk7CiB9KSgpOwotCi0oZnVuY3Rpb24gQmFzaWMoKSB7Ci0g
ICAgY29uc3QgYmluID0gKG5ldyBCdWlsZGVyKCkpCi0gICAgICAgIC5Db2RlKCkKLSAgICAgICAg
ICAgIC5GdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgLk5vcCgpCi0gICAgICAgICAgICAgICAg
Lk5vcCgpCi0gICAgICAgICAgICAuRW5kKCkKLSAgICAgICAgLkVuZCgpCi0gICAgICAgIC5XZWJB
c3NlbWJseSgpOwotICAgIGFzc2VydC5lcShiaW4uaGV4ZHVtcCgpLnRyaW0oKSwKLSAgICAgICAg
ICAgICAgIjAwMDAwMDAwIDAwIDYxIDczIDZkIDBjIDAwIDAwIDAwIDBhIDA2IDAxIDA0IDAwIDBh
IDBhIDBmICB8wrdhc23Ct8K3wrfCt8K3wrfCt8K3wrfCt8K3wrd8Iik7Ci19KSgpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X1dBU00uanMgYi9KU1Rlc3RzL3dhc20v
c2VsZi10ZXN0L3Rlc3RfV0FTTS5qcwppbmRleCAzOWE5NTY5Li45OTc3OTdmIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfV0FTTS5qcworKysgYi9KU1Rlc3RzL3dhc20v
c2VsZi10ZXN0L3Rlc3RfV0FTTS5qcwpAQCAtMSw4ICsxLDggQEAKIGltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnOwogaW1wb3J0ICogYXMgV0FTTSBmcm9tICcuLi9XQVNNLmpz
JzsKIAotYXNzZXJ0Lm5vdFVuZGVmKFdBU00uZGVzY3JpcHRpb24pOwotYXNzZXJ0Lm5vdFVuZGVm
KFdBU00udmFsdWVUeXBlKTsKK2Fzc2VydC5pc05vdFVuZGVmKFdBU00uZGVzY3JpcHRpb24pOwor
YXNzZXJ0LmlzTm90VW5kZWYoV0FTTS52YWx1ZVR5cGUpOwogYXNzZXJ0LmdlKFdBU00udmFsdWVU
eXBlLmxlbmd0aCwgNCk7CiAKIGZvciAoY29uc3QgdiBvZiBXQVNNLnZhbHVlVHlwZSkKQEAgLTE4
LDcgKzE4LDcgQEAgY29uc3QgZXhwZWN0ZWRGaWVsZHMgPSBbCiAgICAgIm9wY29kZSIsCiBdOwog
Zm9yIChjb25zdCBlIG9mIGV4cGVjdGVkRmllbGRzKSB7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKFdB
U00uZGVzY3JpcHRpb25bZV0pOworICAgIGFzc2VydC5pc05vdFVuZGVmKFdBU00uZGVzY3JpcHRp
b25bZV0pOwogICAgIGlmICh0eXBlb2YoV0FTTS5kZXNjcmlwdGlvbltlXSkgIT09ICJvYmplY3Qi
KQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGRlc2NyaXB0aW9uIHRvIGNvbnRh
aW4gZmllbGQgIiR7ZX0iYCk7CiB9CkBAIC0zMiwxMSArMzIsMTEgQEAgY29uc3QgZXhwZWN0ZWRP
cEZpZWxkcyA9IFsKIF07CiBmb3IgKGNvbnN0IG9wIGluIFdBU00uZGVzY3JpcHRpb24ub3Bjb2Rl
KQogICAgIGZvciAoY29uc3QgZSBvZiBleHBlY3RlZE9wRmllbGRzKQotICAgICAgICBhc3NlcnQu
bm90VW5kZWYoV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3BdW2VdKTsKKyAgICAgICAgYXNzZXJ0
LmlzTm90VW5kZWYoV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3BdW2VdKTsKIAogLy8gRklYTUU6
IHRlc3QgZm9yIGZpZWxkICJiM29wIiB3aGVuIGFsbCBhcml0aG1ldGljLyBjb21wYXJpc29uIG9w
cyBoYXZlIHRoZW0uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKIAotYXNzZXJ0Lm5vdFVuZGVmKFdBU00uc2VjdGlvbnMpOwotYXNzZXJ0Lm5vdFVuZGVmKFdB
U00uc2VjdGlvbkVuY29kaW5nVHlwZSk7Cithc3NlcnQuaXNOb3RVbmRlZihXQVNNLnNlY3Rpb25z
KTsKK2Fzc2VydC5pc05vdFVuZGVmKFdBU00uc2VjdGlvbkVuY29kaW5nVHlwZSk7CiBmb3IgKGNv
bnN0IHNlY3Rpb24gb2YgV0FTTS5zZWN0aW9ucykKICAgICBhc3NlcnQuZXEoV0FTTS5zZWN0aW9u
RW5jb2RpbmdUeXBlLCBXQVNNLmRlc2NyaXB0aW9uLnNlY3Rpb25bc2VjdGlvbl0udHlwZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWQ3MGNhNi4uYzEwMjQ1NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTEzNiw2ICsxMTM2LDIzIEBAIGVs
c2UgKCkKICAgICApCiBlbmRpZiAoKQogCisjIFdlYkFzc2VtYmx5IGdlbmVyYXRvcgorCittYWNy
byhHRU5FUkFURV9QWVRIT04gX2dlbmVyYXRvciBfaW5wdXQgX291dHB1dCkKKyAgICBhZGRfY3Vz
dG9tX2NvbW1hbmQoCisgICAgICAgIE9VVFBVVCAke19vdXRwdXR9CisgICAgICAgIE1BSU5fREVQ
RU5ERU5DWSAke19nZW5lcmF0b3J9CisgICAgICAgIERFUEVORFMgJHtfaW5wdXR9CisgICAgICAg
IENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtfZ2VuZXJhdG9yfSAke19pbnB1dH0gJHtf
b3V0cHV0fQorICAgICAgICBWRVJCQVRJTSkKKyAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29y
ZV9IRUFERVJTICR7X291dHB1dH0pCisgICAgQUREX1NPVVJDRV9ERVBFTkRFTkNJRVMoJHtfaW5w
dXR9ICR7X291dHB1dH0pCitlbmRtYWNybygpCitHRU5FUkFURV9QWVRIT04oJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5ICR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS93YXNtL3dhc20uanNvbiAke0RFUklWRURfU09VUkNFU19KQVZBU0NS
SVBUQ09SRV9ESVJ9L1dhc21PcHMuaCkKK0dFTkVSQVRFX1BZVEhPTigke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc21WYWxpZGF0ZUlubGluZXNIZWFkZXIucHkgJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7REVSSVZFRF9TT1VSQ0VT
X0pBVkFTQ1JJUFRDT1JFX0RJUn0vV2FzbVZhbGlkYXRlSW5saW5lcy5oKQorCisjIExVVCBnZW5l
cmF0b3IKKwogc2V0KEhBU0hfTFVUX0dFTkVSQVRPUiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vY3JlYXRlX2hhc2hfdGFibGUpCiBtYWNybyhHRU5FUkFURV9IQVNIX0xVVCBfaW5wdXQgX291
dHB1dCkKICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRl
eCBlMjJmNDZjLi42ZTMxZTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
NyBAQAorMjAxNi0xMS0wMiAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisgICAgICAgIE9uIHRoZSBKU0Mgc2lkZToK
KworICAgICAgICAgLSBQdXQgaW4gcGFyc2VyIHN0dWJzIGZvciBhbGwgV2ViQXNzZW1ibHkgc2Vj
dGlvbnMuCisgICAgICAgICAtIFBhcnNlIEltcG9ydCwgRXhwb3J0IHNlY3Rpb25zLgorICAgICAg
ICAgLSBVc2UgdHJ5UmVzZXJ2ZUNhcGFjaXR5IGluc3RlYWQgb2YgcmVzZXJ2ZSwgYW5kIGJhaWwg
b3V0IG9mIHRoZSBwYXJzZXIgaWYgaXQgZmFpbHMuIFRoaXMgcHJldmVudHMgdGhlIHBhcnNlciBm
cm9tIGJyaW5naW5nIGV2ZXJ5dGhpbmcgZG93biB3aGVuIGZhY2VkIHdpdGggYSBtYWxpY2lvdXMg
aW5wdXQuCisgICAgICAgICAtIEVuY2Fwc3VsYXRlIGFsbCBwYXJzZWQgbW9kdWxlIGluZm9ybWF0
aW9uIGludG8gaXRzIG93biBzdHJ1Y3R1cmUsIG1ha2luZyBpdCBlYXNpZXIgdG8gcGFzcyBhcm91
bmQgKGZyb20gcGFyc2VyIHRvIFBsYW4gdG8gTW9kdWxlIHRvIEluc3RhbmNlKS4KKyAgICAgICAg
IC0gQ3JlYXRlIFdhc21Gb3JtYXQuY3BwIHRvIGhvbGQgcGFyc2VkIG1vZHVsZSBpbmZvcm1hdGlv
bidzIGR0b3IgdG8gYXZvaWQgaW5jbHVkaW5nIFdhc21NZW1vcnkuaCBuZWVkbGVzc2x5LgorICAg
ICAgICAgLSBSZW1vdmUgYWxsIHJlbWFpbmRlcnMgb2YgcG9seWZpbGwtcHJvdG90eXBlLTEsIGFu
ZCB1cGRhdGUgbGljZW5zZS4KKyAgICAgICAgIC0gQWRkIG1pc3NpbmcgV2FzbU9wcy5oIGFuZCBX
YXNtVmFsaWRhdGVJbmxpbmVzLmggYXV0by1nZW5lcmF0aW9uIGZvciBjbWFrZSBidWlsZC4KKwor
ICAgICAgICBPbiB0aGUgQnVpbGRlci5qcyB0ZXN0aW5nIHNpZGU6CisKKyAgICAgICAgIC0gSW1w
bGVtZW50IFR5cGUsIEltcG9ydCAoZnVuY3Rpb24gb25seSksIEV4cG9ydCAoZnVuY3Rpb24gb25s
eSkgc2VjdGlvbnMuCisgICAgICAgICAtIENoZWNrIHNlY3Rpb24gb3JkZXIgYW5kIHVuaXF1ZW5l
c3MuCisgICAgICAgICAtIE9wdGlvbmFsbHkgYXV0by1nZW5lcmF0ZSB0aGUgVHlwZSBzZWN0aW9u
IGZyb20gc3Vic2VxdWVudCBFeHBvcnQgLyBJbXBvcnQgLyBDb2RlIGVudHJpZXMuCisgICAgICAg
ICAtIEFsbG93IHJlLWV4cG9ydGluZyBhbiBpbXBvcnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDogbWlzc2luZyBhdXRvLWdlbnJhdGlvbgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IG1lcmdlIGNvbmZsaWN0CisgICAgICAgICogdGVzdFdh
c20uY3BwOiB1cGRhdGUgZm9yIEFQSSBjaGFuZ2VzLCBubyBmdW5jdGlvbmFsIGNoYW5nZQorICAg
ICAgICAoY2hlY2tQbGFuKToKKyAgICAgICAgKHJ1bldhc21UZXN0cyk6CisgICAgICAgICogd2Fz
bS9XYXNtRm9ybWF0LmNwcDogYWRkIGEgZHRvciB3aGljaCByZXF1aXJlcyBleHRyYSBoZWFkZXJz
IHdoaWNoIEknZCByYXRoZXIgbm90IGluY2x1ZGUgaW4gV2FzbUZvcm1hdC5oCisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24pOgorICAgICAg
ICAqIHdhc20vV2FzbUZvcm1hdC5oOiBBZGQgRXh0ZXJuYWwsIEltcG9ydCwgRnVuY3Rpb25pbmZv
cm1hdGlvbiwgRXhwb3J0LCBNb2R1bGVJbmZvcm1hdGlvbiwgQ29tcGlsZWRGdW5jdGlvbiwgYW5k
IHJlbW92ZSBvYnNvbGV0ZSBzdHVmZiB3aGljaCB3YXMgYSBob2xkb3ZlciBmcm9tIHRoZSBmaXJz
dCBpbXBsZW1lbnRhdGlvbiAoYWxsIHRoYXQgY29kZSBpcyBub3cgZ29uZSwgc28gcmVtb3ZlIGl0
cyBsaWNlbnNlKQorICAgICAgICAoSlNDOjpXYXNtOjpFeHRlcm5hbDo6aXNWYWxpZCk6CisgICAg
ICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDogc2ltcGxpZnkgc29tZSwgbWFrZSBuYW1l
cyBjb25zaXN0ZW50IHdpdGggdGhlIFdlYkFzc2VtYmx5IHNlY3Rpb24gbmFtZXMsIGNoZWNrIG1l
bW9yeSBhbGxvY2F0aW9ucyBzbyB0aGV5IGNhbiBmYWlsIGVhcmx5CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJz
ZXI6OnBhcnNlVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VJ
bXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlVGFibGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJz
ZXI6OnBhcnNlU3RhcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNl
RWxlbWVudCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKTog
YXZvaWQgb3ZlcmZsb3cgdGhyb3VnaCBmdW5jdGlvbiBzaXplLgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmg6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6bW9kdWxlSW5mb3JtYXRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQ
YXJzZXI6OmNvbnN1bWVVVEY4U3RyaW5nKTogYWRkIGFzIHJlcXVpcmVkIGJ5IHNwZWMKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZUV4dGVybmFsS2luZCk6IGFkZCBhcyBwZXIgc3Bl
YworICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
OjpQbGFuKTogZml4IHNvbWUgb3duZXJzaGlwLCBpbXByb3ZlIHNvbWUgZXJyb3IgbWVzc2FnZXMK
KyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6IGZpeCBzb21lIG93bmVyc2hpcAorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpnZXRNb2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgIChKU0M6Oldh
c206OlBsYW46OmdldE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVk
RnVuY3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVkRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpnZXRDb21waWxlZEZ1bmN0aW9ucyk6Cisg
ICAgICAgICogd2FzbS9XYXNtU2VjdGlvbnMuaDogbWFjcm9pemUgd2l0aCBkZXNjcmlwdGlvbiwg
c28gdGhhdCBlcnJvciBtZXNzYWdlcyBhcmUgc3VwZXIgcHJldHR5LiBUaGlzIGNvdWxkIGJlIGF1
dG8tZ2VuZXJhdGVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHA6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSk6IHRha2UgbW9kdWxl
IGluZm9ybWF0aW9uCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNz
ZW1ibHlNb2R1bGUpOiBkaXR0bworICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJbmZvcm1hdGlv
bik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UpOiBjaGVjayB0
aGF0IG1vZHVsZXMgd2l0aCBpbXBvcnRzIGFyZSBpbnN0YW50aWF0ZWQgd2l0aCBhbiBpbXBvcnQg
b2JqZWN0LCBhcyBwZXIgc3BlYy4gVGhpcyBuZWVkcyB0byBiZSB0ZXN0ZWQuCisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3Nl
bWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJB
c3NlbWJseU1vZHVsZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFibGUpOgor
CiAyMDE2LTExLTAzICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA4MzY0LgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAwMTZlNGY5Li45MjYwZTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTI4OCw3ICsxMjg4LDYgQEAKIAkJNTNGRDA0RDQxRDdBQjI5MTAwMzI4N0Qz
IC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5n
Q29udmVudGlvbi5oICovOyB9OwogCQk1M0ZGN0Y5OTFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZh
bGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggKi87IH07CiAJCTUzRkY3
RjlCMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8q
IFdhc21WYWxpZGF0ZS5jcHAgKi87IH07Ci0JCTUzRkY3RjlEMURDMDBEQjEwMEEyNkNDQyAvKiBX
YXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRkY3RjlDMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCAqLzsgfTsKIAkJ
NUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGRDgxREI2OUU1QzAwRUMy
M0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovOyB9OwogCQk1QjcwQ0ZERjFEQjY5RTY2MDBFQzIz
RjkgLyogSlNBc3luY0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uY3BwICovOyB9OwogCQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlv
blByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUI3MENGREExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAq
LzsgfTsKQEAgLTE5ODMsNiArMTk4Miw3IEBACiAJCUFEMkZDQzJEMURCODM4RkQwMEIzRTczNiAv
KiBXZWJBc3NlbWJseVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJv
dG90eXBlLmggKi87IH07CiAJCUFEMkZDQzMwMURCODNENDkwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
MkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5LmNwcCAqLzsgfTsKIAkJQUQy
RkNDMzExREI4M0Q0OTAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzJGMURCODM5RjcwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5LmggKi87IH07CisJCUFEMkZDQzMzMURDNDA0NTQwMEIzRTczNiAvKiBX
YXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFEMkZDQzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLzsgfTsKIAkJ
QUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNEMUFBNEQ4N0MwMDJG
RTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJv
b3RTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFE
REIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQURFMzlGRkYxNkREMTQ0QjAwMDND
RDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUu
Y3BwICovOyB9OwpAQCAtMzY0OCw3ICszNjQ4LDYgQEAKIAkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4
N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVmFsaWRhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1M0ZGN0Y5QzFEQzAwREIxMDBBMjZDQ0Mg
LyogV2FzbUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDgxREI2
OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUI3MENGRDkxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5
bmNGdW5jdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
c3luY0Z1bmN0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
NDI1LDYgKzQ0MjQsNyBAQAogCQlBRDJGQ0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1i
bHlQcm90b3R5cGUuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMkZDQzJFMURCODM5RjcwMEIzRTczNiAvKiBKU1dlYkFz
c2VtYmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViQXNz
ZW1ibHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0MyRjFEQjgzOUY3
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1dlYkFzc2VtYmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFEMkZD
QzMyMURDNDA0NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Gb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBRDg2QTkzRDFBQTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrR0NNYXBJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFx
dWVSb290U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZVJvb3RT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU5Rjg5MzcxODkxQUQzMzAwRDVD
Q0RDIC8qIFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTk0MSw3ICs1OTQxLDcgQEAKIAkJCQk1M0Y0MEU5MjFENUE0QUIzMDA5
OUExQjYgLyogV2FzbUIzSVJHZW5lcmF0b3IuaCAqLywKIAkJCQk1M0ZEMDREMTFEN0FCMTg3MDAz
Mjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLywKIAkJCQk1M0ZEMDREMjFEN0FC
MTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8sCi0JCQkJNTNGRjdGOUMx
REMwMERCMTAwQTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwICovLAorCQkJCUFEMkZDQzMyMURDNDA0
NTMwMEIzRTczNiAvKiBXYXNtRm9ybWF0LmNwcCAqLywKIAkJCQk3QkM1NDdEMjFCNjk1OTlCMDA5
NTlCNTggLyogV2FzbUZvcm1hdC5oICovLAogCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAv
KiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0Ig
LyogV2FzbU1lbW9yeS5jcHAgKi8sCkBAIC05ODQ5LDYgKzk4NDksNyBAQAogCQkJCTBGMEE3NTIy
MUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUFEMkZDQzMzMURDNDA0NTQwMEIzRTczNiAvKiBXYXNtRm9y
bWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJ
bml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhC
RDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0
QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKaW5kZXggNmUzZjVkMi4uOTlmODA4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20uY3BwCkBAIC0yNzYsMTMgKzI3NiwxMyBAQCBzdGF0
aWMgdm9pZCBjaGVja1BsYW4oUGxhbiYgcGxhbiwgdW5zaWduZWQgZXhwZWN0ZWROdW1iZXJPZkZ1
bmN0aW9ucykKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBpZiAocGxhbi5yZXN1bHRT
aXplKCkgIT0gZXhwZWN0ZWROdW1iZXJPZkZ1bmN0aW9ucykgeworICAgIGlmIChwbGFuLmNvbXBp
bGVkRnVuY3Rpb25Db3VudCgpICE9IGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpIHsKICAgICAg
ICAgZGF0YUxvZ0xuKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGZ1bmN0aW9ucyIpOwogICAgICAgICBD
UkFTSCgpOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHBlY3RlZE51
bWJlck9mRnVuY3Rpb25zOyArK2kpIHsKLSAgICAgICAgaWYgKCFwbGFuLnJlc3VsdChpKSkgewor
ICAgICAgICBpZiAoIXBsYW4uY29tcGlsZWRGdW5jdGlvbihpKSkgewogICAgICAgICAgICAgZGF0
YUxvZ0xuKCJGdW5jdGlvbiBhdCBpbmRleCwgIiAsIGksICIgZmFpbGVkIHRvIGNvbXBpbGUgY29y
cmVjdGx5Iik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CkBAIC0zMjAsOCArMzIw
LDggQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4s
IDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVD
Syhpc0lkZW50aWNhbChpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3hmKDApLCBib3hmKDMyKSB9KSwgMSkpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDEpLCBib3hm
KDMyKSB9KSwgMikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwKSwgYm94ZigzMikg
fSksIDEpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMSksIGJveGYoMzIpIH0pLCAy
KSk7CiAgICAgfQogCiAgICAgewpAQCAtMzQ3LDggKzM0Nyw4IEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwKSwgYm94ZigzMikgfSks
IDEpKTsKLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxKSwgYm94ZigzMikgfSksIDIpKTsKKyAgICAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveGYoMCksIGJveGYoMzIpIH0pLCAxKSk7CisgICAgICAgIENIRUNL
KGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3hmKDEpLCBib3hmKDMyKSB9KSwgMikpOwogICAgIH0KIAogICAgIHsKQEAg
LTM4NSwxNCArMzg1LDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDEp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEpIH0pLCAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0p
LCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEp
IH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAogICAgIHsKQEAgLTQx
NSwxMCArNDE1LDEwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNr
UGxhbihwbGFuLCAyKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSktPmpz
RW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgLTEuNWYpKTsKLSAgICAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQ
b2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgODcuNjIzNGYpKTsKLSAgICAg
ICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgLTEuNWYpKTsKLSAgICAgICAgQ0hF
Q0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgODcuNjIzNGYpKTsKKyAgICAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEp
LT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7CisgICAg
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42
MjM0ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9
KSwgLTEuNWYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJv
eGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7CiAgICAgfQogCiAgICAgewpAQCAtNDQxLDEwICs0NDEs
MTAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4s
IDIpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVD
Syhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50
LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAxLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRl
bnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94
ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDExMi42MjM0ZikpOwotICAgICAgICBDSEVDSyhp
c0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAxLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRp
Y2FsKGludm9rZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94Zigx
MDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDExMi42MjM0ZikpOworICAgICAgICBDSEVDSyhpc0lk
ZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQ
b2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOworICAgICAgICBDSEVDSyhp
c0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50
cnlQb2ludCwgeyBib3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYyMzRmKSk7Cisg
ICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAxLjVmKSk7
CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0p
LCAxMTIuNjIzNGYpKTsKICAgICB9CiAKICAgICB7CkBAIC00NzIsMTEgKzQ3MiwxMSBAQCBzdGF0
aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7CiAKICAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApIH0pLCAxMjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxMik7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgp
LCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJveCgxMikgfSksIDc4KTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCks
IGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEwMCkgfSksIDE2Nik7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2lu
dCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEyMDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJv
eCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94
KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTIpIH0pLCA3OCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJv
eCg4KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKICAgICB9
CiAKICAgICB7CkBAIC01MDMsMTAgKzUwMywxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgyKSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg0KSB9KSwgMjQpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMikgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDQpIH0pLCAyNCk7CiAgICAg
fQogCiAgICAgewpAQCAtNTI2LDE4ICs1MjYsMTggQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgfTsKIAogICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwotICAgICAg
ICBpZiAocGxhbi5yZXN1bHRTaXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1bHQoMCkgfHwgIXBsYW4u
cmVzdWx0KDEpKSB7CisgICAgICAgIGlmIChwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpICE9
IDIgfHwgIXBsYW4uY29tcGlsZWRGdW5jdGlvbigwKSB8fCAhcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDEpKSB7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBj
b3JyZWN0bHkuIik7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCksIGJveCgwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTUpIH0p
LCAxNik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAyMDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMSkgfSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMCkgfSksIDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSwgYm94KDE1KSB9KSwgMTYpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAyMDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
IH0pLCAyKTsKICAgICB9CiAKICAgICB7CkBAIC01NjAsMTIgKzU2MCwxMiBAQCBzdGF0aWMgdm9p
ZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7CiAKICAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSks
IDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMSkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAgLTU4OSw5ICs1ODksOSBAQCBzdGF0aWMg
dm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAg
ICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwg
MCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEw
MCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgxMDApIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBAIC02MTYsOSArNjE2LDkgQEAg
c3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwog
CiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgx
MCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNjUxLDEzICs2
NTEsMTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAgICBQbGFuIHBsYW4o
KnZtLCB2ZWN0b3IpOwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0gICAgICAgIEFTU0VS
VChwbGFuLm1lbW9yeSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxhbi5nZXRNZW1vcnko
KS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc2l6ZW9m
KHVpbnQzMl90KTsKLSAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQz
Ml90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3go
bGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQz
Ml90Kj4ocGxhbi5nZXRNZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBpbnZva2U8dm9pZD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
b2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMy
X3QpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAg
Q0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAgLTY2Niw3ICs2NjYsNyBA
QCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAg
ICAgICBvZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJv
eChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0p
OwogICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNl
dCArIGxlbmd0aF0sIDB1KTsKQEAgLTcwMywxMyArNzAzLDEzIEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsKICAgICAgICAgY2hl
Y2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsK
KyAgICAgICAgQVNTRVJUKHBsYW4uZ2V0TWVtb3J5KCktPnNpemUoKSk7CiAKICAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgIGlu
dm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50OF90KiBtZW1vcnkgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5nZXRNZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBp
bnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIENIRUNLX0VRKG1l
bW9yeVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsg
bGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCkBAIC03MTcsNyArNzE3LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAg
ICAgICBsZW5ndGggPSAxMDsKICAgICAgICAgb2Zmc2V0ID0gNTsKLSAgICAgICAgaW52b2tlPHZv
aWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCks
IGJveChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgp
IH0pOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC03NDQsMTIgKzc0NCwxMiBAQCBzdGF0
aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7
CiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5
KCktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgpLT5zaXplKCkpOwog
CiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgx
MCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEwKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpAQCAtNzc0LDkgKzc3
NCw5IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFu
LCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
IH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSks
IDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwogICAgIH0KIAogICAgIHsKQEAg
LTgwMSwxMCArODAxLDEwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwg
MTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgtMTIpLCBib3go
cGxhbi5tZW1vcnkoKS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSksIC0xMik7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSks
IDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0xMiksIGJveChwbGFuLmdldE1lbW9yeSgpLT5zaXpl
KCkgLSBzaXplb2YodWludDY0X3QpKSB9KSwgLTEyKTsKICAgICB9CiAKICAgICB7CkBAIC04Mjks
OSArODI5LDkgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFu
KHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94
KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpA
QCAtODY0LDEzICs4NjQsMTMgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAgICAg
ICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOwogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0g
ICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeSgpLT5zaXplKCkpOworICAgICAgICBBU1NFUlQocGxh
bi5nZXRNZW1vcnkoKS0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKICAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4ocGxhbi5tZW1vcnkoKS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZv
a2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChv
ZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgdWludDMyX3QqIG1lbW9yeSA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4ocGxhbi5nZXRNZW1vcnkoKS0+bWVtb3J5KCkpOworICAgICAgICBp
bnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBz
aXplb2YodWludDMyX3QpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1
KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAgLTg3
OSw3ICs4NzksNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIGxlbmd0
aCA9IDEwOwogICAgICAgICBvZmZzZXQgPSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAg
aW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94
KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJv
eChsZW5ndGgpIH0pOwogICAgICAgICBvZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAg
ICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEo
bWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAgLTkxNiwxMyArOTE2LDEzIEBAIHN0YXRp
YyB2b2lkIHJ1bldhc21UZXN0cygpCiAKICAgICAgICAgUGxhbiBwbGFuKCp2bSwgdmVjdG9yKTsK
ICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBBU1NFUlQocGxhbi5tZW1vcnko
KS0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKHBsYW4uZ2V0TWVtb3J5KCktPnNpemUoKSk7CiAK
ICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCiAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7Ci0gICAgICAgIHVpbnQ4X3Qq
IG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7
Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICB1aW50OF90KiBt
ZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5nZXRNZW1vcnkoKS0+bWVtb3J5KCkp
OworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1v
cnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCkBAIC05MzAsNyArOTMwLDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRl
c3RzKCkKIAogICAgICAgICBsZW5ndGggPSAxMDsKICAgICAgICAgb2Zmc2V0ID0gNTsKLSAgICAg
ICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwg
Ym94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCks
IGJveChsZW5ndGgpIH0pOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEw
MHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC05NTcsMTIgKzk1
NywxMiBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIFBsYW4gcGxhbigq
dm0sIHZlY3Rvcik7CiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJU
KHBsYW4ubWVtb3J5KCktPnNpemUoKSk7CisgICAgICAgIEFTU0VSVChwbGFuLmdldE1lbW9yeSgp
LT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94
KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpA
QCAtOTg3LDkgKzk4Nyw5IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwogICAgIH0K
IAogICAgIHsKQEAgLTEwMTQsMTQgKzEwMTQsMTQgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3Rz
KCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDApIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
MDApLCBib3goNikgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSksIDEpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDIpLCBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSks
IDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikg
fSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMSk7CiAgICAgfQog
CiAgICAgewpAQCAtMTA1MiwxNCArMTA1MiwxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMo
KQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBi
b3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSks
IGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEw
MCksIGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9
KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKICAgICB9CiAK
IApAQCAtMTA3Niw3ICsxMDc2LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAg
ICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyB9KSwgNSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyB9KSwgNSk7CiAgICAgfQogCiAKQEAg
LTEwOTQsNyArMTA5NCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgfSksIDExKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAgICAgewpA
QCAtMTExMSw3ICsxMTExLDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAg
Y2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNo
LgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyB9KSwgMTEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKICAgICB9CiAKICAgICB7
CkBAIC0xMTI4LDcgKzExMjgsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAg
ICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jh
c2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRy
eVBvaW50LCB7IH0pLCAxMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwogICAgIH0KIAogICAg
IHsKQEAgLTExNDQsMTAgKzExNDQsMTAgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAg
ICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MSkgfSksIDEwMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgtMSksIGJveCgxKX0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWluKCkpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9KSwgMTAxKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgtMSksIGJveCgxKX0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveChzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKSwgYm94KDEpIH0pLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTcwLDggKzExNzAsOCBAQCBzdGF0aWMgdm9p
ZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMCkgfSksIDEwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMTApIH0pLCAxMCk7CiAgICAgfQogCiAgICAgewpAQCAtMTIwMywxMCArMTIwMywx
MCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwg
MSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9
KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAzKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCkgfSksIDUwNTApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMil9KSwgMyk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMTAwKSB9KSwgNTA1MCk7CiAgICAgfQogCiAgICAgewpAQCAtMTI0NCwx
NCArMTI0NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1Bs
YW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IGJveCgwKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwg
eyBib3goMiksIGJveCgxKSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAyKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDIpLCBib3goMikgfSksIDQpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMTIpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCA2MDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDEwMCkg
fSksIDEwMDAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAwKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwg
Ym94KDEpIH0pLCAyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAyKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCA0KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgy
KSwgYm94KDYpIH0pLCAxMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCA2
MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxMDApIH0pLCAxMDAwMCk7CiAgICAg
fQogCiAgICAgewpAQCAtMTI5NCwxNCArMTI5NCwxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVz
dHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlz
IGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
LCBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDEwMCksIGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwg
MSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9
KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2
KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKICAgICB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKaW5kZXggMmJk
YzgwMC4uYmY4ZTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5j
cHAKQEAgLTI0LDEwICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lu
Y2x1ZGUgIldhc21Gb3JtYXQuaCIKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAog
Y29uc3QgY2hhciogdG9TdHJpbmcoVHlwZSB0eXBlKQpAQCAtNDYsNiArNDksOCBAQCBjb25zdCBj
aGFyKiB0b1N0cmluZyhUeXBlIHR5cGUpCiAgICAgfQogfQogCitNb2R1bGVJbmZvcm1hdGlvbjo6
fk1vZHVsZUluZm9ybWF0aW9uKCkgeyB9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
LSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCA4Mjg2YWVmLi40OTk2
NDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yMSwyMyAr
MjEsNiBAQAogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNSBieSB0aGUgcmVwb3Np
dG9yeSBhdXRob3JzIG9mCi0gKiBXZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUtMS4KLSAq
Ci0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAq
LwogCiAjcHJhZ21hIG9uY2UKQEAgLTk4LDM3ICs4MSw4MyBAQCBpbmxpbmUgYm9vbCBpc1ZhbHVl
VHlwZShUeXBlIHR5cGUpCiB9CiAKIGNvbnN0IGNoYXIqIHRvU3RyaW5nKFR5cGUpOworICAgIAor
c3RydWN0IEV4dGVybmFsIHsKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgRnVu
Y3Rpb24gPSAwLAorICAgICAgICBUYWJsZSA9IDEsCisgICAgICAgIE1lbW9yeSA9IDIsCisgICAg
ICAgIEdsb2JhbCA9IDMsCisgICAgfTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnQ+CisgICAg
c3RhdGljIGJvb2wgaXNWYWxpZChJbnQgdmFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh2YWwp
IHsKKyAgICAgICAgY2FzZSBGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBUYWJsZToKKyAgICAgICAg
Y2FzZSBNZW1vcnk6CisgICAgICAgIGNhc2UgR2xvYmFsOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgc3RhdGljX2Fzc2VydChGdW5jdGlvbiA9PSAwLCAiV2FzbSBu
ZWVkcyBGdW5jdGlvbiB0byBoYXZlIHRoZSB2YWx1ZSAwIik7CisgICAgc3RhdGljX2Fzc2VydChU
YWJsZSAgICA9PSAxLCAiV2FzbSBuZWVkcyBUYWJsZSB0byBoYXZlIHRoZSB2YWx1ZSAxIik7Cisg
ICAgc3RhdGljX2Fzc2VydChNZW1vcnkgICA9PSAyLCAiV2FzbSBuZWVkcyBNZW1vcnkgdG8gaGF2
ZSB0aGUgdmFsdWUgMiIpOworICAgIHN0YXRpY19hc3NlcnQoR2xvYmFsICAgPT0gMywgIldhc20g
bmVlZHMgR2xvYmFsIHRvIGhhdmUgdGhlIHZhbHVlIDMiKTsKK307CiAKIHN0cnVjdCBTaWduYXR1
cmUgewogICAgIFR5cGUgcmV0dXJuVHlwZTsKICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRzOwog
fTsKLQotc3RydWN0IEZ1bmN0aW9uSW1wb3J0IHsKLSAgICBTdHJpbmcgZnVuY3Rpb25OYW1lOwor
ICAgIAorc3RydWN0IEltcG9ydCB7CisgICAgU3RyaW5nIG1vZHVsZTsKKyAgICBTdHJpbmcgZmll
bGQ7CisgICAgRXh0ZXJuYWw6OktpbmQga2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIFNpZ25h
dHVyZSogZnVuY3Rpb25TaWduYXR1cmU7CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJs
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CisgICAgICAg
IC8vIEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NDEzNAorICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgR2xvYmFsIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKKyAgICB9OwogfTsKIAot
c3RydWN0IEZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIHsKLSAgICB1aW50MzJfdCBzaWduYXR1cmVJ
bmRleDsKLSAgICB1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4Oworc3RydWN0IEZ1bmN0aW9u
SW5mb3JtYXRpb24geworICAgIFNpZ25hdHVyZSogc2lnbmF0dXJlOworICAgIHNpemVfdCBzdGFy
dDsKKyAgICBzaXplX3QgZW5kOwogfTsKIAotc3RydWN0IEZ1bmN0aW9uRGVjbGFyYXRpb24gewot
ICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworY2xhc3MgTWVtb3J5OworCitzdHJ1Y3QgRXhw
b3J0IHsKKyAgICBTdHJpbmcgZmllbGQ7CisgICAgRXh0ZXJuYWw6OktpbmQga2luZDsKKyAgICB1
bmlvbiB7CisgICAgICAgIFNpZ25hdHVyZSogZnVuY3Rpb25TaWduYXR1cmU7CisgICAgICAgIC8v
IEZJWE1FIGltcGxlbWVudCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTM1CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAorICAgICAgICAvLyBGSVhNRSBp
bXBsZW1lbnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQxMzMKKyAgICB9OwogfTsKIAotc3RydWN0IEZ1bmN0aW9uUG9pbnRlclRhYmxlIHsKLSAgICB1
aW50MzJfdCBzaWduYXR1cmVJbmRleDsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmN0aW9uSW5k
aWNlczsKLSAgICBWZWN0b3I8SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKLX07CitzdHJ1Y3QgTW9k
dWxlSW5mb3JtYXRpb24geworICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXM7CisgICAg
VmVjdG9yPEltcG9ydD4gaW1wb3J0czsKKyAgICBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4g
ZnVuY3Rpb25zOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1lbW9yeTsKKyAgICBWZWN0
b3I8RXhwb3J0PiBleHBvcnRzOwogCi1zdHJ1Y3QgRnVuY3Rpb25JbmZvcm1hdGlvbiB7Ci0gICAg
U2lnbmF0dXJlKiBzaWduYXR1cmU7Ci0gICAgc2l6ZV90IHN0YXJ0OwotICAgIHNpemVfdCBlbmQ7
CisgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwogCitzdHJ1Y3QgRnVuY3Rpb25Db21waWxh
dGlvbjsKK3R5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9u
Pj4gQ29tcGlsZWRGdW5jdGlvbnM7CisKIHN0cnVjdCBVbmxpbmtlZENhbGwgewogICAgIENvZGVM
b2NhdGlvbkNhbGwgY2FsbExvY2F0aW9uOwogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAppbmRleCA1
NWMyMTJlLi5kZjI5OGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAj
aW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5oIgogCkBAIC00MCw2
ICs0MSw4IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlKCkKIHsKKyAgICBtX21vZHVsZSA9IHN0ZDo6bWFrZV91bmlxdWU8TW9k
dWxlSW5mb3JtYXRpb24+KCk7CisKICAgICBjb25zdCBzaXplX3QgbWluU2l6ZSA9IDg7CiAgICAg
aWYgKGxlbmd0aCgpIDwgbWluU2l6ZSkgewogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJNb2R1
bGUgaXMgIiArIFN0cmluZzo6bnVtYmVyKGxlbmd0aCgpKSArICIgYnl0ZXMsIGV4cGVjdGVkIGF0
IGxlYXN0ICIgKyBTdHJpbmc6Om51bWJlcihtaW5TaXplKSArICIgYnl0ZXMiOwpAQCAtMTExLDU0
ICsxMTQsMjAgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgYXV0byBlbmQg
PSBtX29mZnNldCArIHNlY3Rpb25MZW5ndGg7CiAKICAgICAgICAgc3dpdGNoIChzZWN0aW9uKSB7
Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6TWVtb3J5OiB7Ci0gICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgTWVtb3J5LiIpOwotICAg
ICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUg
aW1wcm92ZSBlcnJvciBtZXNzYWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjM5MTkKLSAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBw
YXJzZSBtZW1vcnkiOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9u
czo6RnVuY3Rpb25UeXBlczogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIHR5cGVzLiIpOwotICAgICAgICAgICAgaWYgKCFwYXJz
ZUZ1bmN0aW9uVHlwZXMoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJy
b3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5
Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgdHlwZXMi
OwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTZWN0aW9uczo6U2lnbmF0dXJl
czogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJQYXJzaW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMuIik7Ci0gICAgICAgICAgICBpZiAoIXBhcnNl
RnVuY3Rpb25TaWduYXR1cmVzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3Zl
IGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzkxOQotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIGZ1
bmN0aW9uIHNpZ25hdHVyZXMiOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBT
ZWN0aW9uczo6RGVmaW5pdGlvbnM6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBkZWZpbml0aW9ucy4iKTsKLSAg
ICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gImNvdWxkbid0IHBhcnNlIGZ1bmN0aW9uIGRlZmluaXRpb25zIjsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgU2VjdGlvbnM6OlVua25vd246Ci0gICAgICAgIC8vIEZJWE1F
OiBEZWxldGUgdGhpcyB3aGVuIHdlIHN1cHBvcnQgYWxsIHRoZSBzZWN0aW9ucy4KLSAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAvLyBGSVhNRSBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgaW4gbWFj
cm8gYmVsb3cgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzkxOQor
I2RlZmluZSBXQVNNX1NFQ1RJT05fUEFSU0UoTkFNRSwgSUQsIERFU0NSSVBUSU9OKSBcCisgICAg
ICAgIGNhc2UgU2VjdGlvbnM6Ok5BTUU6IHsgXAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIFwK
KyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNpbmcgIiBERVNDUklQVElPTik7IFwKKyAg
ICAgICAgICAgIGlmICghcGFyc2UgIyMgTkFNRSgpKSB7IFwKKyAgICAgICAgICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uICIgI05BTUUgIjogIiBERVNDUklQ
VElPTjsgXAorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgXAorICAgICAgICAgICAgfSBc
CisgICAgICAgIH0gYnJlYWs7CisgICAgICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NF
Q1RJT05fUEFSU0UpCisjdW5kZWYgV0FTTV9TRUNUSU9OX1BBUlNFCisKKyAgICAgICAgY2FzZSBT
ZWN0aW9uczo6VW5rbm93bjogewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJVbmtub3duIHNlY3Rpb24sIHNraXBwaW5nLiIpOwogICAgICAgICAg
ICAgLy8gSWdub3JlIHNlY3Rpb24ncyBuYW1lIExFQiBhbmQgYnl0ZXM6IHRoZXkncmUgYWxyZWFk
eSBpbmNsdWRlZCBpbiBzZWN0aW9uTGVuZ3RoLgpAQCAtMTg0LDc5ICsxNTMsNTMgQEAgYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlTWVtb3J5KCkKLXsKLSAgICB1aW50OF90IGZsYWdzOwotICAgIGlmICghcGFy
c2VWYXJVSW50MShmbGFncykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVpbnQzMl90
IHNpemU7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihzaXplKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChzaXplID4gbWF4UGFnZUNvdW50KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB1aW50MzJfdCBjYXBhY2l0eSA9IG1heFBhZ2VDb3VudDsKLSAgICBpZiAoZmxhZ3Mp
IHsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjYXBhY2l0eSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkgfHwgY2FwYWNpdHkgPiBt
YXhQYWdlQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fw
YWNpdHkgKj0gcGFnZVNpemU7Ci0gICAgc2l6ZSAqPSBwYWdlU2l6ZTsKLQotICAgIFZlY3Rvcjx1
bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKLSAgICBtX21lbW9yeSA9IHN0ZDo6bWFrZV91
bmlxdWU8TWVtb3J5PihzaXplLCBjYXBhY2l0eSwgcGlubmVkU2l6ZXMpOwotICAgIHJldHVybiBt
X21lbW9yeS0+bWVtb3J5KCk7Ci19Ci0KLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
VHlwZXMoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVHlwZSgpCiB7CiAgICAgdWludDMyX3Qg
Y291bnQ7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nTG4oImNvdW50OiAiLCBj
b3VudCk7Ci0KLSAgICBtX3NpZ25hdHVyZXMucmVzaXplKGNvdW50KTsKLQorICAgIGlmICghbV9t
b2R1bGUtPnNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIHVpbnQ4X3QgdHlwZTsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KHR5cGUp
KQorICAgICAgICBpbnQ4X3QgdHlwZTsKKyAgICAgICAgaWYgKCFwYXJzZUludDcodHlwZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlICE9IDB4NDApIC8vIEZ1
bmN0aW9uIHR5cGUgY29uc3RhbnQuCisgICAgICAgIGlmICh0eXBlICE9IC0weDIwKSAvLyBGdW5j
dGlvbiB0eXBlIGNvbnN0YW50LgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAg
IAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiR290IGZ1bmN0
aW9uIHR5cGUuIik7Ci0KKyAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7
CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJhcmd1bWVudENvdW50OiAiLCBhcmd1bWVudENvdW50KTsKLQorICAg
ICAgICAKICAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGFyZ3Vt
ZW50VHlwZXMucmVzaXplKGFyZ3VtZW50Q291bnQpOworICAgICAgICBpZiAoIWFyZ3VtZW50VHlw
ZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VVSW50Nyh0eXBlKSB8fCAhaXNWYWx1ZVR5
cGUoc3RhdGljX2Nhc3Q8VHlwZT4odHlwZSkpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICE9IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICAgICAgdWludDhfdCBhcmd1bWVu
dFR5cGU7CisgICAgICAgICAgICBpZiAoIXBhcnNlVUludDcoYXJndW1lbnRUeXBlKSB8fCAhaXNW
YWx1ZVR5cGUoc3RhdGljX2Nhc3Q8VHlwZT4oYXJndW1lbnRUeXBlKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRpY19j
YXN0PFR5cGU+KHR5cGUpOworICAgICAgICAgICAgYXJndW1lbnRUeXBlcy51bmNoZWNrZWRBcHBl
bmQoc3RhdGljX2Nhc3Q8VHlwZT4oYXJndW1lbnRUeXBlKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDEodHlwZSkpCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291bnQ7
CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MShyZXR1cm5Db3VudCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIFR5cGUgcmV0dXJuVHlwZTsKLQorICAgICAgICAKICAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nTG4odHlwZSk7Ci0KLSAgICAgICAg
aWYgKHR5cGUpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbihyZXR1cm5Db3VudCk7CisgICAgICAg
IAorICAgICAgICBpZiAocmV0dXJuQ291bnQpIHsKICAgICAgICAgICAgIFR5cGUgdmFsdWU7CiAg
ICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKHZhbHVlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yNjQsNDggKzIwNywxOTUgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb25UeXBlcygpCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFR5cGU6OlZvaWQ7CiAKLSAgICAgICAgbV9zaWduYXR1cmVzW2ldID0geyByZXR1cm5UeXBl
LCBXVEZNb3ZlKGFyZ3VtZW50VHlwZXMpIH07CisgICAgICAgIG1fbW9kdWxlLT5zaWduYXR1cmVz
LnVuY2hlY2tlZEFwcGVuZCh7IHJldHVyblR5cGUsIFdURk1vdmUoYXJndW1lbnRUeXBlcykgfSk7
CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvblNpZ25hdHVyZXMoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkKIHsK
LSAgICB1aW50MzJfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKKyAg
ICB1aW50MzJfdCBpbXBvcnRDb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMyKGltcG9ydENv
dW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9tb2R1bGUtPmltcG9ydHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgbV9mdW5jdGlvbnMucmVzaXplKGNvdW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGltcG9y
dE51bWJlciA9IDA7IGltcG9ydE51bWJlciAhPSBpbXBvcnRDb3VudDsgKytpbXBvcnROdW1iZXIp
IHsKKyAgICAgICAgSW1wb3J0IGk7CisgICAgICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKKyAgICAg
ICAgdWludDMyX3QgZmllbGRMZW47CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobW9kdWxl
TGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjb25zdW1lVVRG
OFN0cmluZyhpLm1vZHVsZSwgbW9kdWxlTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihmaWVsZExlbikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghY29uc3VtZVVURjhTdHJpbmcoaS5maWVsZCwgZmllbGRM
ZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXBhcnNlRXh0ZXJu
YWxLaW5kKGkua2luZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3aXRj
aCAoaS5raW5kKSB7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6OkZ1bmN0aW9uOiB7CisgICAgICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvblNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+IG1f
bW9kdWxlLT5zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpLmZ1bmN0aW9uU2lnbmF0dXJlID0gJm1fbW9kdWxlLT5zaWduYXR1cmVz
W2Z1bmN0aW9uU2lnbmF0dXJlSW5kZXhdOworICAgICAgICB9IGJyZWFrOworICAgICAgICBjYXNl
IEV4dGVybmFsOjpUYWJsZToKKyAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOgorICAgICAgICAgICAgLy8gRklYTUUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgICAgICAgICAg
Ly8gSW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFsIHZhcmlhYmxlcyBjYW4gYmUgaW1w
b3J0ZWQuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgbV9tb2R1bGUtPmltcG9ydHMudW5j
aGVja2VkQXBwZW5kKGkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb24oKQoreworICAgIHVpbnQzMl90IGNvdW50Owor
ICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFtX21vZHVsZS0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpICE9
IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKICAgICAgICAgaWYg
KCFwYXJzZVZhclVJbnQzMih0eXBlTnVtYmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAodHlwZU51bWJlciA+PSBtX3NpZ25hdHVyZXMuc2l6ZSgpKQorICAgICAg
ICAKKyAgICAgICAgaWYgKHR5cGVOdW1iZXIgPj0gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fZnVuY3Rpb25zW2ldLnNp
Z25hdHVyZSA9ICZtX3NpZ25hdHVyZXNbdHlwZU51bWJlcl07CisgICAgICAgIG1fbW9kdWxlLT5m
dW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHsgJm1fbW9kdWxlLT5zaWduYXR1cmVzW3R5cGVOdW1i
ZXJdLCAwLCAwIH0pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQoreworICAgIHVp
bnQ4X3QgZmxhZ3M7CisgICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICBpZiAoIXBhcnNlVmFyVUludDMy
KHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNpemUgPiBtYXhQYWdlQ291
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4
UGFnZUNvdW50OworICAgIGlmIChmbGFncykgeworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNpemUg
PiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKKyAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKKyAgICBzaXplICo9
IHBhZ2VTaXplOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9IHsgMCB9Owor
ICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lbW9yeT4oc2l6ZSwgY2Fw
YWNpdHksIHBpbm5lZFNpemVzKTsKKyAgICByZXR1cm4gbV9tb2R1bGUtPm1lbW9yeS0+bWVtb3J5
KCk7Cit9CisgICAgCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKQoreworICAgIC8v
IEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgp
Cit7CisgICAgdWludDMyX3QgZXhwb3J0Q291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihl
eHBvcnRDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fbW9kdWxlLT5l
eHBvcnRzLnRyeVJlc2VydmVDYXBhY2l0eShleHBvcnRDb3VudCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4cG9ydE51
bWJlciAhPSBleHBvcnRDb3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgRXhwb3J0IGU7
CisgICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGZpZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjb25z
dW1lVVRGOFN0cmluZyhlLmZpZWxkLCBmaWVsZExlbikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtpbmQoZS5raW5kKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChlLmtpbmQpIHsKKyAgICAgICAgY2FzZSBF
eHRlcm5hbDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2lnbmF0
dXJlSW5kZXg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0
dXJlSW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChmdW5jdGlvblNpZ25hdHVyZUluZGV4ID4gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGUuZnVuY3Rpb25TaWdu
YXR1cmUgPSAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF07Cisg
ICAgICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOgorICAgICAgICAg
ICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
NQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1lbW9yeToKKyAg
ICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQxMzQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4dGVybmFsOjpHbG9i
YWw6CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0MTMzCisgICAgICAgICAgICAvLyBJbiB0aGUgTVZQLCBvbmx5IGltbXV0YWJs
ZSBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSBleHBvcnRlZC4KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX21vZHVsZS0+ZXhwb3J0cy51bmNoZWNrZWRB
cHBlbmQoZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBN
b2R1bGVQYXJzZXI6OnBhcnNlU3RhcnQoKQoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIHRy
dWU7Cit9CisgICAgCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkKK3sKKyAgICAv
LyBGSVhNRQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbkRlZmluaXRpb25zKCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKQogewog
ICAgIHVpbnQzMl90IGNvdW50OwogICAgIGlmICghcGFyc2VWYXJVSW50MzIoY291bnQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY291bnQgIT0gbV9mdW5jdGlvbnMuc2l6ZSgp
KQorICAgIGlmIChjb3VudCAhPSBtX21vZHVsZS0+ZnVuY3Rpb25zLnNpemUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpICE9IGNvdW50OyArK2kpIHsKICAgICAgICAg
dWludDMyX3QgZnVuY3Rpb25TaXplOwogICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0
aW9uU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmdW5jdGlv
blNpemUgPiBsZW5ndGgoKSB8fCBmdW5jdGlvblNpemUgPiBsZW5ndGgoKSAtIG1fb2Zmc2V0KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEZ1bmN0aW9uSW5mb3JtYXRpb24m
IGluZm8gPSBtX2Z1bmN0aW9uc1tpXTsKKyAgICAgICAgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5m
byA9IG1fbW9kdWxlLT5mdW5jdGlvbnNbaV07CiAgICAgICAgIGluZm8uc3RhcnQgPSBtX29mZnNl
dDsKICAgICAgICAgaW5mby5lbmQgPSBtX29mZnNldCArIGZ1bmN0aW9uU2l6ZTsKICAgICAgICAg
bV9vZmZzZXQgPSBpbmZvLmVuZDsKQEAgLTMxMyw2ICs0MDMsMTIgQEAgYm9vbCBNb2R1bGVQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyAg
ICAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKQoreworICAgIC8vIEZJWE1FCisgICAg
cmV0dXJuIHRydWU7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCAzODI5M2FjLi44
OTliZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldh
c21PcHMuaCIKICNpbmNsdWRlICJXYXNtUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpAQCAtNTYsMjcgKzU2LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNz
YWdlOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVu
Y3Rpb25JbmZvcm1hdGlvbigpIGNvbnN0CisgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9y
bWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24oKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25zOwotICAgIH0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiYgbWVtb3J5KCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX21lbW9yeTsKKyAgICAgICAgcmV0
dXJuIG1fbW9kdWxlOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZU1lbW9yeSgpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVu
Y3Rpb25UeXBlcygpOwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25T
aWduYXR1cmVzKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRl
ZmluaXRpb25zKCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRl
ZmluaXRpb24odWludDMyX3QgbnVtYmVyKTsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVf
UEFSU0VSKE5BTUUsIElELCBERVNDUklQVElPTikgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2UgIyMgTkFNRSgpOworICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVD
TEFSRV9QQVJTRVIpCisjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKLSAgICBW
ZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4gbV9mdW5jdGlvbnM7Ci0gICAgVmVjdG9yPFNpZ25h
dHVyZT4gbV9zaWduYXR1cmVzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1fbWVtb3J5
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAgICAg
Ym9vbCBtX2ZhaWxlZCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCmluZGV4IDQ2YTdiMzkuLjRjZjYz
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKQEAgLTMzLDYgKzMz
LDggQEAKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAj
aW5jbHVkZSA8d3RmL0xFQkRlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKQEAgLTQyLDE0ICs0NCwxNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBjb25zdW1lQ2hhcmFjdGVyKGNoYXIpOwogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciopOworICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGNvbnN1bWVVVEY4U3RyaW5nKFN0cmluZyAmLCBzaXplX3QpOwogCiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1bHQp
OworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSW50NyhpbnQ4X3QmIHJlc3VsdCk7
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50Nyh1aW50OF90JiByZXN1bHQp
OwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDMyKHVpbnQzMl90JiByZXN1
bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDMyKHVpbnQzMl90
JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDMyKG1fc291cmNl
LCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7IH0KICAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVZhclVJbnQ2NCh1aW50NjRfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6
OkxFQkRlY29kZXI6OmRlY29kZVVJbnQ2NChtX3NvdXJjZSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zm
c2V0LCByZXN1bHQpOyB9CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhbHVl
VHlwZShUeXBlJiByZXN1bHQpOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRXh0
ZXJuYWxLaW5kKEV4dGVybmFsOjpLaW5kJiByZXN1bHQpOwogCiAgICAgY29uc3QgdWludDhfdCog
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KQEAgLTkyLDYgKzk3LDIxIEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVTdHJpbmcoY29uc3QgY2hhciogc3RyKQogICAg
IHJldHVybiB0cnVlOwogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpjb25zdW1lVVRG
OFN0cmluZyhTdHJpbmcgJnJlc3VsdCwgc2l6ZV90IHN0cmluZ0xlbmd0aCkKK3sKKyAgICBpZiAo
c3RyaW5nTGVuZ3RoID09IDApIHsKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAobGVuZ3RoKCkgPCBzdHJpbmdMZW5ndGggfHwg
bV9vZmZzZXQgPiBsZW5ndGgoKSAtIHN0cmluZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJlc3VsdCA9IFN0cmluZzo6ZnJvbVVURjgoc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIq
Pigmc291cmNlKClbbV9vZmZzZXRdKSwgc3RyaW5nTGVuZ3RoKTsKKyAgICBtX29mZnNldCArPSBz
dHJpbmdMZW5ndGg7CisgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6
cGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCkKIHsKICAgICBpZiAobGVuZ3RoKCkgPCA0IHx8
IG1fb2Zmc2V0ID4gbGVuZ3RoKCkgLSA0KQpAQCAtMTAxLDYgKzEyMSwxNSBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogICAgIHJldHVy
biB0cnVlOwogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZUludDcoaW50OF90
JiByZXN1bHQpCit7CisgICAgaWYgKG1fb2Zmc2V0ID49IGxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgdWludDhfdCB2ID0gc291cmNlKClbbV9vZmZzZXQrK107CisgICAgcmVz
dWx0ID0gKHYgJiAweDQwKSA/IFdURjo6Yml0d2lzZV9jYXN0PGludDhfdD4odWludDhfdCh2IHwg
MHg4MCkpIDogdjsKKyAgICByZXR1cm4gKHYgJiAweDgwKSA9PSAwOworfQorCiBBTFdBWVNfSU5M
SU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJlc3VsdCkKIHsKICAgICBpZiAo
bV9vZmZzZXQgPj0gbGVuZ3RoKCkpCkBAIC0xMjgsNiArMTU3LDE3IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI6OnBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCkKICAgICByZXN1bHQgPSBz
dGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CisgICAgCitBTFdB
WVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZUV4dGVybmFsS2luZChFeHRlcm5hbDo6S2luZCYg
cmVzdWx0KQoreworICAgIHVpbnQ4X3QgdmFsdWU7CisgICAgaWYgKCFwYXJzZVVJbnQ3KHZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghRXh0ZXJuYWw6OmlzVmFsaWQodmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8RXh0
ZXJuYWw6OktpbmQ+KHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCmlu
ZGV4IDczOWJlNDIuLjJlMDI4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAKQEAgLTMxLDkgKzMxLDExIEBACiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2lu
Y2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJz
ZXIuaCIKICNpbmNsdWRlICJXYXNtVmFsaWRhdGUuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNDgsNDAgKzUwLDUwIEBAIFBsYW46OlBsYW4oVk0mIHZt
LCBjb25zdCB1aW50OF90KiBzb3VyY2UsIHNpemVfdCBzb3VyY2VMZW5ndGgpCiB7CiAgICAgaWYg
KHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiU3RhcnRpbmcgcGxhbi4iKTsKLSAgICBNb2R1
bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSwgc291cmNlTGVuZ3RoKTsKLSAgICBpZiAoIW1v
ZHVsZVBhcnNlci5wYXJzZSgpKSB7Ci0gICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBtb2R1bGUg
ZmFpbGVkOiAiLCBtb2R1bGVQYXJzZXIuZXJyb3JNZXNzYWdlKCkpOwotICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9IG1vZHVsZVBhcnNlci5lcnJvck1lc3NhZ2UoKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIHsKKyAgICAgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihzb3VyY2UsIHNvdXJjZUxl
bmd0aCk7CisgICAgICAgIGlmICghbW9kdWxlUGFyc2VyLnBhcnNlKCkpIHsKKyAgICAgICAgICAg
IGRhdGFMb2dMbigiUGFyc2luZyBtb2R1bGUgZmFpbGVkOiAiLCBtb2R1bGVQYXJzZXIuZXJyb3JN
ZXNzYWdlKCkpOworICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtb2R1bGVQYXJzZXIuZXJy
b3JNZXNzYWdlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9t
b2R1bGVJbmZvcm1hdGlvbiA9IFdURk1vdmUobW9kdWxlUGFyc2VyLm1vZHVsZUluZm9ybWF0aW9u
KCkpOwogICAgIH0KLQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nTG4oIlBhcnNl
ZCBtb2R1bGUuIik7CiAKLSAgICBmb3IgKGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8g
OiBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1hdGlvbigpKSB7CisgICAgaWYgKCFtX2NvbXBp
bGVkRnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5j
dGlvbnMuc2l6ZSgpKSkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRmFpbGVkIGFsbG9jYXRpbmcgZW5vdWdoIHNwYWNlIGZv
ciAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobV9tb2R1bGVJbmZvcm1hdGlvbi0+
ZnVuY3Rpb25zLnNpemUoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbXBp
bGVkIGZ1bmN0aW9ucyIpOworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoY29uc3QgRnVuY3Rpb25J
bmZvcm1hdGlvbiYgaW5mbyA6IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucykgewogICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBmdW5j
aW9uIHN0YXJ0aW5nIGF0OiAiLCBpbmZvLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8u
ZW5kKTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jdGlvbiBzdGFydGlu
ZyBhdDogIiwgaW5mby5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBpbmZvLmVuZCk7CiAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQgPSBzb3VyY2UgKyBpbmZvLnN0YXJ0Owog
ICAgICAgICBzaXplX3QgZnVuY3Rpb25MZW5ndGggPSBpbmZvLmVuZCAtIGluZm8uc3RhcnQ7CiAg
ICAgICAgIEFTU0VSVChmdW5jdGlvbkxlbmd0aCA8PSBzb3VyY2VMZW5ndGgpOwogCi0gICAgICAg
IFN0cmluZyBlcnJvciA9IHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIGluZm8uc2lnbmF0dXJlLCBtb2R1bGVQYXJzZXIuZnVuY3Rpb25JbmZvcm1hdGlvbigp
KTsKKyAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0
LCBmdW5jdGlvbkxlbmd0aCwgaW5mby5zaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9ucyk7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gZXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBtX3Jlc3VsdC5hcHBlbmQocGFyc2VBbmRDb21waWxlKHZtLCBmdW5jdGlvblN0YXJ0
LCBmdW5jdGlvbkxlbmd0aCwgbW9kdWxlUGFyc2VyLm1lbW9yeSgpLmdldCgpLCBpbmZvLnNpZ25h
dHVyZSwgbW9kdWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkpOworICAgICAgICBtX2Nv
bXBpbGVkRnVuY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChwYXJzZUFuZENvbXBpbGUodm0sIGZ1bmN0
aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkuZ2V0
KCksIGluZm8uc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMpKTsKICAg
ICB9CiAKICAgICAvLyBQYXRjaCB0aGUgY2FsbCBzaXRlcyBmb3IgZWFjaCBmdW5jdGlvbi4KLSAg
ICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIg
OiBtX3Jlc3VsdCkgeworICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRp
b24+JiBmdW5jdGlvblB0ciA6IG1fY29tcGlsZWRGdW5jdGlvbnMpIHsKICAgICAgICAgRnVuY3Rp
b25Db21waWxhdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblB0ci5nZXQoKTsKICAgICAgICAgZm9y
IChhdXRvJiBjYWxsIDogZnVuY3Rpb24tPnVubGlua2VkQ2FsbHMpCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKG1fcmVzdWx0W2NhbGwuZnVuY3Rpb25JbmRleF0tPmNvZGUtPmNvZGUoKSkpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChtX2NvbXBpbGVkRnVuY3Rpb25zW2NhbGwuZnVuY3Rpb25JbmRleF0tPmNv
ZGUtPmNvZGUoKSkpOwogICAgIH0KIAotICAgIG1fbWVtb3J5ID0gV1RGTW92ZShtb2R1bGVQYXJz
ZXIubWVtb3J5KCkpOwogICAgIG1fZmFpbGVkID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5oCmluZGV4IGI4NGY5ZDcuLmE3YzgwNGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uaApAQCAtMzgsOCArMzgsNiBAQCBjbGFzcyBNZW1vcnk7CiAK
IGNsYXNzIFBsYW4gewogcHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvbXBpbGF0aW9uPj4gQ29tcGlsZWRGdW5jdGlvbnM7Ci0KICAgICBKU19FWFBP
UlRfUFJJVkFURSBQbGFuKFZNJiwgVmVjdG9yPHVpbnQ4X3Q+KTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBQbGFuKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgflBsYW4oKTsKQEAgLTUwLDM2ICs0OCwzNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGZhaWxlZCgpKTsKICAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwogICAg
IH0KLSAgICBzaXplX3QgcmVzdWx0U2l6ZSgpIGNvbnN0CisgICAgCisgICAgc3RkOjp1bmlxdWVf
cHRyPE1vZHVsZUluZm9ybWF0aW9uPiYgZ2V0TW9kdWxlSW5mb3JtYXRpb24oKQogICAgIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0
LnNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb247CiAgICAgfQotICAg
IGNvbnN0IEZ1bmN0aW9uQ29tcGlsYXRpb24qIHJlc3VsdChzaXplX3QgbikgY29uc3QKKyAgICBj
b25zdCBNZW1vcnkqIGdldE1lbW9yeSgpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9yZXN1bHQuYXQobikuZ2V0KCk7Cisg
ICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkuZ2V0KCk7CiAgICAgfQot
ICAgIGNvbnN0IE1lbW9yeSogbWVtb3J5KCkgY29uc3QKKyAgICBzaXplX3QgY29tcGlsZWRGdW5j
dGlvbkNvdW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQo
KSk7Ci0gICAgICAgIHJldHVybiBtX21lbW9yeS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fY29t
cGlsZWRGdW5jdGlvbnMuc2l6ZSgpOwogICAgIH0KLSAgICAKLSAgICBDb21waWxlZEZ1bmN0aW9u
cyogZ2V0RnVuY3Rpb25zKCkKKyAgICBjb25zdCBGdW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxl
ZEZ1bmN0aW9uKHNpemVfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuICZtX3Jlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1f
Y29tcGlsZWRGdW5jdGlvbnMuYXQoaSkuZ2V0KCk7CiAgICAgfQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxNZW1vcnk+KiBnZXRNZW1vcnkoKQorICAgIENvbXBpbGVkRnVuY3Rpb25zJiBnZXRDb21waWxl
ZEZ1bmN0aW9ucygpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwot
ICAgICAgICByZXR1cm4gJm1fbWVtb3J5OworICAgICAgICByZXR1cm4gbV9jb21waWxlZEZ1bmN0
aW9uczsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29tcGlsZWRGdW5jdGlvbnMgbV9yZXN1bHQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbV9tZW1vcnk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOworICAgIENvbXBpbGVk
RnVuY3Rpb25zIG1fY29tcGlsZWRGdW5jdGlvbnM7CisKICAgICBib29sIG1fZmFpbGVkIHsgdHJ1
ZSB9OwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TZWN0aW9ucy5oCmluZGV4IDcyNTc4NjcuLjk5NjA1MjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oCkBAIC0yOSwxMiArMjksMjQgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAorI2RlZmluZSBGT1JfRUFDSF9XQVNN
X1NFQ1RJT04obWFjcm8pIFwKKyAgICBtYWNybyhUeXBlLCAgICAgMSwgIkZ1bmN0aW9uIHNpZ25h
dHVyZSBkZWNsYXJhdGlvbnMiKSBcCisgICAgbWFjcm8oSW1wb3J0LCAgIDIsICJJbXBvcnQgZGVj
bGFyYXRpb25zIikgXAorICAgIG1hY3JvKEZ1bmN0aW9uLCAzLCAiRnVuY3Rpb24gZGVjbGFyYXRp
b25zIikgXAorICAgIG1hY3JvKFRhYmxlLCAgICA0LCAiSW5kaXJlY3QgZnVuY3Rpb24gdGFibGUg
YW5kIG90aGVyIHRhYmxlcyIpIFwKKyAgICBtYWNybyhNZW1vcnksICAgNSwgIk1lbW9yeSBhdHRy
aWJ1dGVzIikgXAorICAgIG1hY3JvKEdsb2JhbCwgICA2LCAiR2xvYmFsIGRlY2xhcmF0aW9ucyIp
IFwKKyAgICBtYWNybyhFeHBvcnQsICAgNywgIkV4cG9ydHMiKSBcCisgICAgbWFjcm8oU3RhcnQs
ICAgIDgsICJTdGFydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiIpIFwKKyAgICBtYWNybyhFbGVtZW50
LCAgOSwgIkVsZW1lbnRzIHNlY3Rpb24iKSBcCisgICAgbWFjcm8oQ29kZSwgICAgMTAsICJGdW5j
dGlvbiBib2RpZXMgKGNvZGUpIikgXAorICAgIG1hY3JvKERhdGEsICAgIDExLCAiRGF0YSBzZWdt
ZW50cyIpCisKIHN0cnVjdCBTZWN0aW9ucyB7CiAgICAgZW51bSBTZWN0aW9uIDogdWludDhfdCB7
Ci0gICAgICAgIEZ1bmN0aW9uVHlwZXMgPSAxLAotICAgICAgICBTaWduYXR1cmVzID0gMywKLSAg
ICAgICAgTWVtb3J5ID0gNSwKLSAgICAgICAgRGVmaW5pdGlvbnMgPSAxMCwKKyNkZWZpbmUgREVG
SU5FX1dBU01fU0VDVElPTl9FTlVNKE5BTUUsIElELCBERVNDUklQVElPTikgTkFNRSA9IElELAor
ICAgICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT04oREVGSU5FX1dBU01fU0VDVElPTl9FTlVNKQor
I3VuZGVmIERFRklORV9XQVNNX1NFQ1RJT05fRU5VTQogICAgICAgICBVbmtub3duCiAgICAgfTsK
ICAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZU9yZGVyKFNlY3Rpb24gcHJldmlvdXMsIFNlY3Rpb24g
bmV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHAKaW5kZXggNjVjY2E5NS4uZDZiYTM4MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTM1
LDkgKzM1LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiogY29tcGls
ZWRGdW5jdGlvbnMsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+KiBtZW1vcnkpCitKU1dl
YkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9u
PiYgbW9kdWxlSW5mb3JtYXRpb24sIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1
bmN0aW9ucykKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZt
LCBzdHJ1Y3R1cmUsIGNvbXBpbGVkRnVuY3Rpb25zLCBtZW1vcnkpOworICAgIGF1dG8qIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRp
b24sIGNvbXBpbGVkRnVuY3Rpb25zKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTQ3LDEwICs0NywxMCBAQCBTdHJ1Y3R1cmUq
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1
bmN0aW9uQ29tcGlsYXRpb24+PiogY29tcGlsZWRGdW5jdGlvbnMsIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNZW1vcnk+KiBtZW1vcnkpCitKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5
TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uLCBXYXNtOjpDb21waWxlZEZ1
bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1vdmUoKmNvbXBpbGVkRnVuY3Rpb25zKSkKLSAg
ICAsIG1fbWVtb3J5KFdURk1vdmUoKm1lbW9yeSkpCisgICAgLCBtX21vZHVsZUluZm9ybWF0aW9u
KFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pKQorICAgICwgbV9jb21waWxlZEZ1bmN0aW9ucyhX
VEZNb3ZlKGNvbXBpbGVkRnVuY3Rpb25zKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IGE0MzhhNjEuLjlk
YTIxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmgKQEAgLTI5LDMyICsyOSwzMiBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVj
dGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSBXYXNtIHsKLXN0cnVjdCBGdW5j
dGlvbkNvbXBpbGF0aW9uOwotY2xhc3MgTWVtb3J5OwotfQotCiBjbGFzcyBKU1dlYkFzc2VtYmx5
TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4qLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5
PiopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiwgV2FzbTo6Q29t
cGlsZWRGdW5jdGlvbnMmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCisg
ICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24qIG1vZHVsZUluZm9ybWF0aW9uKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOworICAg
IH0KKwogcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUq
LCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiosIHN0
ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+Kik7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShW
TSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4m
LCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQogcHJpdmF0ZToKLSAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiBtX2NvbXBpbGVk
RnVuY3Rpb25zOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZv
cm1hdGlvbjsKKyAgICBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyBtX2NvbXBpbGVkRnVuY3Rpb25z
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cAppbmRleCBhOWZmMTFkLi5jOGFlYTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5j
cHAKQEAgLTY0LDggKzY0LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogc3QKICAgICBpZiAoIWlt
cG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5
cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1i
bHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRTb3Vy
Y2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAKLSAg
ICAvLyBGSVhNRSB1c2UgdGhlIGltcG9ydE9iamVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDAzOQogICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBv
cnRzIGlzIG5vdCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEg
VHlwZUVycm9yIGlzIHRocm93bi4KKyAgICBpZiAobW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
LT5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0
YXRlLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5j
ZSBtdXN0IGJlIE9iamVjdCBiZWNhdXNlIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgaGFzIGltcG9y
dHMiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFy
Z3VtZW50KSkpKTsKIAogICAgIC8vIEZJWE1FIFN0cmluZyB0aGluZ3MgZnJvbSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDIzCiAgICAgLy8gTGV0IGV4cG9ydHMg
YmUgYSBsaXN0IG9mIChzdHJpbmcsIEpTIHZhbHVlKSBwYWlycyB0aGF0IGlzIG1hcHBlZCBmcm9t
IGVhY2ggZXh0ZXJuYWwgdmFsdWUgZSBpbiBpbnN0YW5jZS5leHBvcnRzIGFzIGZvbGxvd3M6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IDFjNTgyYjQuLmNmY2FjNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRl
KiBzdGF0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJh
bCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSBNZW1vcnkgY29uc3RydWN0
b3IgcHJvcGVydHkiKSkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRleCAw
YjA1NWEwLi5iYjY4NGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtNzMsMTMg
KzczLDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0CiAgICAgaWYgKHBsYW4uZmFpbGVkKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNj
b3BlLCBjcmVhdGVXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihzdGF0ZSwgcGxhbi5lcnJvck1lc3Nh
Z2UoKSkpKTsKIAotICAgIC8vIFRoZSBzcGVjIHN0cmluZyB2YWx1ZXMgaW5zaWRlIEFzdC5tb2R1
bGUgYXJlIGRlY29kZWQgYXMgVVRGOCBhcyBkZXNjcmliZWQgaW4gV2ViLm1kLiBGSVhNRSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDIzCi0KICAgICAvLyBPbiBz
dWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGgg
W1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxlLgogICAgIGF1dG8qIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRl
LCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGFzSW50ZXJuYWxGdW5jdGlvbihzdGF0ZS0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCBwbGFuLmdldEZ1bmN0aW9ucygpLCBwbGFuLmdldE1lbW9yeSgpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwg
cGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFuLmdldENvbXBpbGVkRnVuY3Rpb25zKCkp
KTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNz
ZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCmlu
ZGV4IGNhYTdlOWUuLmM5NTgwYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcApAQCAtNDcs
NiArNDcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5VGFibGUoRXhlY1N0YXRlKiBzdGF0ZQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAv
LyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM1CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGlt
cGxlbWVudCB0aGUgVGFibGUgY29uc3RydWN0b3IgcHJvcGVydHkiKSkpKTsKIH0KIAotLSAKMi45
LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293931</attachid>
            <date>2016-11-04 14:40:17 -0700</date>
            <delta_ts>2016-11-04 15:15:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-JS-API-implement-more-sections.patch</filename>
            <type>text/plain</type>
            <size>152514</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyZTNmNjllMTVjN2NmYTJmMTdmNGEzMDg5OTU1MDQ1MTliM2E4YWY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUaHUsIDI3IE9jdCAyMDE2IDE0OjM0OjA0IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgSlMgQVBJOiBpbXBsZW1lbnQgbW9yZSBzZWN0aW9ucwoKT24gdGhlIEpTQyBzaWRlOgoK
IC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdlYkFzc2VtYmx5IHNlY3Rpb25zLgogLSBQ
YXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0aW9ucy4KIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBp
bnN0ZWFkIG9mIHJlc2VydmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxz
LiBUaGlzIHByZXZlbnRzIHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24g
d2hlbiBmYWNlZCB3aXRoIGEgbWFsaWNpb3VzIGlucHV0LgogLSBFbmNhcHN1bGF0ZSBhbGwgcGFy
c2VkIG1vZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQg
ZWFzaWVyIHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJ
bnN0YW5jZSkuCiAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1bGUg
aW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVlZGxl
c3NseS4KIC0gUmVtb3ZlIGFsbCByZW1haW5kZXJzIG9mIHBvbHlmaWxsLXByb3RvdHlwZS0xLCBh
bmQgdXBkYXRlIGxpY2Vuc2UuCiAtIEFkZCBtaXNzaW5nIFdhc21PcHMuaCBhbmQgV2FzbVZhbGlk
YXRlSW5saW5lcy5oIGF1dG8tZ2VuZXJhdGlvbiBmb3IgY21ha2UgYnVpbGQuCgpPbiB0aGUgQnVp
bGRlci5qcyB0ZXN0aW5nIHNpZGU6CgogLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlv
biBvbmx5KSwgRXhwb3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KIC0gQ2hlY2sgc2VjdGlv
biBvcmRlciBhbmQgdW5pcXVlbmVzcy4KIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRoZSBU
eXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50cmll
cy4KIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NyArKysKIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzAzICsrKysrKysrKyst
LS0KIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzICAgICAgICAgIHwg
MTA3ICsrKysrCiBKU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMgICAgICAgICAgICAgICAg
ICAgICB8ICAxMiArCiBKU1Rlc3RzL3dhc20vV0FTTS5qcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgOSArCiBKU1Rlc3RzL3dhc20vYXNzZXJ0LmpzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICA4NyArKystCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpz
ICAgICAgICAgICAgICAgICB8ICAxMCArCiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNf
YXBpLmpzICAgICAgICAgICAgICB8ICAgOCArLQogSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0
X0J1aWxkZXJKU09OLmpzICAgICAgICAgfCA0OTAgKysrKysrKysrKysrKysrLS0tLS0tCiBKU1Rl
c3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzICB8ICAxMyAtCiBK
U1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfV0FTTS5qcyAgICAgICAgICAgICAgICB8ICAxMiAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgfCAg
MTcgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
fCAgNzQgKysrKwogLi4uL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
ICAgICAgfCAgIDcgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgICAgICAg
ICAgICAgICAgIHwgMjQ2ICsrKysrLS0tLS0tCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmNwcCAgICAgICAgICB8ICAgNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oICAgICAgICAgICAgfCAgOTcgKystLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgICAgfCAyOTggKysrKysrKystLS0tLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oICAgICAgfCAgMjMgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCAgICAgICAgICAgIHwgIDQw
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgICAgICAgICAgICB8
ICAzOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCAgICAgICAgICAg
ICAgfCAgMjkgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9ucy5oICAg
ICAgICAgIHwgIDIwICstCiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcCB8ICAxMCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5oICAgfCAgMjAgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHAgICAgIHwgICAzICstCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgMSArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcCAgICAgICB8ICAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1i
bHlUYWJsZUNvbnN0cnVjdG9yLmNwcCAgICAgICAgfCAgIDEgKwogMjkgZmlsZXMgY2hhbmdlZCwg
MTQ3NyBpbnNlcnRpb25zKCspLCA1NjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
SlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZmMTgxMmYuLmI1NzZm
ZmEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNjAgQEAKKzIwMTYtMTEtMDIgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IG1vcmUgc2Vj
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDAyMworCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICBPbiB0
aGUgSlNDIHNpZGU6CisKKyAgICAgICAgIC0gUHV0IGluIHBhcnNlciBzdHVicyBmb3IgYWxsIFdl
YkFzc2VtYmx5IHNlY3Rpb25zLgorICAgICAgICAgLSBQYXJzZSBJbXBvcnQsIEV4cG9ydCBzZWN0
aW9ucy4KKyAgICAgICAgIC0gVXNlIHRyeVJlc2VydmVDYXBhY2l0eSBpbnN0ZWFkIG9mIHJlc2Vy
dmUsIGFuZCBiYWlsIG91dCBvZiB0aGUgcGFyc2VyIGlmIGl0IGZhaWxzLiBUaGlzIHByZXZlbnRz
IHRoZSBwYXJzZXIgZnJvbSBicmluZ2luZyBldmVyeXRoaW5nIGRvd24gd2hlbiBmYWNlZCB3aXRo
IGEgbWFsaWNpb3VzIGlucHV0LgorICAgICAgICAgLSBFbmNhcHN1bGF0ZSBhbGwgcGFyc2VkIG1v
ZHVsZSBpbmZvcm1hdGlvbiBpbnRvIGl0cyBvd24gc3RydWN0dXJlLCBtYWtpbmcgaXQgZWFzaWVy
IHRvIHBhc3MgYXJvdW5kIChmcm9tIHBhcnNlciB0byBQbGFuIHRvIE1vZHVsZSB0byBJbnN0YW5j
ZSkuCisgICAgICAgICAtIENyZWF0ZSBXYXNtRm9ybWF0LmNwcCB0byBob2xkIHBhcnNlZCBtb2R1
bGUgaW5mb3JtYXRpb24ncyBkdG9yIHRvIGF2b2lkIGluY2x1ZGluZyBXYXNtTWVtb3J5LmggbmVl
ZGxlc3NseS4KKyAgICAgICAgIC0gcGFyc2VDb2RlOiBhdm9pZCBvdmVyZmxvdyB0aHJvdWdoIGZ1
bmN0aW9uIHNpemUuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVycyBvZiBwb2x5Zmls
bC1wcm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAgLSBBZGQgbWlzc2lu
ZyBXYXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdlbmVyYXRpb24gZm9y
IGNtYWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRlc3Rpbmcgc2lkZToK
KworICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlvbiBvbmx5KSwgRXhw
b3J0IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hlY2sgc2VjdGlvbiBv
cmRlciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRl
IHRoZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUg
ZW50cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KKworICAg
ICAgICAqIHdhc20vQnVpbGRlci5qczogYnVpbGQgdHlwZSwgaW1wb3J0LCBhbmQgZXhwb3J0IHNl
Y3Rpb25zCisgICAgICAgIChjb25zdC5fbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUpOgorICAg
ICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qczogQWRkZWQuIEZvcmtlZCBm
cm9tIEJ1aWxkZXIuanMKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlR5cGUpOgorICAgICAgICAo
Y29uc3QuZW1pdHRlcnMuSW1wb3J0KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkZ1bmN0aW9u
KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlRhYmxlKToKKyAgICAgICAgKGNvbnN0LmVtaXR0
ZXJzLk1lbW9yeSk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5HbG9iYWwpOgorICAgICAgICAo
Y29uc3QuZW1pdHRlcnMuRXhwb3J0KToKKyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLlN0YXJ0KToK
KyAgICAgICAgKGNvbnN0LmVtaXR0ZXJzLkVsZW1lbnQpOgorICAgICAgICAoY29uc3QuZW1pdHRl
cnMuQ29kZSk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5EYXRhKToKKyAgICAgICAgKGV4cG9y
dC5jb25zdC5CaW5hcnkpOgorICAgICAgICAqIHdhc20vTG93TGV2ZWxCaW5hcnkuanM6IEFkZCBh
IGZldyB1c2VmdWwgb3V0cHV0cworICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTG93TGV2ZWxCaW5h
cnkucHJvdG90eXBlLnZhcnVpbnQxKToKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0Lkxvd0xldmVs
QmluYXJ5LnByb3RvdHlwZS52YXJpbnQ3KToKKyAgICAgICAgKiB3YXNtL1dBU00uanM6IHZhbHVl
IHR5cGUgYW5kIGV4dGVybmFsIGtpbmQgaGVscGVycworICAgICAgICAqIHdhc20vYXNzZXJ0Lmpz
OiBhcnJheSBlbGVtZW50LXdpc2UgZXF1YWxpdHkgY29tcGFyaXNvbgorICAgICAgICAoY29uc3Qu
X2VxKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qczoKKyAgICAgICAgKE1v
ZHVsZVdpdGhJbXBvcnRzKToKKyAgICAgICAgKiB3YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJK
U09OLmpzOiBtYW55IG1vcmUgdGVzdHMgZm9yIGFsbCB0aGUgbmV3IEJ1aWxkZXIgQVBJcywgYW5k
IHVwZGF0ZSB0byBzb21lIG9sZGVyIHRlc3RzIHdoaWNoIG5vdyByZXF1aXJlIGEgVHlwZSBzZWN0
aW9uIG9yIHJlamlnZ2VyZWQgRnVuY3Rpb24gc2lnbmF0dXJlCisgICAgICAgIChjb25zdC5hc3Nl
cnRPcFRocm93cyk6CisgICAgICAgIChTZWN0aW9uc1dpdGhTYW1lQ3VzdG9tTmFtZSk6CisgICAg
ICAgIChUd29UeXBlU2VjdGlvbnMpOgorICAgICAgICAoRW1wdHlJbXBvcnRTZWN0aW9uKToKKyAg
ICAgICAgKEltcG9ydEJlZm9yZVR5cGVTZWN0aW9ucyk6CisgICAgICAgICogd2FzbS9zZWxmLXRl
c3QvdGVzdF9CdWlsZGVyV2ViQXNzZW1ibHkuanM6IHJlbW92ZSBhIHRlc3Qgd2hpY2ggd2Fzbid0
IGhlbHBmdWwgYW5kIGlzIG5vdyBvYnNvbGV0ZQorICAgICAgICAoQ3VzdG9tU2VjdGlvbik6CisK
IDIwMTYtMTEtMDMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIENs
b25lZEFyZ3VtZW50cyBuZWVkIHRvIGFsc28gc3VwcG9ydCBoYXZlQUJhZFRpbWUgbW9kZS4KZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIu
anMKaW5kZXggMDU2ZDcyZC4uZDFlNDc2OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMKKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMKQEAgLTIzLDcgKzIzLDggQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotaW1wb3J0IExvd0xldmVsQmluYXJ5IGZyb20gJ0xvd0xldmVs
QmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQuanMnOworaW1wb3J0
ICogYXMgQnVpbGRXZWJBc3NlbWJseSBmcm9tICdCdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5Lmpz
JzsKIGltcG9ydCAqIGFzIFdBU00gZnJvbSAnV0FTTS5qcyc7CiAKIGNvbnN0IF90b0phdmFTY3Jp
cHROYW1lID0gbmFtZSA9PiB7CkBAIC00Myw1MSArNDQsMTE0IEBAIGNvbnN0IF9pc1ZhbGlkVmFs
dWUgPSAodmFsdWUsIHR5cGUpID0+IHsKIH07CiBjb25zdCBfdW5rbm93blNlY3Rpb25JZCA9IDA7
CiAKLWNvbnN0IF9CdWlsZFdlYkFzc2VtYmx5QmluYXJ5ID0gKHByZWFtYmxlLCBzZWN0aW9ucykg
PT4gewotICAgIGxldCB3YXNtQmluID0gbmV3IExvd0xldmVsQmluYXJ5KCk7Ci0gICAgY29uc3Qg
cHV0ID0gKGJpbiwgdHlwZSwgdmFsdWUpID0+IGJpblt0eXBlXSh2YWx1ZSk7Ci0gICAgZm9yIChj
b25zdCBwIG9mIFdBU00uZGVzY3JpcHRpb24ucHJlYW1ibGUpCi0gICAgICAgIHB1dCh3YXNtQmlu
LCBwLnR5cGUsIHByZWFtYmxlW3AubmFtZV0pOwotICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBz
ZWN0aW9ucykgewotICAgICAgICBwdXQod2FzbUJpbiwgV0FTTS5zZWN0aW9uRW5jb2RpbmdUeXBl
LCBzZWN0aW9uLmlkKTsKLSAgICAgICAgbGV0IHNlY3Rpb25CaW4gPSB3YXNtQmluLm5ld1BhdGNo
YWJsZSgidmFydWludCIpOwotICAgICAgICBzd2l0Y2ggKHNlY3Rpb24ubmFtZSkgewotICAgICAg
ICBjYXNlICJUeXBlIjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5
cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAgICAgICAgY2FzZSAiSW1wb3J0IjogdGhyb3cgbmV3
IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsK
LSAgICAgICAgY2FzZSAiRnVuY3Rpb24iOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6
IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9uLm5hbWV9ImApOwotICAgICAgICBjYXNlICJUYWJsZSI6
IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24u
bmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBs
ZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2Ug
Ikdsb2JhbCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIk
e3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAgICAgIGNhc2UgIkV4cG9ydCI6IHRocm93IG5ldyBFcnJv
cihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0iYCk7Ci0gICAg
ICAgIGNhc2UgIlN0YXJ0IjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9u
IHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJgKTsKLSAgICAgICAgY2FzZSAiRWxlbWVudCI6IHRocm93
IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rpb24ubmFtZX0i
YCk7Ci0gICAgICAgIGNhc2UgIkNvZGUiOgotICAgICAgICAgICAgY29uc3QgbnVtYmVyT2ZGdW5j
dGlvbkJvZGllcyA9IHNlY3Rpb24uZGF0YS5sZW5ndGg7Ci0gICAgICAgICAgICBwdXQoc2VjdGlv
bkJpbiwgInZhcnVpbnQiLCBudW1iZXJPZkZ1bmN0aW9uQm9kaWVzKTsKLSAgICAgICAgICAgIGZv
ciAoY29uc3QgZnVuYyBvZiBzZWN0aW9uLmRhdGEpIHsKLSAgICAgICAgICAgICAgICBsZXQgZnVu
Y0JpbiA9IHNlY3Rpb25CaW4ubmV3UGF0Y2hhYmxlKCJ2YXJ1aW50Iik7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgbG9jYWxDb3VudCA9IGZ1bmMubG9jYWxzLmxlbmd0aDsKLSAgICAgICAgICAgICAg
ICBwdXQoZnVuY0JpbiwgInZhcnVpbnQiLCBsb2NhbENvdW50KTsKLSAgICAgICAgICAgICAgICBp
ZiAobG9jYWxDb3VudCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBsb2Nh
bHNgKTsgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MjcwNgotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgZnVuYy5jb2RlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1dChmdW5jQmluLCAidWludDgiLCBvcC52YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChvcC5hcmd1bWVudHMubGVuZ3RoICE9PSAwKSB0aHJvdyBuZXcgRXJy
b3IoYFVuaW1wbGVtZW50ZWQ6IGFyZ3VtZW50c2ApOyAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzA2Ci0gICAgICAgICAgICAgICAgICAgIGlmIChv
cC5pbW1lZGlhdGVzLmxlbmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVk
OiBpbW1lZGlhdGVzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI3MDYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnVuY0Jp
bi5hcHBseSgpOworY29uc3QgX25vcm1hbGl6ZUZ1bmN0aW9uU2lnbmF0dXJlID0gKHBhcmFtcywg
cmV0KSA9PiB7CisgICAgYXNzZXJ0LmlzQXJyYXkocGFyYW1zKTsKKyAgICBmb3IgKGNvbnN0IHAg
b2YgcGFyYW1zKQorICAgICAgICBhc3NlcnQudHJ1dGh5KFdBU00uaXNWYWxpZFZhbHVlVHlwZShw
KSwgYFR5cGUgcGFyYW1ldGVyICR7cH0gbmVlZHMgYSB2YWxpZCB2YWx1ZSB0eXBlYCk7CisgICAg
aWYgKHR5cGVvZihyZXQpID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgcmV0ID0gInZvaWQiOwor
ICAgIGFzc2VydC5pc05vdEFycmF5KHJldCwgYE11bHRpcGxlIHJldHVybiB2YWx1ZXMgbm90IHN1
cHBvcnRlZCBieSBXZWJBc3NlbWJseSB5ZXRgKTsKKyAgICBhc3NlcnQuZmFsc3kocmV0ICE9PSAi
dm9pZCIgJiYgIVdBU00uaXNWYWxpZFZhbHVlVHlwZShyZXQpLCBgVHlwZSByZXR1cm4gJHtyZXR9
IG11c3QgYmUgdmFsaWQgdmFsdWUgdHlwZWApOworICAgIHJldHVybiBbcGFyYW1zLCByZXRdOwor
fTsKKworY29uc3QgX21heWJlUmVnaXN0ZXJUeXBlID0gKGJ1aWxkZXIsIHR5cGUpID0+IHsKKyAg
ICBjb25zdCB0eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKKyAgICBp
ZiAodHlwZW9mKHR5cGUpID09PSAibnVtYmVyIikgeworICAgICAgICAvLyBUeXBlIG51bWJlcnMg
YWxyZWFkeSByZWZlciB0byB0aGUgdHlwZSBzZWN0aW9uLCBubyBuZWVkIHRvIHJlZ2lzdGVyIHRo
ZW0uCisgICAgICAgIGlmIChidWlsZGVyLl9jaGVja2VkKSB7CisgICAgICAgICAgICBhc3NlcnQu
aXNOb3RVbmRlZih0eXBlU2VjdGlvbiwgYENhbid0IHVzZSB0eXBlICR7dHlwZX0gaWYgYSB0eXBl
IHNlY3Rpb24gaXNuJ3QgcHJlc2VudGApOworICAgICAgICAgICAgYXNzZXJ0LmlzTm90VW5kZWYo
dHlwZVNlY3Rpb24uZGF0YVt0eXBlXSwgYFR5cGUgJHt0eXBlfSBkb2Vzbid0IGV4aXN0IGluIHR5
cGUgc2VjdGlvbmApOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKyAg
ICBhc3NlcnQuaGFzT2JqZWN0UHJvcGVydHkodHlwZSwgInBhcmFtcyIsIGBFeHBlY3RlZCB0eXBl
IHRvIGJlIGEgbnVtYmVyIG9yIG9iamVjdCB3aXRoICdwYXJhbXMnIGFuZCBvcHRpb25hbGx5ICdy
ZXQnIGZpZWxkc2ApOworICAgIGNvbnN0IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rp
b25TaWduYXR1cmUodHlwZS5wYXJhbXMsIHR5cGUucmV0KTsKKyAgICBhc3NlcnQuaXNOb3RVbmRl
Zih0eXBlU2VjdGlvbiwgYENhbid0IGFkZCB0eXBlIGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHBy
ZXNlbnRgKTsKKyAgICAvLyBUcnkgcmV1c2luZyBhbiBlcXVpdmFsZW50IHR5cGUgZnJvbSB0aGUg
dHlwZSBzZWN0aW9uLgorICAgIHR5cGVzOgorICAgIGZvciAobGV0IGkgPSAwOyBpICE9PSB0eXBl
U2VjdGlvbi5kYXRhLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGNvbnN0IHQgPSB0eXBlU2VjdGlv
bi5kYXRhW2ldOworICAgICAgICBpZiAodC5yZXQgPT09IHJldCAmJiBwYXJhbXMubGVuZ3RoID09
PSB0LnBhcmFtcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqICE9PSB0
LnBhcmFtcy5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbal0gIT09
IHQucGFyYW1zW2pdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0eXBlczsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJEYXRhIjogdGhyb3cg
bmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbi5uYW1lfSJg
KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChzZWN0aW9uLmlkICE9PSBfdW5r
bm93blNlY3Rpb25JZCkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNlY3Rpb24gIiR7c2VjdGlv
bi5uYW1lfSIgd2l0aCBudW1iZXIgJHtzZWN0aW9uLmlkfWApOwotICAgICAgICAgICAgcHV0KHNl
Y3Rpb25CaW4sICJzdHJpbmciLCBzZWN0aW9uLm5hbWUpOwotICAgICAgICAgICAgZm9yIChjb25z
dCBieXRlIG9mIHNlY3Rpb24uZGF0YSkKLSAgICAgICAgICAgICAgICBwdXQoc2VjdGlvbkJpbiwg
InVpbnQ4IiwgYnl0ZSk7CisgICAgICAgICAgICB0eXBlID0gaTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNlY3Rpb25CaW4uYXBwbHkoKTsKICAgICB9Ci0gICAgcmV0
dXJuIHdhc21CaW47CisgICAgaWYgKHR5cGVvZih0eXBlKSAhPT0gIm51bWJlciIpIHsKKyAgICAg
ICAgLy8gQ291bGRuJ3QgcmV1c2UgYSBwcmUtZXhpc3RpbmcgdHlwZSwgcmVnaXN0ZXIgdGhpcyB0
eXBlIGluIHRoZSB0eXBlIHNlY3Rpb24uCisgICAgICAgIHR5cGVTZWN0aW9uLmRhdGEucHVzaCh7
IHBhcmFtczogcGFyYW1zLCByZXQ6IHJldCB9KTsKKyAgICAgICAgdHlwZSA9IHR5cGVTZWN0aW9u
LmRhdGEubGVuZ3RoIC0gMTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGU7Cit9OworCitjb25zdCBf
aW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxk
ZXIpID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHR5cGUpID0+IHsKKyAgICAgICAg
YXNzZXJ0LmlzU3RyaW5nKG1vZHVsZSwgYEltcG9ydCBmdW5jdGlvbiBtb2R1bGUgc2hvdWxkIGJl
IGEgc3RyaW5nLCBnb3QgIiR7bW9kdWxlfSJgKTsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZp
ZWxkLCBgSW1wb3J0IGZ1bmN0aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2Zp
ZWxkfSJgKTsKKyAgICAgICAgY29uc3QgdHlwZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9u
KCJUeXBlIik7CisgICAgICAgIHR5cGUgPSBfbWF5YmVSZWdpc3RlclR5cGUoYnVpbGRlciwgdHlw
ZSk7CisgICAgICAgIHNlY3Rpb24uZGF0YS5wdXNoKHsgZmllbGQ6IGZpZWxkLCB0eXBlOiB0eXBl
LCBraW5kOiAiRnVuY3Rpb24iLCBtb2R1bGU6IG1vZHVsZSB9KTsKKyAgICAgICAgLy8gSW1wb3J0
cyBhbHNvIGNvdW50IGluIHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZS4gTWFwIHRoZW0gYXMgb2Jq
ZWN0cyB0byBhdm9pZCBjbGFzaGluZyB3aXRoIENvZGUgZnVuY3Rpb25zJyBuYW1lcy4KKyAgICAg
ICAgYnVpbGRlci5fcmVnaXN0ZXJGdW5jdGlvblRvSW5kZXhTcGFjZSh7IG1vZHVsZTogbW9kdWxl
LCBmaWVsZDogZmllbGQgfSk7CisgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsKKyAgICB9Owor
fTsKKworY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aWxkZXIsIHNlY3Rp
b24sIG5leHRCdWlsZGVyKSA9PiB7CisgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgsIHR5cGUpID0+
IHsKKyAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgRXhwb3J0IGZ1bmN0aW9uIGZpZWxk
IHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgY29uc3QgdHlw
ZVNlY3Rpb24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJUeXBlIik7CisgICAgICAgIGlmICh0eXBl
b2YodHlwZSkgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBFeHBvcnRzIGNhbiBs
ZWF2ZSB0aGUgdHlwZSB1bnNwZWNpZmllZCwgbGV0dGluZyB0aGUgQ29kZSBidWlsZGVyIHBhdGNo
IHRoZW0gdXAgbGF0ZXIuCisgICAgICAgICAgICB0eXBlID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1
aWxkZXIsIHR5cGUpOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGNhbid0IGNoZWNrIG11Y2gg
YWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhlIENvZGUgc2VjdGlvbiBzdWNjZWVkcyB0aGUg
RXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBkb25lIGF0IENvZGUoKS5FbmQoKSB0aW1lLgor
ICAgICAgICBzd2l0Y2ggKHR5cGVvZihpbmRleCkpIHsKKyAgICAgICAgY2FzZSAic3RyaW5nIjog
YnJlYWs7IC8vIEFzc3VtZSBpdCdzIGEgZnVuY3Rpb24gbmFtZSB3aGljaCB3aWxsIGJlIHJldmVh
bGVkIGluIHRoZSBDb2RlIHNlY3Rpb24uCisgICAgICAgIGNhc2UgIm51bWJlciI6IGJyZWFrOyAv
LyBBc3N1bWUgaXQncyBhIG51bWJlciBpbiB0aGUgImZ1bmN0aW9uIGluZGV4IHNwYWNlIi4KKyAg
ICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgICAgIC8vIFJlLWV4cG9ydGluZyBhbiBpbXBv
cnQuCisgICAgICAgICAgICBhc3NlcnQuaGFzT2JqZWN0UHJvcGVydHkoaW5kZXgsICJtb2R1bGUi
LCBgUmUtZXhwb3J0aW5nICIke2ZpZWxkfSIgZnJvbSBhbiBpbXBvcnRgKTsKKyAgICAgICAgICAg
IGFzc2VydC5oYXNPYmplY3RQcm9wZXJ0eShpbmRleCwgImZpZWxkIiwgYFJlLWV4cG9ydGluZyAi
JHtmaWVsZH0iIGZyb20gYW4gaW1wb3J0YCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAidW5kZWZpbmVkIjoKKyAgICAgICAgICAgIC8vIEFzc3VtZSBpdCdzIHRoZSBzYW1lIGFz
IHRoZSBmaWVsZCAoaS5lLiBpdCdzIG5vdCBiZWluZyByZW5hbWVkKS4KKyAgICAgICAgICAgIGlu
ZGV4ID0gZmllbGQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogdGhyb3cg
bmV3IEVycm9yKGBFeHBvcnQgc2VjdGlvbidzIGluZGV4IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBu
dW1iZXIsIGdvdCAke2luZGV4fWApOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGNvcnJlc3Bv
bmRpbmdJbXBvcnQgPSBidWlsZGVyLl9nZXRGdW5jdGlvbkZyb21JbmRleFNwYWNlKGluZGV4KTsK
KyAgICAgICAgY29uc3QgaW1wb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkltcG9y
dCIpOworICAgICAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAg
ICAgIC8vIFJlLWV4cG9ydGluZyBhbiBpbXBvcnQgdXNpbmcgaXRzIG1vZHVsZStmaWVsZCBuYW1l
LgorICAgICAgICAgICAgYXNzZXJ0LmlzTm90VW5kZWYoY29ycmVzcG9uZGluZ0ltcG9ydCwgYFJl
LWV4cG9ydGluZyAiJHtmaWVsZH0iIGNvdWxkbid0IGZpbmQgaW1wb3J0IGZyb20gbW9kdWxlICIk
e2luZGV4Lm1vZHVsZX0iIGZpZWxkICIke2luZGV4LmZpZWxkfSJgKTsKKyAgICAgICAgICAgIGlu
ZGV4ID0gY29ycmVzcG9uZGluZ0ltcG9ydDsKKyAgICAgICAgICAgIGlmICh0eXBlb2YodHlwZSkg
PT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgIHR5cGUgPSBpbXBvcnRTZWN0aW9uLmRh
dGFbaW5kZXhdLnR5cGU7CisgICAgICAgICAgICBpZiAoYnVpbGRlci5fY2hlY2tlZCkKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXEodHlwZSwgaW1wb3J0U2VjdGlvbi5kYXRhW2luZGV4XS50eXBl
LCBgUmUtZXhwb3J0aW5nIGltcG9ydCAiJHtpbXBvcnRTZWN0aW9uLmRhdGFbaW5kZXhdLmZpZWxk
fSIgYXMgIiR7ZmllbGR9IiBoYXMgbWlzbWF0Y2hpbmcgdHlwZWApOworICAgICAgICB9IGVsc2Ug
aWYgKHR5cGVvZihjb3JyZXNwb25kaW5nSW1wb3J0KSAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAg
ICAgICAgIC8vIFJlLWV4cG9ydGluZyBhbiBpbXBvcnQgdXNpbmcgaXRzIGluZGV4LgorICAgICAg
ICAgICAgbGV0IGV4cG9ydGVkSW1wb3J0OworICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGlt
cG9ydFNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgICAgIGlmIChpLm1vZHVsZSA9PT0gY29y
cmVzcG9uZGluZ0ltcG9ydC5tb2R1bGUgJiYgaS5maWVsZCA9PT0gY29ycmVzcG9uZGluZ0ltcG9y
dC5maWVsZCkgeworICAgICAgICAgICAgICAgICAgICBleHBvcnRlZEltcG9ydCA9IGk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0eXBlb2YodHlwZSkgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICAg
ICAgICAgIHR5cGUgPSBleHBvcnRlZEltcG9ydC50eXBlOworICAgICAgICAgICAgaWYgKGJ1aWxk
ZXIuX2NoZWNrZWQpCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxKHR5cGUsIGV4cG9ydGVkSW1w
b3J0LnR5cGUsIGBSZS1leHBvcnRpbmcgaW1wb3J0ICIke2V4cG9ydGVkSW1wb3J0LmZpZWxkfSIg
YXMgIiR7ZmllbGR9IiBoYXMgbWlzbWF0Y2hpbmcgdHlwZWApOworICAgICAgICB9CisgICAgICAg
IHNlY3Rpb24uZGF0YS5wdXNoKHsgZmllbGQ6IGZpZWxkLCB0eXBlOiB0eXBlLCBraW5kOiAiRnVu
Y3Rpb24iLCBpbmRleDogaW5kZXggfSk7CisgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsKKyAg
ICB9OwogfTsKIAogZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CkBAIC05OCw2ICsxNjIs
OCBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgIHByZWFtYmxl
W3AubmFtZV0gPSBwLnZhbHVlOwogICAgICAgICB0aGlzLnNldFByZWFtYmxlKHByZWFtYmxlKTsK
ICAgICAgICAgdGhpcy5fc2VjdGlvbnMgPSBbXTsKKyAgICAgICAgdGhpcy5fZnVuY3Rpb25JbmRl
eFNwYWNlID0ge307CisgICAgICAgIHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZUNvdW50ID0gMDsK
ICAgICAgICAgdGhpcy5fcmVnaXN0ZXJTZWN0aW9uQnVpbGRlcnMoKTsKICAgICB9CiAgICAgc2V0
Q2hlY2tlZChjaGVja2VkKSB7CkBAIC0xMDgsMjUgKzE3NCwxMTkgQEAgZXhwb3J0IGRlZmF1bHQg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgIHRoaXMuX3ByZWFtYmxlID0gT2JqZWN0LmFzc2lnbih0
aGlzLl9wcmVhbWJsZSB8fCB7fSwgcCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KKyAg
ICBfcmVnaXN0ZXJGdW5jdGlvblRvSW5kZXhTcGFjZShuYW1lKSB7CisgICAgICAgIGlmICh0eXBl
b2YobmFtZSkgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAvLyBSZWdpc3RlcmluZyBh
IG5hbWVsZXNzIGZ1bmN0aW9uIHN0aWxsIGFkZHMgaXQgdG8gdGhlIGZ1bmN0aW9uIGluZGV4IHNw
YWNlLiBSZWdpc3RlciBpdCBhcyBzb21ldGhpbmcgdGhhdCBjYW4ndCBub3JtYWxseSBiZSByZWdp
c3RlcmVkLgorICAgICAgICAgICAgbmFtZSA9IHt9OworICAgICAgICB9CisgICAgICAgIC8vIENv
bGxpc2lvbnMgYXJlIGZpbmU6IHdlJ2xsIHNpbXBseSBjb3VudCB0aGUgZnVuY3Rpb24gYW5kIGZv
cmdldCB0aGUgcHJldmlvdXMgb25lLgorICAgICAgICB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2Vb
bmFtZV0gPSB0aGlzLl9mdW5jdGlvbkluZGV4U3BhY2VDb3VudCsrOworICAgICAgICAvLyBNYXAg
aXQgYm90aCB3YXlzLCB0aGUgbnVtYmVyIHNwYWNlIGlzIGRpc3RpbmN0IGZyb20gdGhlIG5hbWUg
c3BhY2UuCisgICAgICAgIHRoaXMuX2Z1bmN0aW9uSW5kZXhTcGFjZVt0aGlzLl9mdW5jdGlvbklu
ZGV4U3BhY2VbbmFtZV1dID0gbmFtZTsKKyAgICB9CisgICAgX2dldEZ1bmN0aW9uRnJvbUluZGV4
U3BhY2UobmFtZSkgeworICAgICAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25JbmRleFNwYWNlW25h
bWVdOworICAgIH0KICAgICBfcmVnaXN0ZXJTZWN0aW9uQnVpbGRlcnMoKSB7CiAgICAgICAgIGZv
ciAoY29uc3Qgc2VjdGlvbiBpbiBXQVNNLmRlc2NyaXB0aW9uLnNlY3Rpb24pIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoc2VjdGlvbikgeworICAgICAgICAgICAgY2FzZSAiVHlwZSI6CisgICAgICAg
ICAgICAgICAgdGhpc1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzID0gdGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYnVpbGRlciA9IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVC
dWlsZGVyID0geworICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiBidWlsZGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgRnVuYzogKHBhcmFtcywgcmV0KSA9PiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgW3BhcmFtcywgcmV0XSA9IF9ub3JtYWxpemVGdW5jdGlvblNp
Z25hdHVyZShwYXJhbXMsIHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRh
LnB1c2goeyBwYXJhbXM6IHBhcmFtcywgcmV0OiByZXQgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHR5cGVCdWlsZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVC
dWlsZGVyOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlICJJbXBvcnQiOgorICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rp
b24oc2VjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydEJ1aWxkZXIgPSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBUYWJsZTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6
IGltcG9ydCB0YWJsZWApOyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5OiAoKSA9
PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0IG1lbW9yeWApOyB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogaW1wb3J0IGdsb2JhbGApOyB9LAorICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2ltcG9ydEZ1
bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW1wb3J0QnVpbGRlcjsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiRXhwb3J0IjoKKyAgICAgICAgICAg
ICAgICB0aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBj
b25zdCBleHBvcnRCdWlsZGVyID0geworICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9
PiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3
IEVycm9yKGBVbmltcGxlbWVudGVkOiBleHBvcnQgdGFibGVgKTsgfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE1lbW9yeTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6
IGV4cG9ydCBtZW1vcnlgKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkg
PT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGV4cG9ydCBnbG9iYWxgKTsgfSwK
KyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRl
ci5GdW5jdGlvbiA9IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRC
dWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxkZXI7CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
IkNvZGUiOgogICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzOwogICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjb2RlQnVpbGRlciA9ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFbmQ6
ICgpID0+IGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogcGFyYW1l
dGVycyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFt
ZXRlcnMgfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFBh
cmFtZXRlclR5cGVzID0gcGFyYW1ldGVycy5maWx0ZXIocCA9PiAhV0FTTS5pc1ZhbGlkVmFsdWVU
eXBlKHApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW52YWxpZFBhcmFtZXRl
clR5cGVzLmxlbmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBkZWNsYXJlZCB3
aXRoIHBhcmFtZXRlcnMgWyR7cGFyYW1ldGVyc31dLCBpbnZhbGlkOiBbJHtpbnZhbGlkUGFyYW1l
dGVyVHlwZXN9XWApOworICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugbm93IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9u
IHRvIHJlbWFwIHRoZSBleHBvcnQgc2VjdGlvbidzICJ0eXBlIiBhbmQgImluZGV4IiBhY2NvcmRp
bmcgdG8gdGhlIENvZGUgc2VjdGlvbiB3ZSdyZSBjdXJyZW50bHkgZW5kaW5nLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlv
bigiVHlwZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydFNlY3Rp
b24gPSBidWlsZGVyLl9nZXRTZWN0aW9uKCJJbXBvcnQiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBleHBvcnRTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiRXhwb3J0
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZVNlY3Rpb24gPSBzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBvcnRTZWN0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBleHBvcnRTZWN0aW9uLmRh
dGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9m
KGUuaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZXhwb3J0IGluZGV4ICIke2UuaW5kZXh9ImAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjogewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYnVp
bGRlci5fZ2V0RnVuY3Rpb25Gcm9tSW5kZXhTcGFjZShlLmluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQuaXNOdW1iZXIoaW5kZXgsIGBFeHBvcnQg
c2VjdGlvbiBjb250YWlucyB1bmRlZmluZWQgZnVuY3Rpb24gIiR7ZS5pbmRleH0iYCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pbmRleCA9IGluZGV4OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBGYWxsdGhyb3VnaC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIm51bWJlciI6IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGJ1aWxkZXIuX2dl
dEZ1bmN0aW9uRnJvbUluZGV4U3BhY2UoZS5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkZXIuX2NoZWNrZWQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC5pc05vdFVuZGVmKGluZGV4LCBgRXhw
b3J0ICIke2UuZmllbGR9IiBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYSBkZWZpbmVkIHZhbHVlIGlu
IHRoZSBmdW5jdGlvbiBpbmRleCBzcGFjZWApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgInVuZGVmaW5lZCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBGdW5jdGlvbigpLkVuZCgpIHdpdGggdW5k
ZWZpbmVkIGV4cG9ydCBpbmRleGApOyAvLyBGSVhNRQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5
cGVvZihlLnR5cGUpID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRo
ZSBDb2RlIHNlY3Rpb24gKHJlLWV4cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFj
ZU9mZnNldCA9IGltcG9ydFNlY3Rpb24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbklu
ZGV4ID0gZS5pbmRleCAtIGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlLnR5cGUgPSBjb2RlU2VjdGlvbi5kYXRhW2Z1bmN0
aW9uSW5kZXhdLnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246
IChhMCwgYTEpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2lnbmF0dXJl
ID0gdHlwZW9mKGEwKSA9PT0gInN0cmluZyIgPyBhMSA6IGEwOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZihhMCkgPT09ICJzdHJpbmciID8g
YTAgOiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihz
aWduYXR1cmUpID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2lnbmF0dXJlID0geyBwYXJhbXM6IFtdIH07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0Lmhhc09iamVjdFByb3BlcnR5KHNpZ25hdHVyZSwgInBhcmFtcyIsIGBFeHBlY3Qg
ZnVuY3Rpb24gc2lnbmF0dXJlIHRvIGJlIGFuIG9iamVjdCB3aXRoIGEgInBhcmFtcyIgZmllbGQs
IGdvdCAiJHtzaWduYXR1cmV9ImApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFtwYXJhbXMsIHJldF0gPSBfbm9ybWFsaXplRnVuY3Rpb25TaWduYXR1cmUoc2lnbmF0dXJlLnBh
cmFtcywgc2lnbmF0dXJlLnJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0
dXJlID0geyBwYXJhbXM6IHBhcmFtcywgcmV0OiByZXQgfTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBmdW5jID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhbHM6IHBhcmFtZXRlcnMsIC8vIFBhcmFtZXRlcnMgYXJlIHRoZSBmaXJzdCBsb2NhbHMuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlckNvdW50OiBwYXJhbWV0ZXJz
Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZnVuY3Rpb25O
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBfbWF5YmVSZWdpc3Rl
clR5cGUoYnVpbGRlciwgc2lnbmF0dXJlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2lnbmF0dXJlOiBzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2FsczogcGFyYW1zLCAvLyBQYXJhbWV0ZXJzIGFyZSB0aGUgZmlyc3QgbG9jYWxzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJDb3VudDogcGFyYW1zLmxlbmd0
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogW10KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YS5w
dXNoKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuX3JlZ2lzdGVy
RnVuY3Rpb25Ub0luZGV4U3BhY2UoZnVuY3Rpb25OYW1lKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgZnVuY3Rpb25CdWlsZGVyID0ge307CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBvcCBpbiBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gX3RvSmF2YVNjcmlwdE5hbWUo
b3ApOwpAQCAtMTc0LDE5ICszMzQsMjEgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gOiAoKSA9PiB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hlY2tJbW1zID0gYnVpbGRlci5fY2hlY2tlZCA/IChvcCwgaW1tcykgPT4g
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltbXMubGVuZ3RoICE9
IGltbS5sZW5ndGgpIHRocm93IG5ldyBFcnJvcihgIiR7b3B9IiBleHBlY3RzICR7aW1tLmxlbmd0
aH0gaW1tZWRpYXRlcywgZ290ICR7aW1tcy5sZW5ndGh9YCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQuZXEoaW1tcy5sZW5ndGgsIGltbS5sZW5ndGgsIGAiJHtv
cH0iIGV4cGVjdHMgJHtpbW0ubGVuZ3RofSBpbW1lZGlhdGVzLCBnb3QgJHtpbW1zLmxlbmd0aH1g
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7
IGlkeCAhPT0gaW1tLmxlbmd0aDsgKytpZHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnb3QgPSBpbW1zW2lkeF07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ID0gaW1tW2lkeF07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChleHBlY3QubmFtZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uX2luZGV4
IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXNW
YWxpZFZhbHVlKGdvdCwgImkzMiIpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgb24g
JHtvcH06IGdvdCAiJHtnb3R9IiwgZXhwZWN0ZWQgaTMyYCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydC50cnV0aHkoX2lzVmFsaWRWYWx1ZShnb3Qs
ICJpMzIiKSwgYEludmFsaWQgdmFsdWUgb24gJHtvcH06IGdvdCAiJHtnb3R9IiwgZXhwZWN0ZWQg
aTMyYCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FIGNoZWNrIGZ1bmN0aW9uIGluZGljZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM0MjEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAibG9jYWxfaW5kZXgiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6ICIke2V4cGVj
dC5uYW1lfSIgb24gIiR7b3B9ImApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgImdsb2JhbF9pbmRleCI6IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRl
ZDogIiR7ZXhwZWN0Lm5hbWV9IiBvbiAiJHtvcH0iYCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAidHlwZV9pbmRleCI6IHRocm93IG5ldyBFcnJvcihgVW5p
bXBsZW1lbnRlZDogIiR7ZXhwZWN0Lm5hbWV9IiBvbiAiJHtvcH0iYCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidmFsdWUiOiBpZiAoIV9pc1ZhbGlkVmFs
dWUoZ290LCByZXRbMF0pKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgb24gJHtvcH06
IGdvdCAiJHtnb3R9IiwgZXhwZWN0ZWQgJHtyZXRbMF19YCk7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInZhbHVlIjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LnRydXRoeShfaXNWYWxpZFZhbHVl
KGdvdCwgcmV0WzBdKSwgYEludmFsaWQgdmFsdWUgb24gJHtvcH06IGdvdCAiJHtnb3R9IiwgZXhw
ZWN0ZWQgJHtyZXRbMF19YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgImZsYWdzIjogdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiAiJHtleHBlY3QubmFt
ZX0iIG9uICIke29wfSJgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJvZmZzZXQiOiB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6ICIke2V4cGVj
dC5uYW1lfSIgb24gIiR7b3B9ImApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENvbnRyb2w6CkBAIC0yMjYsNyArMzg4LDExIEBAIGV4cG9ydCBkZWZhdWx0IGNs
YXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXM7CiAgICAgICAg
ICAgICBjb25zdCB1bmtub3duQnVpbGRlciA9ICB7CiAgICAgICAgICAgICAgICAgRW5kOiAoKSA9
PiBidWlsZGVyLAotICAgICAgICAgICAgICAgIEJ5dGU6IGIgPT4geyBpZiAoKGIgJiAweEZGKSAh
PT0gYikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gc2VjdGlvbiBleHBlY3RlZCBieXRl
LCBnb3Q6ICIke2J9ImApOyBzLmRhdGEucHVzaChiKTsgcmV0dXJuIHVua25vd25CdWlsZGVyOyB9
CisgICAgICAgICAgICAgICAgQnl0ZTogYiA9PiB7CisgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcShiICYgMHhGRiwgYiwgYFVua25vd24gc2VjdGlvbiBleHBlY3RlZCBieXRlLCBnb3Q6ICIk
e2J9ImApOworICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaChiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHVua25vd25CdWlsZGVyOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICByZXR1cm4gdW5rbm93bkJ1aWxkZXI7CiAgICAgICAgIH07
CkBAIC0yMzQsMTAgKzQwMCwzOSBAQCBleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAg
ICBfYWRkU2VjdGlvbihuYW1lT3JOdW1iZXIsIGV4dHJhT2JqZWN0KSB7CiAgICAgICAgIGNvbnN0
IG5hbWUgPSB0eXBlb2YobmFtZU9yTnVtYmVyKSA9PT0gInN0cmluZyIgPyBuYW1lT3JOdW1iZXIg
OiAiIjsKICAgICAgICAgY29uc3QgbnVtYmVyID0gdHlwZW9mKG5hbWVPck51bWJlcikgPT09ICJu
dW1iZXIiID8gbmFtZU9yTnVtYmVyIDogKFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbltuYW1lXSA/
IFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbltuYW1lXS52YWx1ZSA6IF91bmtub3duU2VjdGlvbklk
KTsKKyAgICAgICAgaWYgKHRoaXMuX2NoZWNrZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHVu
aXF1ZW5lc3MuCisgICAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc2VjdGlvbnMpCisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmZhbHN5KHMubmFtZSA9PT0gbmFtZSAmJiBzLmlkID09PSBu
dW1iZXIsIGBDYW5ub3QgaGF2ZSB0d28gc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lICIke25h
bWV9IiBhbmQgSUQgJHtudW1iZXJ9YCk7CisgICAgICAgICAgICAvLyBDaGVjayBvcmRlcmluZy4K
KyAgICAgICAgICAgIGlmICgobnVtYmVyICE9PSBfdW5rbm93blNlY3Rpb25JZCkgJiYgKHRoaXMu
X3NlY3Rpb25zLmxlbmd0aCAhPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0g
dGhpcy5fc2VjdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuX3NlY3Rpb25zW2ldLmlkID09PSBfdW5rbm93blNlY3Rpb25JZCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhc3Nl
cnQubGUodGhpcy5fc2VjdGlvbnNbaV0uaWQsIG51bWJlciwgYEJhZCBzZWN0aW9uIG9yZGVyaW5n
OiAiJHt0aGlzLl9zZWN0aW9uc1tpXS5uYW1lfSIgY2Fubm90IHByZWNlZGUgIiR7bmFtZX0iYCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgICAgICBjb25zdCBzID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6
IG5hbWUsIGlkOiBudW1iZXIsIGRhdGE6IFtdIH0sIGV4dHJhT2JqZWN0IHx8IHt9KTsKICAgICAg
ICAgdGhpcy5fc2VjdGlvbnMucHVzaChzKTsKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQorICAg
IF9nZXRTZWN0aW9uKG5hbWVPck51bWJlcikgeworICAgICAgICBzd2l0Y2ggKHR5cGVvZihuYW1l
T3JOdW1iZXIpKSB7CisgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50
YXRpb24gcHJvYmxlbTogY2FuJ3QgZ2V0IHNlY3Rpb24gIiR7bmFtZU9yTnVtYmVyfSJgKTsKKyAg
ICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9z
ZWN0aW9ucykKKyAgICAgICAgICAgICAgICBpZiAocy5uYW1lID09PSBuYW1lT3JOdW1iZXIpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKKyAgICAgICAgY2FzZSAibnVtYmVyIjoKKyAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiB0
aGlzLl9zZWN0aW9ucykKKyAgICAgICAgICAgICAgICBpZiAocy5pZCA9PT0gbmFtZU9yTnVtYmVy
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CisgICAgICAgIH0KKyAgICB9CiAgICAgb3B0aW1pemUoKSB7CiAgICAgICAgIC8vIEZJ
WE1FIEFkZCBtb3JlIG9wdGltaXphdGlvbnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjM0MjQKICAgICAgICAgcmV0dXJuIHRoaXM7CkBAIC0yNTQsNSArNDQ5LDUg
QEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgIC8vIEZJWE1FIENyZWF0
ZSBhbiBhc20uanMgZXF1aXZhbGVudCBzdHJpbmcgd2hpY2ggY2FuIGJlIGV2YWwnZC4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQyNQogICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoImFzbS5qcyBub3QgaW1wbGVtZW50ZWQgeWV0Iik7CiAgICAgfQotICAgIFdlYkFz
c2VtYmx5KCkgeyByZXR1cm4gX0J1aWxkV2ViQXNzZW1ibHlCaW5hcnkodGhpcy5fcHJlYW1ibGUs
IHRoaXMuX3NlY3Rpb25zKTsgfQorICAgIFdlYkFzc2VtYmx5KCkgeyByZXR1cm4gQnVpbGRXZWJB
c3NlbWJseS5CaW5hcnkodGhpcy5fcHJlYW1ibGUsIHRoaXMuX3NlY3Rpb25zKTsgfQogfTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzIGIvSlNU
ZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZjJiMGE1MgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2Fz
bS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW1wb3J0IExvd0xldmVsQmlu
YXJ5IGZyb20gJ0xvd0xldmVsQmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIFdBU00gZnJvbSAnV0FT
TS5qcyc7CisKK2NvbnN0IHB1dCA9IChiaW4sIHR5cGUsIHZhbHVlKSA9PiBiaW5bdHlwZV0odmFs
dWUpOworCitjb25zdCBlbWl0dGVycyA9IHsKKyAgICBUeXBlOiAoc2VjdGlvbiwgYmluKSA9PiB7
CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50Iiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7CisgICAg
ICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc2VjdGlvbi5kYXRhKSB7CisgICAgICAgICAgICBjb25z
dCBmdW5jVHlwZUNvbnN0cnVjdG9yID0gLTB4MjA7IC8vIEZJWE1FIE1vdmUgdGhpcyB0byB3YXNt
Lmpzb24uCisgICAgICAgICAgICBwdXQoYmluLCAidmFyaW50NyIsIGZ1bmNUeXBlQ29uc3RydWN0
b3IpOworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQiLCBlbnRyeS5wYXJhbXMubGVuZ3Ro
KTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgZW50cnkucGFyYW1zKQorICAgICAg
ICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00udmFsdWVUeXBlVmFsdWVbcGFyYW1dKTsK
KyAgICAgICAgICAgIGlmIChlbnRyeS5yZXQgPT09ICJ2b2lkIikKKyAgICAgICAgICAgICAgICBw
dXQoYmluLCAidmFydWludDEiLCAwKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHB1dChiaW4sICJ2YXJ1aW50MSIsIDEpOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ1
aW50OCIsIFdBU00udmFsdWVUeXBlVmFsdWVbZW50cnkucmV0XSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9LAorICAgIEltcG9ydDogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAg
ICBwdXQoYmluLCAidmFydWludCIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOworICAgICAgICBmb3Ig
KGNvbnN0IGVudHJ5IG9mIHNlY3Rpb24uZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInN0
cmluZyIsIGVudHJ5Lm1vZHVsZSk7CisgICAgICAgICAgICBwdXQoYmluLCAic3RyaW5nIiwgZW50
cnkuZmllbGQpOworICAgICAgICAgICAgcHV0KGJpbiwgInVpbnQ4IiwgV0FTTS5leHRlcm5hbEtp
bmRWYWx1ZVtlbnRyeS5raW5kXSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LmtpbmQpIHsK
KyAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJv
YmxlbTogdW5leHBlY3RlZCBraW5kICR7ZW50cnkua2luZH1gKTsKKyAgICAgICAgICAgIGNhc2Ug
IkZ1bmN0aW9uIjogcHV0KGJpbiwgInZhcnVpbnQiLCBlbnRyeS50eXBlKTsgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlICJUYWJsZSI6IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRl
ZGApOworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0
IGltcGxlbWVudGVkYCk7CisgICAgICAgICAgICBjYXNlICJHbG9iYWwiOiB0aHJvdyBuZXcgRXJy
b3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0sCisgICAgRnVuY3Rpb246IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBO
b3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgVGFibGU6IChzZWN0aW9uLCBiaW4pID0+IHsg
dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgTWVtb3J5OiAo
c2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGAp
OyB9LAorICAgIEdsb2JhbDogKHNlY3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYE5v
dCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBFeHBvcnQ6IChzZWN0aW9uLCBiaW4pID0+IHsg
dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgU3RhcnQ6IChz
ZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7
IH0sCisgICAgRWxlbWVudDogKHNlY3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYE5v
dCB5ZXQgaW1wbGVtZW50ZWRgKTsgfSwKKyAgICBDb2RlOiAoc2VjdGlvbiwgYmluKSA9PiB7Cisg
ICAgICAgIHB1dChiaW4sICJ2YXJ1aW50Iiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7CisgICAgICAg
IGZvciAoY29uc3QgZnVuYyBvZiBzZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAgIGxldCBmdW5j
QmluID0gYmluLm5ld1BhdGNoYWJsZSgidmFydWludCIpOworICAgICAgICAgICAgY29uc3QgbG9j
YWxDb3VudCA9IGZ1bmMubG9jYWxzLmxlbmd0aDsKKyAgICAgICAgICAgIHB1dChmdW5jQmluLCAi
dmFydWludCIsIGxvY2FsQ291bnQpOworICAgICAgICAgICAgaWYgKGxvY2FsQ291bnQgIT09IDAp
IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogbG9jYWxzYCk7IC8vIEZJWE1FIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKKyAgICAgICAgICAgIGZv
ciAoY29uc3Qgb3Agb2YgZnVuYy5jb2RlKSB7CisgICAgICAgICAgICAgICAgcHV0KGZ1bmNCaW4s
ICJ1aW50OCIsIG9wLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAob3AuYXJndW1lbnRzLmxl
bmd0aCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBhcmd1bWVudHNgKTsg
Ly8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjcwNgor
ICAgICAgICAgICAgICAgIGlmIChvcC5pbW1lZGlhdGVzLmxlbmd0aCAhPT0gMCkgdGhyb3cgbmV3
IEVycm9yKGBVbmltcGxlbWVudGVkOiBpbW1lZGlhdGVzYCk7IC8vIEZJWE1FIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZ1bmNCaW4uYXBwbHkoKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgRGF0YTogKHNl
Y3Rpb24sIGJpbikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsg
fSwKK307CisKK2V4cG9ydCBjb25zdCBCaW5hcnkgPSAocHJlYW1ibGUsIHNlY3Rpb25zKSA9PiB7
CisgICAgbGV0IHdhc21CaW4gPSBuZXcgTG93TGV2ZWxCaW5hcnkoKTsKKyAgICBmb3IgKGNvbnN0
IHAgb2YgV0FTTS5kZXNjcmlwdGlvbi5wcmVhbWJsZSkKKyAgICAgICAgcHV0KHdhc21CaW4sIHAu
dHlwZSwgcHJlYW1ibGVbcC5uYW1lXSk7CisgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rp
b25zKSB7CisgICAgICAgIHB1dCh3YXNtQmluLCBXQVNNLnNlY3Rpb25FbmNvZGluZ1R5cGUsIHNl
Y3Rpb24uaWQpOworICAgICAgICBsZXQgc2VjdGlvbkJpbiA9IHdhc21CaW4ubmV3UGF0Y2hhYmxl
KCJ2YXJ1aW50Iik7CisgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSBlbWl0dGVyc1tzZWN0aW9uLm5h
bWVdOworICAgICAgICBpZiAoZW1pdHRlcikKKyAgICAgICAgICAgIGVtaXR0ZXIoc2VjdGlvbiwg
c2VjdGlvbkJpbik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gVW5rbm93biBzZWN0
aW9uLgorICAgICAgICAgICAgcHV0KHNlY3Rpb25CaW4sICJzdHJpbmciLCBzZWN0aW9uLm5hbWUp
OworICAgICAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIHNlY3Rpb24uZGF0YSkKKyAgICAgICAg
ICAgICAgICBwdXQoc2VjdGlvbkJpbiwgInVpbnQ4IiwgYnl0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgc2VjdGlvbkJpbi5hcHBseSgpOworICAgIH0KKyAgICByZXR1cm4gd2FzbUJpbjsKK307CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vTG93TGV2ZWxCaW5hcnkuanMgYi9KU1Rlc3RzL3dhc20v
TG93TGV2ZWxCaW5hcnkuanMKaW5kZXggMGE4MzNjMS4uNzIwMDk3NiAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy93YXNtL0xvd0xldmVsQmluYXJ5LmpzCisrKyBiL0pTVGVzdHMvd2FzbS9Mb3dMZXZlbEJp
bmFyeS5qcwpAQCAtMjcsNiArMjcsOCBAQCBjb25zdCBfaW5pdGlhbEFsbG9jYXRpb25TaXplID0g
MTAyNDsKIGNvbnN0IF9ncm93QWxsb2NhdGlvblNpemUgPSBhbGxvY2F0ZWQgPT4gYWxsb2NhdGVk
ICogMjsKIAogZXhwb3J0IGNvbnN0IHZhcnVpbnRNaW4gPSAwOworZXhwb3J0IGNvbnN0IHZhcmlu
dDdNaW4gPSAtMGIxMDAwMDAwOworZXhwb3J0IGNvbnN0IHZhcmludDdNYXggPSAwYjExMTExMTsK
IGV4cG9ydCBjb25zdCB2YXJ1aW50N01heCA9IDBiMTExMTExMTsKIGV4cG9ydCBjb25zdCB2YXJ1
aW50TWF4ID0gKCgoKDEgPDwgMzEpID4+PiAwKSAtIDEpICogMikgKyAxOwogZXhwb3J0IGNvbnN0
IHZhcmludE1pbiA9IC0oKDEgPDwgMzEpID4+PiAwKTsKQEAgLTEyOSw2ICsxMzEsMTYgQEAgZXhw
b3J0IGRlZmF1bHQgY2xhc3MgTG93TGV2ZWxCaW5hcnkgewogICAgICAgICAgICAgdGhpcy51aW50
OCgweDgwIHwgYik7CiAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgIH0KKyAgICB2YXJ1aW50
MSh2KSB7CisgICAgICAgIGlmICh2ICE9PSAwICYmIHYgIT09IDEpCisgICAgICAgICAgICB0aHJv
dyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB2YXJ1aW50MSAke3Z9IHJhbmdlIGlzIFswLCAxXWAp
OworICAgICAgICB0aGlzLnZhcnVpbnQodik7CisgICAgfQorICAgIHZhcmludDcodikgeworICAg
ICAgICBpZiAodiA8IHZhcmludDdNaW4gfHwgdmFyaW50N01heCA8IHYpCisgICAgICAgICAgICB0
aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB2YXJpbnQ3ICR7dn0gcmFuZ2UgaXMgWyR7dmFy
aW50N01pbn0sICR7dmFyaW50N01heH1dYCk7CisgICAgICAgIHRoaXMudmFyaW50KHYpOworICAg
IH0KICAgICB2YXJ1aW50Nyh2KSB7CiAgICAgICAgIGlmICh2IDwgdmFydWludE1pbiB8fCB2YXJ1
aW50N01heCA8IHYpCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB2
YXJ1aW50NyAke3Z9IHJhbmdlIGlzIFske3ZhcnVpbnRNaW59LCAke3ZhcnVpbnQ3TWF4fV1gKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9XQVNNLmpzIGIvSlNUZXN0cy93YXNtL1dBU00uanMK
aW5kZXggOGU3YjdlZi4uZDhlYWVmNiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL1dBU00uanMK
KysrIGIvSlNUZXN0cy93YXNtL1dBU00uanMKQEAgLTI1LDkgKzI1LDE4IEBACiAKIGltcG9ydCAq
IGFzIHV0aWxpdGllcyBmcm9tICd1dGlsaXRpZXMuanMnOwogCitjb25zdCBfbWFwVmFsdWVzID0g
ZnJvbSA9PiB7CisgICAgbGV0IHZhbHVlcyA9IHt9OworICAgIGZvciAoY29uc3Qga2V5IGluIGZy
b20pCisgICAgICAgIHZhbHVlc1trZXldID0gZnJvbVtrZXldLnZhbHVlOworICAgIHJldHVybiB2
YWx1ZXM7Cit9OworCiBleHBvcnQgY29uc3QgZGVzY3JpcHRpb24gPSB1dGlsaXRpZXMuanNvbigi
d2FzbS5qc29uIik7CiBleHBvcnQgY29uc3QgdmFsdWVUeXBlID0gT2JqZWN0LmtleXMoZGVzY3Jp
cHRpb24udmFsdWVfdHlwZSk7CiBjb25zdCBfdmFsdWVUeXBlU2V0ID0gbmV3IFNldCh2YWx1ZVR5
cGUpOwogZXhwb3J0IGNvbnN0IGlzVmFsaWRWYWx1ZVR5cGUgPSB2ID0+IF92YWx1ZVR5cGVTZXQu
aGFzKHYpOworZXhwb3J0IGNvbnN0IHZhbHVlVHlwZVZhbHVlID0gX21hcFZhbHVlcyhkZXNjcmlw
dGlvbi52YWx1ZV90eXBlKTsKK2V4cG9ydCBjb25zdCBleHRlcm5hbEtpbmRWYWx1ZSA9IF9tYXBW
YWx1ZXMoZGVzY3JpcHRpb24uZXh0ZXJuYWxfa2luZCk7CiBleHBvcnQgY29uc3Qgc2VjdGlvbnMg
PSBPYmplY3Qua2V5cyhkZXNjcmlwdGlvbi5zZWN0aW9uKTsKIGV4cG9ydCBjb25zdCBzZWN0aW9u
RW5jb2RpbmdUeXBlID0gZGVzY3JpcHRpb24uc2VjdGlvbltzZWN0aW9uc1swXV0udHlwZTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9hc3NlcnQuanMgYi9KU1Rlc3RzL3dhc20vYXNzZXJ0Lmpz
CmluZGV4IDJlYTVmNzAuLjAyYzVhN2EgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9hc3NlcnQu
anMKKysrIGIvSlNUZXN0cy93YXNtL2Fzc2VydC5qcwpAQCAtMjMsMjYgKzIzLDc0IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLWNvbnN0IF9ub3RVbmRlZiA9ICh2KSA9PiB7Ci0gICAgaWYgKHR5
cGVvZiB2ID09PSAidW5kZWZpbmVkIikKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaG91bGRu
J3QgYmUgdW5kZWZpbmVkIik7Citjb25zdCBfZmFpbCA9IChtc2csIGV4dHJhKSA9PiB7CisgICAg
dGhyb3cgbmV3IEVycm9yKG1zZyArIChleHRyYSA/ICI6ICIgKyBleHRyYSA6ICIiKSk7CiB9Owog
Ci1jb25zdCBfaXNVbmRlZiA9ICh2KSA9PiB7Ci0gICAgaWYgKHR5cGVvZiB2ICE9PSAidW5kZWZp
bmVkIikKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaG91bGQgYmUgdW5kZWZpbmVkIik7Citl
eHBvcnQgY29uc3QgaXNOb3RBID0gKHYsIHQsIG1zZykgPT4geworICAgIGlmICh0eXBlb2YgdiA9
PT0gdCkKKyAgICAgICAgX2ZhaWwoYFNob3VsZG4ndCBiZSAke3R9YCwgbXNnKTsKIH07CiAKLWNv
bnN0IF9lcSA9IChsaHMsIHJocykgPT4gewotICAgIGlmIChsaHMgIT09IHJocykKLSAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGBOb3QgdGhlIHNhbWU6ICIke2xoc30iIGFuZCAiJHtyaHN9ImApOwor
ZXhwb3J0IGNvbnN0IGlzQSA9ICh2LCB0LCBtc2cpID0+IHsKKyAgICBpZiAodHlwZW9mIHYgIT09
IHQpCisgICAgICAgIF9mYWlsKGBTaG91bGQgYmUgJHt0fSwgZ290ICR7dHlwZW9mKHYpfWAsIG1z
Zyk7CiB9OwogCi1jb25zdCBfZ2UgPSAobGhzLCByaHMpID0+IHsKLSAgICBfbm90VW5kZWYobGhz
KTsKLSAgICBfbm90VW5kZWYocmhzKTsKK2V4cG9ydCBjb25zdCBpc05vdFVuZGVmID0gKHYsIG1z
ZykgPT4gaXNOb3RBKHYsICJ1bmRlZmluZWQiLCBtc2cpOworZXhwb3J0IGNvbnN0IGlzVW5kZWYg
PSAodiwgbXNnKSA9PiBpc0EodiwgInVuZGVmaW5lZCIsIG1zZyk7CitleHBvcnQgY29uc3Qgbm90
T2JqZWN0ID0gKHYsIG1zZykgPT4gaXNOb3RBKHYsICJvYmplY3QiLCBtc2cpOworZXhwb3J0IGNv
bnN0IGlzT2JqZWN0ID0gKHYsIG1zZykgPT4gaXNBKHYsICJvYmplY3QiLCBtc2cpOworZXhwb3J0
IGNvbnN0IG5vdFN0cmluZyA9ICh2LCBtc2cpID0+IGlzTm90QSh2LCAic3RyaW5nIiwgbXNnKTsK
K2V4cG9ydCBjb25zdCBpc1N0cmluZyA9ICh2LCBtc2cpID0+IGlzQSh2LCAic3RyaW5nIiwgbXNn
KTsKK2V4cG9ydCBjb25zdCBub3ROdW1iZXIgPSAodiwgbXNnKSA9PiBpc05vdEEodiwgIm51bWJl
ciIsIG1zZyk7CitleHBvcnQgY29uc3QgaXNOdW1iZXIgPSAodiwgbXNnKSA9PiBpc0EodiwgIm51
bWJlciIsIG1zZyk7CisKK2V4cG9ydCBjb25zdCBoYXNPYmplY3RQcm9wZXJ0eSA9IChvLCBwLCBt
c2cpID0+IHsKKyAgICBpc09iamVjdChvLCBtc2cpOworICAgIGlzTm90VW5kZWYob1twXSwgbXNn
LCBgZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgcHJvcGVydHkgJHtwfWApOworfTsKKworZXhwb3J0
IGNvbnN0IGlzQXJyYXkgPSAodiwgbXNnKSA9PiB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KHYp
KQorICAgICAgICBfZmFpbChgRXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAke3R5cGVvZih2KX1gLCBt
c2cpOworfTsKKworZXhwb3J0IGNvbnN0IGlzTm90QXJyYXkgPSAodiwgbXNnKSA9PiB7CisgICAg
aWYgKEFycmF5LmlzQXJyYXkodikpCisgICAgICAgIF9mYWlsKGBFeHBlY3RlZCB0byBub3QgYmUg
YW4gYXJyYXlgLCBtc2cpOworfTsKKworZXhwb3J0IGNvbnN0IHRydXRoeSA9ICh2LCBtc2cpID0+
IHsKKyAgICBpZiAoIXYpCisgICAgICAgIF9mYWlsKGBFeHBlY3RlZCB0cnV0aHlgLCBtc2cpOwor
fTsKKworZXhwb3J0IGNvbnN0IGZhbHN5ID0gKHYsIG1zZykgPT4geworICAgIGlmICh2KQorICAg
ICAgICBfZmFpbChgRXhwZWN0ZWQgZmFsc3lgLCBtc2cpOworfTsKKworZXhwb3J0IGNvbnN0IGVx
ID0gKGxocywgcmhzLCBtc2cpID0+IHsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShsaHMpICYmIEFy
cmF5LmlzQXJyYXkocmhzKSAmJiAobGhzLmxlbmd0aCA9PT0gcmhzLmxlbmd0aCkpIHsKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IGxocy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGVx
KGxoc1tpXSwgcmhzW2ldLCBtc2cpOworICAgIH0gZWxzZSBpZiAobGhzICE9PSByaHMpCisgICAg
ICAgIF9mYWlsKGBOb3QgdGhlIHNhbWU6ICIke2xoc30iIGFuZCAiJHtyaHN9ImAsIG1zZyk7Cit9
OworCitleHBvcnQgY29uc3QgZ2UgPSAobGhzLCByaHMsIG1zZykgPT4geworICAgIGlzTm90VW5k
ZWYobGhzKTsKKyAgICBpc05vdFVuZGVmKHJocyk7CiAgICAgaWYgKCEobGhzID49IHJocykpCi0g
ICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQ6ICIke2xoc30iIDwgIiR7cmhzfSJgKTsK
KyAgICAgICAgX2ZhaWwoYEV4cGVjdGVkOiAiJHtsaHN9IiA8ICIke3Joc30iYCwgbXNnKTsKK307
CisKK2V4cG9ydCBjb25zdCBsZSA9IChsaHMsIHJocywgbXNnKSA9PiB7CisgICAgaXNOb3RVbmRl
ZihsaHMpOworICAgIGlzTm90VW5kZWYocmhzKTsKKyAgICBpZiAoIShsaHMgPD0gcmhzKSkKKyAg
ICAgICAgX2ZhaWwoYEV4cGVjdGVkOiAiJHtsaHN9IiA+ICIke3Joc30iYCwgbXNnKTsKIH07CiAK
IGNvbnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewpAQCAt
NTEsMTkgKzk5LDE4IEBAIGNvbnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4u
YXJncykgPT4gewogICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB0
eXBlICYmIGUubWVzc2FnZSA9PT0gbWVzc2FnZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byB0aHJvdyBhICR7dHlwZS5uYW1lfSB3aXRo
IG1lc3NhZ2UgIiR7bWVzc2FnZX0iLCBnb3QgJHtlLm5hbWV9IHdpdGggbWVzc2FnZSAiJHtlLm1l
c3NhZ2V9ImApOworICAgICAgICBfZmFpbChgRXhwZWN0ZWQgdG8gdGhyb3cgYSAke3R5cGUubmFt
ZX0gd2l0aCBtZXNzYWdlICIke21lc3NhZ2V9IiwgZ290ICR7ZS5uYW1lfSB3aXRoIG1lc3NhZ2Ug
IiR7ZS5tZXNzYWdlfSJgKTsKICAgICB9Ci0gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0
byB0aHJvdyBhICR7dHlwZS5uYW1lfSB3aXRoIG1lc3NhZ2UgIiR7bWVzc2FnZX0iYCk7CisgICAg
X2ZhaWwoYEV4cGVjdGVkIHRvIHRocm93IGEgJHt0eXBlLm5hbWV9IHdpdGggbWVzc2FnZSAiJHtt
ZXNzYWdlfSJgKTsKIH07CiAKLWNvbnN0IF9pbnN0YW5jZW9mID0gKG9iaiwgdHlwZSkgPT4gb2Jq
IGluc3RhbmNlb2YgdHlwZTsKK2NvbnN0IF9pbnN0YW5jZW9mID0gKG9iaiwgdHlwZSwgbXNnKSA9
PiB7CisgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgdHlwZSkpCisgICAgICAgIF9mYWlsKGBFeHBl
Y3RlZCBhICR7dHlwZW9mKHR5cGUpfSwgZ290ICR7dHlwZW9mIG9ian1gKTsKK307CiAKIC8vIFVz
ZSB1bmRlcnNjb3JlIG5hbWVzIHRvIGF2b2lkIGNsYXNoaW5nIHdpdGggYnVpbHRpbiBuYW1lcy4K
IGV4cG9ydCB7Ci0gICAgX25vdFVuZGVmIGFzIG5vdFVuZGVmLAotICAgIF9pc1VuZGVmIGFzIGlz
VW5kZWYsCi0gICAgX2VxIGFzIGVxLAotICAgIF9nZSBhcyBnZSwKICAgICBfdGhyb3dzIGFzIHRo
cm93cywKICAgICBfaW5zdGFuY2VvZiBhcyBpbnN0YW5jZW9mLAogfTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9Nb2R1bGUuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rl
c3RfTW9kdWxlLmpzCmluZGV4IDgyMWRhODQuLjk0ZGIxYTQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS9qcy1hcGkvdGVzdF9Nb2R1bGUuanMKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0
X01vZHVsZS5qcwpAQCAtNywzICs3LDEzIEBAIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnOwogICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
ICAgICBhc3NlcnQuaW5zdGFuY2VvZihtb2R1bGUsIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CiB9KSgp
OworCisoZnVuY3Rpb24gTW9kdWxlV2l0aEltcG9ydHMoKSB7CisgICAgY29uc3QgYnVpbGRlciA9
IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYmFyIiwgeyBwYXJhbXM6IFtdIH0pCisg
ICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0
KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworfSko
KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMgYi9K
U1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCmluZGV4IDA1NGVhZWYuLjgwZWNl
MjkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKKysr
IGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwpAQCAtMjgsNyArMjgsNyBA
QCBjb25zdCBjb25zdHJ1Y3RvclByb3BlcnRpZXMgPSB7CiB9OwogCiAKLWFzc2VydC5ub3RVbmRl
ZihXZWJBc3NlbWJseSk7Cithc3NlcnQuaXNOb3RVbmRlZihXZWJBc3NlbWJseSk7CiBjaGVja093
blByb3BlcnR5RGVzY3JpcHRvcih1dGlsaXRpZXMuZ2xvYmFsLCAiV2ViQXNzZW1ibHkiLCB7IHR5
cGVvZnZhbHVlOiAib2JqZWN0Iiwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwg
ZW51bWVyYWJsZTogZmFsc2UgfSk7CiBhc3NlcnQuZXEoU3RyaW5nKFdlYkFzc2VtYmx5KSwgIltv
YmplY3QgV2ViQXNzZW1ibHldIik7CiBhc3NlcnQuaXNVbmRlZihXZWJBc3NlbWJseS5sZW5ndGgp
OwpAQCAtMzcsMTMgKzM3LDEzIEBAIGFzc2VydC50aHJvd3MoKCkgPT4gV2ViQXNzZW1ibHkoKSwg
VHlwZUVycm9yLCBgV2ViQXNzZW1ibHkgaXMgbm90IGEgZnVuY3Rpb24uIChJCiBhc3NlcnQudGhy
b3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseSgpLCBUeXBlRXJyb3IsIGBXZWJBc3NlbWJseSBpcyBu
b3QgYSBjb25zdHJ1Y3RvciAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5KCknKWApOwogCiBm
b3IgKGNvbnN0IGYgaW4gZnVuY3Rpb25Qcm9wZXJ0aWVzKSB7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVm
KFdlYkFzc2VtYmx5W2ZdKTsKKyAgICBhc3NlcnQuaXNOb3RVbmRlZihXZWJBc3NlbWJseVtmXSk7
CiAgICAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5W2ZdLm5hbWUsIGYpOwogICAgIGFzc2VydC5lcShX
ZWJBc3NlbWJseVtmXS5sZW5ndGgsIGZ1bmN0aW9uUHJvcGVydGllc1tmXS5sZW5ndGgpOwogfQog
CiBmb3IgKGNvbnN0IGMgaW4gY29uc3RydWN0b3JQcm9wZXJ0aWVzKSB7Ci0gICAgYXNzZXJ0Lm5v
dFVuZGVmKFdlYkFzc2VtYmx5W2NdKTsKKyAgICBhc3NlcnQuaXNOb3RVbmRlZihXZWJBc3NlbWJs
eVtjXSk7CiAgICAgYXNzZXJ0LmVxKFdlYkFzc2VtYmx5W2NdLm5hbWUsIGMpOwogICAgIGFzc2Vy
dC5lcShXZWJBc3NlbWJseVtjXS5sZW5ndGgsIGNvbnN0cnVjdG9yUHJvcGVydGllc1tjXS5sZW5n
dGgpOwogICAgIGNoZWNrT3duUHJvcGVydHlEZXNjcmlwdG9yKFdlYkFzc2VtYmx5LCBjLCBjb25z
dHJ1Y3RvclByb3BlcnRpZXNbY10pOwpAQCAtNjYsNyArNjYsNyBAQCBmb3IgKGNvbnN0IGMgaW4g
Y29uc3RydWN0b3JQcm9wZXJ0aWVzKSB7CiAgICAgICAgIGFzc2VydC5pbnN0YW5jZW9mKGluc3Rh
bmNlLCBXZWJBc3NlbWJseS5JbnN0YW5jZSk7CiAgICAgICAgIGZvciAoY29uc3QgaW52YWxpZCBv
ZiBpbnZhbGlkSW5zdGFuY2VJbXBvcnRzKQogICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9
PiBuZXcgV2ViQXNzZW1ibHlbY10obmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVsZUFy
cmF5KSwgaW52YWxpZCksIFR5cGVFcnJvciwgYHNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJs
eS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QgKGV2YWx1YXRpbmcgJ25l
dyBXZWJBc3NlbWJseVtjXShuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGVtcHR5TW9kdWxlQXJyYXkp
LCBpbnZhbGlkKScpYCk7Ci0gICAgICAgIGFzc2VydC5ub3RVbmRlZihpbnN0YW5jZS5leHBvcnRz
KTsKKyAgICAgICAgYXNzZXJ0LmlzTm90VW5kZWYoaW5zdGFuY2UuZXhwb3J0cyk7CiAgICAgICAg
IGNoZWNrT3duUHJvcGVydHlEZXNjcmlwdG9yKGluc3RhbmNlLCAiZXhwb3J0cyIsIHsgdHlwZW9m
dmFsdWU6ICJvYmplY3QiLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVt
ZXJhYmxlOiB0cnVlIH0pOwogICAgICAgICBhc3NlcnQuaXNVbmRlZihpbnN0YW5jZS5leHBvcnRz
Ll9fcHJvdG9fXyk7CiAgICAgICAgIGFzc2VydC5lcShSZWZsZWN0LmlzRXh0ZW5zaWJsZShpbnN0
YW5jZS5leHBvcnRzKSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVz
dC90ZXN0X0J1aWxkZXJKU09OLmpzIGIvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxk
ZXJKU09OLmpzCmluZGV4IDA5MzQyMzEuLmVlYzNiZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcworKysgYi9KU1Rlc3RzL3dhc20vc2VsZi10
ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMKQEAgLTIsMTcgKzIsMTcgQEAgaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVy
LmpzJzsKIAogY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewotICAg
IGxldCBmID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpOworICAgIGxldCBmID0g
KG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKTsKICAgICBhc3Nl
cnQudGhyb3dzKG9wRm4sIEVycm9yLCBtZXNzYWdlLCBmKTsKIH07CiAKIChmdW5jdGlvbiBFbXB0
eU1vZHVsZSgpIHsKICAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKICAgICBjb25zdCBqID0g
SlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGoucHJlYW1ibGUpOwot
ICAgIGFzc2VydC5ub3RVbmRlZihqLnByZWFtYmxlWyJtYWdpYyBudW1iZXIiXSk7Ci0gICAgYXNz
ZXJ0Lm5vdFVuZGVmKGoucHJlYW1ibGUudmVyc2lvbik7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGou
c2VjdGlvbik7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoai5wcmVhbWJsZSk7CisgICAgYXNzZXJ0
LmlzTm90VW5kZWYoai5wcmVhbWJsZVsibWFnaWMgbnVtYmVyIl0pOworICAgIGFzc2VydC5pc05v
dFVuZGVmKGoucHJlYW1ibGUudmVyc2lvbik7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoai5zZWN0
aW9uKTsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMCk7CiB9KSgpOwogCkBAIC0y
MCwxNCArMjAsMTQgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4g
ewogICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuc2V0UHJlYW1ibGUoeyAibWFnaWMgbnVt
YmVyIjogMTMzNyB9KTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CiAgICAg
YXNzZXJ0LmVxKGoucHJlYW1ibGVbIm1hZ2ljIG51bWJlciJdLCAxMzM3KTsKLSAgICBhc3NlcnQu
bm90VW5kZWYoai5wcmVhbWJsZS52ZXJzaW9uKTsKKyAgICBhc3NlcnQuaXNOb3RVbmRlZihqLnBy
ZWFtYmxlLnZlcnNpb24pOwogfSkoKTsKIAogKGZ1bmN0aW9uIEN1c3RvbVZlcnNpb24oKSB7CiAg
ICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5zZXRQcmVhbWJsZSh7ICJ2ZXJzaW9uIjogMTMz
NyB9KTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CiAgICAgYXNzZXJ0LmVx
KGoucHJlYW1ibGVbInZlcnNpb24iXSwgMTMzNyk7Ci0gICAgYXNzZXJ0Lm5vdFVuZGVmKGoucHJl
YW1ibGUudmVyc2lvbik7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYoai5wcmVhbWJsZS52ZXJzaW9u
KTsKIH0pKCk7CiAKIChmdW5jdGlvbiBDdXN0b21TZWN0aW9uKCkgewpAQCAtNTcsMTUgKzU3LDgg
QEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogfSkoKTsKIAog
KGZ1bmN0aW9uIEN1c3RvbVNlY3Rpb25JbnZhbGlkQnl0ZSgpIHsKLSAgICBjb25zdCBiID0gbmV3
IEJ1aWxkZXIoKTsKLSAgICBsZXQgdSA9IGIuVW5rbm93bigiY3VzdG9tIHNlY3Rpb24iKTsKLSAg
ICB0cnkgewotICAgICAgICB1LkJ5dGUoMHhGRiArIDEpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAg
ICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSB7IHJldHVybjsgfQotICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgUmFuZ2VFcnJvciwgZ290ICR7ZX1gKTsKLSAgICB9
Ci0gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byB0aHJvdyBhIFJhbmdlRXJyb3JgKTsK
KyAgICBjb25zdCB1ID0gKG5ldyBCdWlsZGVyKCkpLlVua25vd24oImN1c3RvbSBzZWN0aW9uIik7
CisgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1LkJ5dGUoMHhGRiArIDEpLCBFcnJvciwgYE5vdCB0
aGUgc2FtZTogIjAiIGFuZCAiMjU2IjogVW5rbm93biBzZWN0aW9uIGV4cGVjdGVkIGJ5dGUsIGdv
dDogIjI1NiJgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBUd29DdXN0b21TZWN0aW9ucygpIHsKQEAg
LTg2LDYgKzc5LDE2OCBAQCBjb25zdCBhc3NlcnRPcFRocm93cyA9IChvcEZuLCBtZXNzYWdlKSA9
PiB7CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLCAweDExKTsKIH0pKCk7CiAK
KyhmdW5jdGlvbiBTZWN0aW9uc1dpdGhTYW1lQ3VzdG9tTmFtZSgpIHsKKyAgICBjb25zdCBiID0g
KG5ldyBCdWlsZGVyKCkpLlVua25vd24oImZvbyIpLkVuZCgpOworICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gYi5Vbmtub3duKCJmb28iKSwgRXJyb3IsIGBFeHBlY3RlZCBmYWxzeTogQ2Fubm90IGhh
dmUgdHdvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSAiZm9vIiBhbmQgSUQgMGApOworfSko
KTsKKworKGZ1bmN0aW9uIEVtcHR5VHlwZVNlY3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChuZXcg
QnVpbGRlcigpKS5UeXBlKCkuRW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29u
KCkpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb24ubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLm5hbWUsICJUeXBlIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhLmxlbmd0aCwgMCk7Cit9KSgpOworCisoZnVuY3Rpb24gVHdvVHlwZVNlY3Rpb25zKCkgewor
ICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgpOworICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gYi5UeXBlKCksIEVycm9yLCBgRXhwZWN0ZWQgZmFsc3k6IENhbm5vdCBoYXZl
IHR3byBzZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgIlR5cGUiIGFuZCBJRCAxYCk7Cit9KSgp
OworCisoZnVuY3Rpb24gU2ltcGxlVHlwZVNlY3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChuZXcg
QnVpbGRlcigpKS5UeXBlKCkKKyAgICAgICAgICAgIC5GdW5jKFtdKQorICAgICAgICAgICAgLkZ1
bmMoW10sICJ2b2lkIikKKyAgICAgICAgICAgIC5GdW5jKFtdLCAiaTMyIikKKyAgICAgICAgICAg
IC5GdW5jKFtdLCAiaTY0IikKKyAgICAgICAgICAgIC5GdW5jKFtdLCAiZjMyIikKKyAgICAgICAg
ICAgIC5GdW5jKFtdLCAiZjY0IikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImk2NCIsICJm
MzIiLCAiZjY0Il0pCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShi
Lmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgNyk7Cisg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzFdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YVsxXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRh
WzJdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5yZXQs
ICJpMzIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbM10ucGFyYW1zLCBbXSk7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzNdLnJldCwgImk2NCIpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVs0XS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbNF0ucmV0LCAiZjMyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzVdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YVs1XS5yZXQsICJmNjQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbNl0ucGFy
YW1zLCBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCJdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzBdLmRhdGFbNl0ucmV0LCAidm9pZCIpOworfSkoKTsKKworKGZ1bmN0aW9uIEVtcHR5SW1w
b3J0U2VjdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkltcG9ydCgpLkVu
ZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5uYW1lLCAi
SW1wb3J0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMCk7Cit9
KSgpOworCisoZnVuY3Rpb24gSW1wb3J0QmVmb3JlVHlwZVNlY3Rpb25zKCkgeworICAgIGNvbnN0
IGIgPSAobmV3IEJ1aWxkZXIoKSkuSW1wb3J0KCkuRW5kKCk7CisgICAgYXNzZXJ0LnRocm93cygo
KSA9PiBiLlR5cGUoKSwgRXJyb3IsIGBFeHBlY3RlZDogIjIiID4gIjEiOiBCYWQgc2VjdGlvbiBv
cmRlcmluZzogIkltcG9ydCIgY2Fubm90IHByZWNlZGUgIlR5cGUiYCk7Cit9KSgpOworCisoZnVu
Y3Rpb24gSW1wb3J0RnVuY3Rpb25XaXRob3V0VHlwZVNlY3Rpb24oKSB7CisgICAgY29uc3QgaSA9
IChuZXcgQnVpbGRlcigpKS5JbXBvcnQoKTsKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGkuRnVu
Y3Rpb24oImZvbyIsICJiYXIiLCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVkOiBD
YW4ndCB1c2UgdHlwZSAwIGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbldpdGhJbnZhbGlkVHlwZSgpIHsKKyAgICBjb25z
dCBpID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5JbXBvcnQoKTsKKyAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IGkuRnVuY3Rpb24oImZvbyIsICJiYXIiLCAwKSwgRXJyb3IsIGBTaG91bGRu
J3QgYmUgdW5kZWZpbmVkOiBUeXBlIDAgZG9lc24ndCBleGlzdCBpbiB0eXBlIHNlY3Rpb25gKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBJbXBvcnRGdW5jdGlvbigpIHsKKyAgICBjb25zdCBiID0gKG5l
dyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRnVuYyhbXSkuRW5kKCkKKyAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJiYXIiLCAwKQorICAgICAgICAu
RW5kKCk7CisgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVswXS5tb2R1bGUsICJmb28iKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0uZmllbGQsICJiYXIiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
dHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmtpbmQsICJGdW5j
dGlvbiIpOworfSkoKTsKKworKGZ1bmN0aW9uIEltcG9ydEZ1bmN0aW9uc1dpdGhFeGlzdGluZ1R5
cGVzKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKQor
ICAgICAgICAgICAgLkZ1bmMoW10pCisgICAgICAgICAgICAuRnVuYyhbXSwgImkzMiIpCisgICAg
ICAgICAgICAuRnVuYyhbImk2NCIsICJpMzIiXSkKKyAgICAgICAgICAgIC5GdW5jKFsiaTY0Iiwg
Imk2NCJdKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkKKyAgICAgICAgICAgIC5GdW5j
dGlvbigiZm9vIiwgImJheiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCAiYm9vIiwgeyBwYXJhbXM6IFsiaTY0IiwgImk2NCJdIH0pCisg
ICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgNCk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMyk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLnR5cGUsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsxXS50eXBl
LCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0udHlwZSwgMyk7Cit9KSgp
OworCisoZnVuY3Rpb24gSW1wb3J0RnVuY3Rpb25XaXRoTmV3VHlwZSgpIHsKKyAgICBjb25zdCBi
ID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9y
dCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgImJheiIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCAiYm9vIiwgeyBwYXJhbXM6IFsi
aTY0IiwgImk2NCJdIH0pCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJz
ZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhLmxlbmd0aCwgMyk7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnJldCwgInZvaWQiKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1zLCBbXSk7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzFdLnJldCwgImkzMiIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMF0uZGF0YVsxXS5wYXJhbXMsIFtdKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMl0ucmV0LCAidm9pZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVsyXS5w
YXJhbXMsIFsiaTY0IiwgImk2NCJdKTsKK30pKCk7CisKKyhmdW5jdGlvbiBFbXB0eUV4cG9ydFNl
Y3Rpb24oKSB7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5FeHBvcnQoKS5FbmQoKTsK
KyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7CisgICAgYXNzZXJ0LmVxKGouc2Vj
dGlvbi5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkV4cG9y
dCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDApOworfSkoKTsK
KworKGZ1bmN0aW9uIEV4cG9ydEZ1bmN0aW9uV2l0aG91dFR5cGVTZWN0aW9uKCkgeworICAgIGNv
bnN0IGUgPSAobmV3IEJ1aWxkZXIoKSkuRXhwb3J0KCk7CisgICAgYXNzZXJ0LnRocm93cygoKSA9
PiBlLkZ1bmN0aW9uKCJmb28iLCAwLCAwKSwgRXJyb3IsIGBTaG91bGRuJ3QgYmUgdW5kZWZpbmVk
OiBDYW4ndCB1c2UgdHlwZSAwIGlmIGEgdHlwZSBzZWN0aW9uIGlzbid0IHByZXNlbnRgKTsKK30p
KCk7CisKKyhmdW5jdGlvbiBFeHBvcnRGdW5jdGlvbldpdGhJbnZhbGlkVHlwZSgpIHsKKyAgICBj
b25zdCBlID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5FeHBvcnQoKTsKKyAgICBhc3Nl
cnQudGhyb3dzKCgpID0+IGUuRnVuY3Rpb24oImZvbyIsIDAsIDApLCBFcnJvciwgYFNob3VsZG4n
dCBiZSB1bmRlZmluZWQ6IFR5cGUgMCBkb2Vzbid0IGV4aXN0IGluIHR5cGUgc2VjdGlvbmApOwor
fSkoKTsKKworKGZ1bmN0aW9uIEV4cG9ydEFuSW1wb3J0KCkgeworICAgIGNvbnN0IGIgPSAobmV3
IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuRnVu
Y3Rpb24oImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpLkZ1bmN0aW9uKCJFeHBvcnRBbkltcG9ydCIsIHsgbW9kdWxlOiAiZm9vIiwgZmllbGQ6ICJi
YXIiIH0pLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzJdLm5hbWUsICJFeHBvcnQiKTsKKyAgICBhc3NlcnQuZXEoai5z
ZWN0aW9uWzJdLmRhdGEubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRh
dGFbMF0uZmllbGQsICJFeHBvcnRBbkltcG9ydCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
Ml0uZGF0YVswXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzJdLmRhdGFbMF0u
aW5kZXgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMl0uZGF0YVswXS5raW5kLCAiRnVu
Y3Rpb24iKTsKK30pKCk7CisKKyhmdW5jdGlvbiBFeHBvcnRNaXNtYXRjaGVkSW1wb3J0KCkgewor
ICAgIGNvbnN0IGUgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuSW1wb3J0KCkuRnVuY3Rpb24oImZvbyIsICJiYXIiLCB7IHBhcmFtczogW10gfSkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZS5GdW5jdGlv
bigiZm9vIiwgMCwgeyBwYXJhbXM6IFsiaTMyIl0gfSksIEVycm9yLCBgTm90IHRoZSBzYW1lOiAi
MSIgYW5kICIwIjogUmUtZXhwb3J0aW5nIGltcG9ydCAiYmFyIiBhcyAiZm9vIiBoYXMgbWlzbWF0
Y2hpbmcgdHlwZWApOworfSkoKTsKKwogKGZ1bmN0aW9uIEVtcHR5Q29kZVNlY3Rpb24oKSB7CiAg
ICAgY29uc3QgYiA9IG5ldyBCdWlsZGVyKCk7CiAgICAgYi5Db2RlKCk7CkBAIC05NywxOTkgKzI1
MiwyNTQgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogCiAo
ZnVuY3Rpb24gQ29kZVNlY3Rpb25XaXRoRW1wdHlGdW5jdGlvbigpIHsKICAgICBjb25zdCBiID0g
bmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24oKTsKKyAgICBi
LlR5cGUoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKTsK
ICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2Vj
dGlvbi5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0ubmFtZSwgIkNvZGUi
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMik7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5uYW1lLCAiVHlwZSIpOwogICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0
YS5sZW5ndGgsIDEpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbWV0
ZXJDb3VudCwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fscy5s
ZW5ndGgsIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0
aCwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNz
ZXJ0LmVxKGouc2VjdGlvblsxXS5uYW1lLCAiQ29kZSIpOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsw
XS5uYW1lLCB1bmRlZmluZWQpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50
eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ucGFyYW1ldGVyQ291
bnQsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5sb2NhbHMubGVuZ3Ro
LCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDAp
OwogfSkoKTsKIAogKGZ1bmN0aW9uIENvZGVTZWN0aW9uV2l0aEVtcHR5RnVuY3Rpb25XaXRoUGFy
YW1ldGVycygpIHsKICAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUoKQot
ICAgICAgICAuRnVuY3Rpb24oWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiXSk7CisgICAgYi5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHsgcGFy
YW1zOiBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCJdIH0pOwogICAgIGNvbnN0IGogPSBKU09O
LnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uLmxlbmd0aCwgMSk7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5uYW1lLCAiQ29kZSIpOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb24ubGVuZ3RoLCAyKTsKICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVu
Z3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ucGFyYW1ldGVyQ291
bnQsIDQpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHNbMF0sICJp
MzIiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzWzFdLCAiaTY0
Iik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmxvY2Fsc1syXSwgImYzMiIp
OwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHNbM10sICJmNjQiKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDApOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5wYXJhbXMsIFsiaTMyIiwgImk2NCIsICJm
MzIiLCAiZjY0Il0pOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2
b2lkIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMSk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLnR5cGUsIDApOworICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5wYXJhbWV0ZXJDb3VudCwgNCk7CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLmxvY2Fsc1swXSwgImkzMiIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5sb2NhbHNbMV0sICJpNjQiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0
aW9uWzFdLmRhdGFbMF0ubG9jYWxzWzJdLCAiZjMyIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzBdLmxvY2Fsc1szXSwgImY2NCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gSW52YWxpZEZ1
bmN0aW9uUGFyYW1ldGVycygpIHsKLSAgICBmb3IgKGxldCBpbnZhbGlkIGluIFsiIiwgInZvaWQi
LCAiYm9vbCIsICJhbnkiLCAic3RydWN0Il0pIHsKKyAgICBmb3IgKGxldCBpbnZhbGlkIG9mIFsi
IiwgInZvaWQiLCAiYm9vbCIsICJhbnkiLCAic3RydWN0IiwgMCwgMy4xNCwgdW5kZWZpbmVkLCBb
XSwge31dKSB7CiAgICAgICAgIGNvbnN0IGMgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpOwotICAg
ICAgICB0cnkgewotICAgICAgICAgICAgYy5GdW5jdGlvbihbaW52YWxpZF0pOwotICAgICAgICB9
IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7IGNvbnRp
bnVlOyB9Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIEVycm9yLCBn
b3QgJHtlfWApOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQg
dG8gdGhyb3cgYW4gRXJyb3IgZm9yICR7aW52YWxpZH1gKTsKKyAgICAgICAgYXNzZXJ0LnRocm93
cygoKSA9PiBjLkZ1bmN0aW9uKHsgcGFyYW1zOiBbaW52YWxpZF0gfSksIEVycm9yLCBgRXhwZWN0
ZWQgdHJ1dGh5OiBUeXBlIHBhcmFtZXRlciAke2ludmFsaWR9IG5lZWRzIGEgdmFsaWQgdmFsdWUg
dHlwZWApOwogICAgIH0KIH0pKCk7CiAKIChmdW5jdGlvbiBTaW1wbGVGdW5jdGlvbigpIHsKICAg
ICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUoKQotICAgICAgICAuRnVuY3Rp
b24oKQotICAgICAgICAgICAgLk5vcCgpCi0gICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgLkVu
ZCgpOworICAgIGIuVHlwZSgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigpCisgICAgICAgICAgICAgICAgLk5vcCgpCisgICAgICAgICAgICAgICAgLk5vcCgp
CisgICAgICAgICAgICAuRW5kKCk7CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkp
OwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDEpOwotICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7Ci0gICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5l
cShqLnNlY3Rpb25bMV0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MV0uZGF0YVswXS5sb2NhbHMubGVuZ3RoLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFd
LmRhdGFbMF0uY29kZS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVswXS5jb2RlWzBdLm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRh
dGFbMF0uY29kZVsxXS5uYW1lLCAibm9wIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMl0ubmFtZSwgImVuZCIpOwogfSkoKTsKIAogKGZ1bmN0aW9uIFR3b1NpbXBs
ZUZ1bmN0aW9ucygpIHsKICAgICBjb25zdCBiID0gbmV3IEJ1aWxkZXIoKTsKLSAgICBiLkNvZGUo
KQotICAgICAgICAuRnVuY3Rpb24oKQotICAgICAgICAgICAgLk5vcCgpCi0gICAgICAgICAgICAu
Tm9wKCkKKyAgICBiLlR5cGUoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oKQorICAgICAgICAgICAgICAgIC5Ob3AoKQorICAgICAgICAgICAgICAgIC5Ob3Ao
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKQorICAgICAgICAg
ICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGogPSBKU09O
LnBhcnNlKGIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGEubGVuZ3Ro
LCAyKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0ubG9jYWxzLmxlbmd0aCwg
MCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAzKTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9wIik7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5vcCIp
OworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQi
KTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0ubG9jYWxzLmxlbmd0aCwgMCk7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLmNvZGUubGVuZ3RoLCAyKTsKKyAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0uY29kZVswXS5uYW1lLCAicmV0dXJuIik7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLmNvZGVbMV0ubmFtZSwgImVuZCIp
OworfSkoKTsKKworKGZ1bmN0aW9uIE5hbWVkRnVuY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSBu
ZXcgQnVpbGRlcigpLlR5cGUoKS5FbmQoKS5Db2RlKCkKKyAgICAgICAgLkZ1bmN0aW9uKCJoZWxs
byIpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigid29ybGQiLCB7IHBhcmFtczogWyJpMzIiXSB9
KS5FbmQoKQorICAgIC5FbmQoKTsKKyAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7
CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLm5hbWUsICJoZWxsbyIpOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5wYXJhbWV0ZXJDb3VudCwgMCk7CisgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzFdLm5hbWUsICJ3b3JsZCIpOworICAgIGFzc2Vy
dC5lcShqLnNlY3Rpb25bMV0uZGF0YVsxXS5wYXJhbWV0ZXJDb3VudCwgMSk7Cit9KSgpOworCiso
ZnVuY3Rpb24gRXhwb3J0U2ltcGxlRnVuY3Rpb25zKCkgeworICAgIGNvbnN0IGIgPSAobmV3IEJ1
aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMCwgeyBwYXJhbXM6IFtdIH0pCisgICAgICAgICAgICAu
RnVuY3Rpb24oImJhciIpCisgICAgICAgICAgICAuRnVuY3Rpb24oImJldHRlck5hbWVGb3JCYXIi
LCAiYmFyIikKICAgICAgICAgLkVuZCgpCi0gICAgICAgIC5GdW5jdGlvbigpCi0gICAgICAgICAg
ICAuUmV0dXJuKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKHsgcGFy
YW1zOiBbXSB9KS5Ob3AoKS5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiLCB7IHBh
cmFtczogW10gfSkuTm9wKCkuRW5kKCkKICAgICAgICAgLkVuZCgpOwogICAgIGNvbnN0IGogPSBK
U09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGEubGVu
Z3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0ubG9jYWxzLmxlbmd0
aCwgMCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAz
KTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAibm9w
Iik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgIm5v
cCIpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJl
bmQiKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0ubG9jYWxzLmxlbmd0aCwg
MCk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLmNvZGUubGVuZ3RoLCAyKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMV0uY29kZVswXS5uYW1lLCAicmV0dXJu
Iik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzFdLmNvZGVbMV0ubmFtZSwgImVu
ZCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YS5sZW5ndGgsIDEpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5yZXQsICJ2b2lkIik7CisgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLnBhcmFtcywgW10pOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YS5sZW5ndGgsIDMpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsw
XS5maWVsZCwgImZvbyIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS50eXBl
LCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uaW5kZXgsIDApOworICAg
IGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5raW5kLCAiRnVuY3Rpb24iKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0uZmllbGQsICJiYXIiKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMV0udHlwZSwgMCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlv
blsxXS5kYXRhWzFdLmluZGV4LCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MV0ua2luZCwgIkZ1bmN0aW9uIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzJd
LmZpZWxkLCAiYmV0dGVyTmFtZUZvckJhciIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVsyXS50eXBlLCAwKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMl0uaW5k
ZXgsIDEpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVsyXS5raW5kLCAiRnVuY3Rp
b24iKTsKK30pKCk7CisKKyhmdW5jdGlvbiBFeHBvcnRVbmRlZmluZWRGdW5jdGlvbigpIHsKKyAg
ICBjb25zdCBjID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5FeHBvcnQoKS5GdW5jdGlv
bigiZm9vIikuRW5kKCkuQ29kZSgpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYy5FbmQoKSwg
RXJyb3IsIGBTaG91bGQgYmUgbnVtYmVyLCBnb3QgdW5kZWZpbmVkOiBFeHBvcnQgc2VjdGlvbiBj
b250YWlucyB1bmRlZmluZWQgZnVuY3Rpb24gImZvbyJgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBU
d29CdWlsZGVyc0F0VGhlU2FtZVRpbWUoKSB7CiAgICAgY29uc3QgYiA9IFtuZXcgQnVpbGRlcigp
LCBuZXcgQnVpbGRlcigpXTsKLSAgICBjb25zdCBmID0gYi5tYXAoYnVpbGRlciA9PiBidWlsZGVy
LkNvZGUoKS5GdW5jdGlvbigpKTsKKyAgICBjb25zdCBmID0gYi5tYXAoYnVpbGRlciA9PiBidWls
ZGVyLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKSk7CiAgICAgZlswXS5Ob3AoKTsKICAg
ICBmWzFdLlJldHVybigpLkVuZCgpLkVuZCgpOwogICAgIGZbMF0uTm9wKCkuRW5kKCkuRW5kKCk7
CiAgICAgY29uc3QgaiA9IGIubWFwKGJ1aWxkZXIgPT4gSlNPTi5wYXJzZShidWlsZGVyLmpzb24o
KSkpOwotICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwg
Myk7Ci0gICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwg
Im5vcCIpOwotICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLm5h
bWUsICJub3AiKTsKLSAgICBhc3NlcnQuZXEoalswXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsy
XS5uYW1lLCAiZW5kIik7Ci0gICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblswXS5kYXRhWzBdLmNv
ZGUubGVuZ3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoalsxXS5zZWN0aW9uWzBdLmRhdGFbMF0uY29k
ZVswXS5uYW1lLCAicmV0dXJuIik7Ci0gICAgYXNzZXJ0LmVxKGpbMV0uc2VjdGlvblswXS5kYXRh
WzBdLmNvZGVbMV0ubmFtZSwgImVuZCIpOworICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25bMV0u
ZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7CisgICAgYXNzZXJ0LmVxKGpbMF0uc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGVbMF0ubmFtZSwgIm5vcCIpOworICAgIGFzc2VydC5lcShqWzBdLnNlY3Rpb25b
MV0uZGF0YVswXS5jb2RlWzFdLm5hbWUsICJub3AiKTsKKyAgICBhc3NlcnQuZXEoalswXS5zZWN0
aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGpbMV0u
c2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoalsxXS5z
ZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAicmV0dXJuIik7CisgICAgYXNzZXJ0LmVx
KGpbMV0uc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0ubmFtZSwgImVuZCIpOwogfSkoKTsKIAog
KGZ1bmN0aW9uIENoZWNrZWRPcGNvZGVBcmd1bWVudHNUb29NYW55KCkgewotICAgIGFzc2VydE9w
VGhyb3dzKGYgPT4gZi5Ob3AoInVoLW9oISIpLCBgIm5vcCIgZXhwZWN0cyAwIGltbWVkaWF0ZXMs
IGdvdCAxYCk7CisgICAgYXNzZXJ0T3BUaHJvd3MoZiA9PiBmLk5vcCgidWgtb2ghIiksIGBOb3Qg
dGhlIHNhbWU6ICIxIiBhbmQgIjAiOiAibm9wIiBleHBlY3RzIDAgaW1tZWRpYXRlcywgZ290IDFg
KTsKIH0pKCk7CiAKIChmdW5jdGlvbiBVbmNoZWNrZWRPcGNvZGVBcmd1bWVudHNUb29NYW55KCkg
ewotICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZhbHNlKS5Db2RlKCkuRnVuY3Rpb24o
KS5Ob3AoIlRoaXMgaXMgZmluZS4iLCAiSSdtIE9LIHdpdGggdGhlIGV2ZW50cyB0aGF0IGFyZSB1
bmZvbGRpbmcgY3VycmVudGx5LiIpOworICAgIChuZXcgQnVpbGRlcigpKS5zZXRDaGVja2VkKGZh
bHNlKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuTm9wKCJUaGlzIGlzIGZpbmUuIiwg
IkknbSBPSyB3aXRoIHRoZSBldmVudHMgdGhhdCBhcmUgdW5mb2xkaW5nIGN1cnJlbnRseS4iKTsK
IH0pKCk7CiAKIChmdW5jdGlvbiBDaGVja2VkT3Bjb2RlQXJndW1lbnRzTm90RW5vdWdoKCkgewot
ICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5JMzJDb25zdCgpLCBgImkzMi5jb25zdCIgZXhwZWN0
cyAxIGltbWVkaWF0ZXMsIGdvdCAwYCk7CisgICAgYXNzZXJ0T3BUaHJvd3MoZiA9PiBmLkkzMkNv
bnN0KCksIGBOb3QgdGhlIHNhbWU6ICIwIiBhbmQgIjEiOiAiaTMyLmNvbnN0IiBleHBlY3RzIDEg
aW1tZWRpYXRlcywgZ290IDBgKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBVbmNoZWNrZWRPcGNvZGVB
cmd1bWVudHNOb3RFbm91Z2goKSB7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLnNldENoZWNrZWQoZmFs
c2UpLkNvZGUoKS5GdW5jdGlvbigpLkkzMkNvbnN0KCk7CisgICAgKG5ldyBCdWlsZGVyKCkpLnNl
dENoZWNrZWQoZmFsc2UpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5JMzJDb25zdCgp
OwogfSkoKTsKIAogKGZ1bmN0aW9uIENhbGxOb0FyZ3VtZW50cygpIHsKLSAgICBjb25zdCBiID0g
KG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLkNhbGwoMCkuRW5kKCkuRW5kKCk7Cisg
ICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9u
KCkuQ2FsbCgwKS5FbmQoKS5FbmQoKTsKICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24o
KSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsK
LSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAiY2FsbCIp
OwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5s
ZW5ndGgsIDApOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmlt
bWVkaWF0ZXMubGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0u
Y29kZVswXS5pbW1lZGlhdGVzWzBdLCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVsxXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5k
YXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZVswXS5uYW1lLCAiY2FsbCIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0
YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOworICAgIGFzc2VydC5lcShqLnNlY3Rp
b25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXMubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCAwKTsKKyAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiZW5kIik7CiB9KSgp
OwogCiAoZnVuY3Rpb24gQ2FsbEludmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbLTEsIDB4
MTAwMDAwMDAwLCAiMCIsIHt9LCBJbmZpbml0eSwgLUluZmluaXR5LCBOYU4sIC1OYU4sIG51bGxd
KQotICAgICAgICBhc3NlcnRPcFRocm93cyhmID0+IGYuQ2FsbChjKSwgYEludmFsaWQgdmFsdWUg
b24gY2FsbDogZ290ICIke2N9IiwgZXhwZWN0ZWQgaTMyYCk7CisgICAgICAgIGFzc2VydE9wVGhy
b3dzKGYgPT4gZi5DYWxsKGMpLCBgRXhwZWN0ZWQgdHJ1dGh5OiBJbnZhbGlkIHZhbHVlIG9uIGNh
bGw6IGdvdCAiJHtjfSIsIGV4cGVjdGVkIGkzMmApOwogfSkoKTsKIAogKGZ1bmN0aW9uIEkzMkNv
bnN0VmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbMCwgMSwgMiwgNDIsIDEzMzcsIDB4RkYs
IDB4RkZGRiwgMHg3RkZGRkZGRiwgMHhGRkZGRkZGRSwgMHhGRkZGRkZGRl0pIHsKLSAgICAgICAg
Y29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5JMzJDb25zdChjKS5S
ZXR1cm4oKS5FbmQoKS5FbmQoKTsKKyAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5U
eXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuSTMyQ29uc3QoYykuUmV0dXJuKCkuRW5kKCku
RW5kKCk7CiAgICAgICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICAgICAg
YXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIp
OwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVu
dHMubGVuZ3RoLCAwKTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNv
ZGVbMF0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsKKyAgICAgICAgYXNzZXJ0LmVx
KGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIpOworICAgICAg
ICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3Ro
LCAwKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1t
ZWRpYXRlcy5sZW5ndGgsIDEpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFb
MF0uY29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsKICAgICB9CiB9KSgpOwogCiAoZnVuY3Rpb24g
STMyQ29uc3RJbnZhbGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWy0xLCAweDEwMDAwMDAwMCwg
MC4xLCAtMC4xLCAiMCIsIHt9LCBJbmZpbml0eSwgbnVsbF0pCi0gICAgICAgIGFzc2VydE9wVGhy
b3dzKGYgPT4gZi5JMzJDb25zdChjKSwgYEludmFsaWQgdmFsdWUgb24gaTMyLmNvbnN0OiBnb3Qg
IiR7Y30iLCBleHBlY3RlZCBpMzJgKTsKKyAgICAgICAgYXNzZXJ0T3BUaHJvd3MoZiA9PiBmLkkz
MkNvbnN0KGMpLCBgRXhwZWN0ZWQgdHJ1dGh5OiBJbnZhbGlkIHZhbHVlIG9uIGkzMi5jb25zdDog
Z290ICIke2N9IiwgZXhwZWN0ZWQgaTMyYCk7CiB9KSgpOwogCiAvLyBGSVhNRTogdGVzdCBpNjQu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM0MjAKIAogKGZ1bmN0
aW9uIEYzMkNvbnN0VmFsaWQoKSB7CiAgICAgZm9yIChsZXQgYyBvZiBbMCwgLTAuLCAwLjIsIE1h
dGguUEksIDB4MTAwMDAwMDAwXSkgewotICAgICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkp
LkNvZGUoKS5GdW5jdGlvbigpLkYzMkNvbnN0KGMpLlJldHVybigpLkVuZCgpLkVuZCgpOworICAg
ICAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rp
b24oKS5GMzJDb25zdChjKS5SZXR1cm4oKS5FbmQoKS5FbmQoKTsKICAgICAgICAgY29uc3QgaiA9
IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRh
dGFbMF0uY29kZVswXS5uYW1lLCAiZjMyLmNvbnN0Iik7Ci0gICAgICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOwotICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwg
MSk7Ci0gICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVk
aWF0ZXNbMF0sIGMpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29k
ZVswXS5uYW1lLCAiZjMyLmNvbnN0Iik7CisgICAgICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVswXS5jb2RlWzBdLmFyZ3VtZW50cy5sZW5ndGgsIDApOworICAgICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7CisgICAg
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0s
IGMpOwogICAgIH0KIH0pKCk7CiAKIChmdW5jdGlvbiBGMzJDb25zdEludmFsaWQoKSB7CiAgICAg
Zm9yIChsZXQgYyBvZiBbIjAiLCB7fSwgSW5maW5pdHksIC1JbmZpbml0eSwgTmFOLCAtTmFOLCBu
dWxsXSkKLSAgICAgICAgYXNzZXJ0T3BUaHJvd3MoZiA9PiBmLkYzMkNvbnN0KGMpLCBgSW52YWxp
ZCB2YWx1ZSBvbiBmMzIuY29uc3Q6IGdvdCAiJHtjfSIsIGV4cGVjdGVkIGYzMmApOworICAgICAg
ICBhc3NlcnRPcFRocm93cyhmID0+IGYuRjMyQ29uc3QoYyksIGBFeHBlY3RlZCB0cnV0aHk6IElu
dmFsaWQgdmFsdWUgb24gZjMyLmNvbnN0OiBnb3QgIiR7Y30iLCBleHBlY3RlZCBmMzJgKTsKIH0p
KCk7CiAKIChmdW5jdGlvbiBGNjRDb25zdFZhbGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWzAs
IC0wLiwgMC4yLCBNYXRoLlBJLCAweDEwMDAwMDAwMF0pIHsKLSAgICAgICAgY29uc3QgYiA9IChu
ZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5GNjRDb25zdChjKS5SZXR1cm4oKS5FbmQo
KS5FbmQoKTsKKyAgICAgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCku
Q29kZSgpLkZ1bmN0aW9uKCkuRjY0Q29uc3QoYykuUmV0dXJuKCkuRW5kKCkuRW5kKCk7CiAgICAg
ICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICAgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImY2NC5jb25zdCIpOwotICAgICAgICBh
c3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAw
KTsKLSAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRp
YXRlcy5sZW5ndGgsIDEpOwotICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0u
Y29kZVswXS5pbW1lZGlhdGVzWzBdLCBjKTsKKyAgICAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsx
XS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImY2NC5jb25zdCIpOworICAgICAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5hcmd1bWVudHMubGVuZ3RoLCAwKTsKKyAgICAg
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMF0uaW1tZWRpYXRlcy5sZW5n
dGgsIDEpOworICAgICAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVswXS5p
bW1lZGlhdGVzWzBdLCBjKTsKICAgICB9CiB9KSgpOwogCiAoZnVuY3Rpb24gRjY0Q29uc3RJbnZh
bGlkKCkgewogICAgIGZvciAobGV0IGMgb2YgWyIwIiwge30sIEluZmluaXR5LCAtSW5maW5pdHks
IE5hTiwgLU5hTiwgbnVsbF0pCi0gICAgICAgIGFzc2VydE9wVGhyb3dzKGYgPT4gZi5GNjRDb25z
dChjKSwgYEludmFsaWQgdmFsdWUgb24gZjY0LmNvbnN0OiBnb3QgIiR7Y30iLCBleHBlY3RlZCBm
NjRgKTsKKyAgICAgICAgYXNzZXJ0T3BUaHJvd3MoZiA9PiBmLkY2NENvbnN0KGMpLCBgRXhwZWN0
ZWQgdHJ1dGh5OiBJbnZhbGlkIHZhbHVlIG9uIGY2NC5jb25zdDogZ290ICIke2N9IiwgZXhwZWN0
ZWQgZjY0YCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gQ2FsbE9uZUZyb21TdGFjaygpIHsKLSAgICBj
b25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKQotICAgICAgICAuRnVuY3Rpb24oWyJpMzIi
XSkKKyAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKHsgcGFyYW1zOiBbImkzMiJdIH0pCiAgICAgICAgICAgICAuSTMyQ29u
c3QoNDIpCiAgICAgICAgICAgICAuQ2FsbCgwKQogICAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7
CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgMyk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGVbMF0ubmFtZSwgImkzMi5jb25zdCIpOwotICAgIGFzc2VydC5lcShq
LnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzBdLmltbWVkaWF0ZXNbMF0sIDQyKTsKLSAgICBhc3Nl
cnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5uYW1lLCAiY2FsbCIpOwotICAgIC8v
IEZJWE1FOiBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5hcmd1bWVudHMu
bGVuZ3RoLCAxKTsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2
NwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0uZGF0YVswXS5jb2RlWzFdLmltbWVkaWF0ZXMu
bGVuZ3RoLCAxKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVsxXS5p
bW1lZGlhdGVzWzBdLCAwKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29k
ZVsyXS5uYW1lLCAiZW5kIik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNv
ZGUubGVuZ3RoLCAzKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsw
XS5uYW1lLCAiaTMyLmNvbnN0Iik7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBd
LmNvZGVbMF0uaW1tZWRpYXRlc1swXSwgNDIpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVswXS5jb2RlWzFdLm5hbWUsICJjYWxsIik7CisgICAgLy8gRklYTUU6IGFzc2VydC5lcShq
LnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLmFyZ3VtZW50cy5sZW5ndGgsIDEpOyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjY3CisgICAgYXNzZXJ0LmVxKGou
c2VjdGlvblsxXS5kYXRhWzBdLmNvZGVbMV0uaW1tZWRpYXRlcy5sZW5ndGgsIDEpOworICAgIGFz
c2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzFdLmltbWVkaWF0ZXNbMF0sIDApOwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzJdLm5hbWUsICJlbmQiKTsK
IH0pKCk7CiAKIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjMyNjcgYWxsIG9mIHRoZXNlOgpAQCAtMzAxLDIyICs1MTEsMjIgQEAgY29uc3QgYXNzZXJ0
T3BUaHJvd3MgPSAob3BGbiwgbWVzc2FnZSkgPT4gewogLy8gIHRlc3QgZnVuY3Rpb24gbmFtZXMg
KGJvdGggc2V0dGluZyBhbmQgY2FsbGluZyB0aGVtKS4KIAogKGZ1bmN0aW9uIENhbGxNYW55RnJv
bVN0YWNrKCkgewotICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpCi0gICAgICAg
ICAgLkZ1bmN0aW9uKFsiaTMyIiwgImkzMiIsICJpMzIiLCAiaTMyIl0pCisgICAgY29uc3QgYiA9
IChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpCisgICAgICAgIC5GdW5jdGlvbih7
IHBhcmFtczogWyJpMzIiLCAiaTMyIiwgImkzMiIsICJpMzIiXSB9KQogICAgICAgICAgICAgICAu
STMyQ29uc3QoNDIpLkkzMkNvbnN0KDEzMzcpLkkzMkNvbnN0KDB4QkVFRikuSTMyQ29uc3QoMHhG
RkZGKQogICAgICAgICAgICAgICAuQ2FsbCgwKQogICAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7
CiAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgNik7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlv
blswXS5kYXRhWzBdLmNvZGVbNF0ubmFtZSwgImNhbGwiKTsKLSAgICAvLyBGSVhNRTogYXNzZXJ0
LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbNF0uYXJndW1lbnRzLmxlbmd0aCwgNCk7IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKLSAgICBhc3NlcnQu
ZXEoai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVs0XS5pbW1lZGlhdGVzLmxlbmd0aCwgMSk7Ci0g
ICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbNF0uaW1tZWRpYXRlc1swXSwg
MCk7CisgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCA2KTsK
KyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVs0XS5uYW1lLCAiY2FsbCIp
OworICAgIC8vIEZJWE1FOiBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVs0XS5h
cmd1bWVudHMubGVuZ3RoLCA0KTsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzI2NworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzRdLmlt
bWVkaWF0ZXMubGVuZ3RoLCAxKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0u
Y29kZVs0XS5pbW1lZGlhdGVzWzBdLCAwKTsKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNvZGVBZGQo
KSB7Ci0gICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5Db2RlKCkKKyAgICBjb25zdCBiID0g
KG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkKICAgICAgICAgICAuRnVuY3Rpb24o
KQogICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIpLkkzMkNvbnN0KDEzMzcpCiAgICAgICAgICAg
ICAgIC5JMzJBZGQoKQpAQCAtMzI0LDM5ICs1MzQsMzkgQEAgY29uc3QgYXNzZXJ0T3BUaHJvd3Mg
PSAob3BGbiwgbWVzc2FnZSkgPT4gewogICAgICAgICAuRW5kKCkKICAgICAuRW5kKCk7CiAgICAg
Y29uc3QgaiA9IEpTT04ucGFyc2UoYi5qc29uKCkpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25b
MF0uZGF0YVswXS5jb2RlLmxlbmd0aCwgNSk7Ci0gICAgYXNzZXJ0LmVxKGouc2VjdGlvblswXS5k
YXRhWzBdLmNvZGVbMl0ubmFtZSwgImkzMi5hZGQiKTsKLSAgICAvLyBGSVhNRTogYXNzZXJ0LmVx
KGouc2VjdGlvblswXS5kYXRhWzBdLmNvZGVbMl0uYXJndW1lbnRzLmxlbmd0aCwgMik7IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyNjcKLSAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzBdLmRhdGFbMF0uY29kZVszXS5uYW1lLCAicmV0dXJuIik7CisgICAgYXNzZXJ0
LmVxKGouc2VjdGlvblsxXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCA1KTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5uYW1lLCAiaTMyLmFkZCIpOworICAgIC8vIEZJ
WE1FOiBhc3NlcnQuZXEoai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZVsyXS5hcmd1bWVudHMubGVu
Z3RoLCAyKTsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzI2Nwor
ICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0uZGF0YVswXS5jb2RlWzNdLm5hbWUsICJyZXR1cm4i
KTsKICAgICAvLyBGSVhNRSBjaGVjayByZXR1cm4uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjMyNjcKIH0pKCk7CiAKIChmdW5jdGlvbiBPcGNvZGVVbnJlYWNoYWJs
ZSgpIHsKLSAgICBjb25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlVu
cmVhY2hhYmxlKCkuRW5kKCkuRW5kKCk7CisgICAgY29uc3QgYiA9IChuZXcgQnVpbGRlcigpKS5U
eXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCkuVW5yZWFjaGFibGUoKS5FbmQoKS5FbmQoKTsK
ICAgICBjb25zdCBqID0gSlNPTi5wYXJzZShiLmpzb24oKSk7Ci0gICAgYXNzZXJ0LmVxKGouc2Vj
dGlvblswXS5kYXRhWzBdLmNvZGUubGVuZ3RoLCAyKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZVswXS5uYW1lLCAidW5yZWFjaGFibGUiKTsKKyAgICBhc3NlcnQuZXEo
ai5zZWN0aW9uWzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDIpOworICAgIGFzc2VydC5lcShqLnNl
Y3Rpb25bMV0uZGF0YVswXS5jb2RlWzBdLm5hbWUsICJ1bnJlYWNoYWJsZSIpOwogfSkoKTsKIAog
KGZ1bmN0aW9uIE9wY29kZVVucmVhY2hhYmxlQ29tYmluYXRpb25zKCkgewotICAgIChuZXcgQnVp
bGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5Ob3AoKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgp
OwotICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLk5v
cCgpLkVuZCgpLkVuZCgpOwotICAgIChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5S
ZXR1cm4oKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpOwotICAgIChuZXcgQnVpbGRlcigpKS5D
b2RlKCkuRnVuY3Rpb24oKS5VbnJlYWNoYWJsZSgpLlJldHVybigpLkVuZCgpLkVuZCgpOwotICAg
IChuZXcgQnVpbGRlcigpKS5Db2RlKCkuRnVuY3Rpb24oKS5DYWxsKDApLlVucmVhY2hhYmxlKCku
RW5kKCkuRW5kKCk7Ci0gICAgKG5ldyBCdWlsZGVyKCkpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVh
Y2hhYmxlKCkuQ2FsbCgwKS5FbmQoKS5FbmQoKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuVHlwZSgp
LkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLk5vcCgpLlVucmVhY2hhYmxlKCkuRW5kKCkuRW5kKCku
anNvbigpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9u
KCkuVW5yZWFjaGFibGUoKS5Ob3AoKS5FbmQoKS5FbmQoKS5qc29uKCk7CisgICAgKG5ldyBCdWls
ZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKS5SZXR1cm4oKS5VbnJlYWNoYWJs
ZSgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3IEJ1aWxkZXIoKSkuVHlwZSgpLkVuZCgp
LkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuUmV0dXJuKCkuRW5kKCkuRW5kKCkuanNv
bigpOworICAgIChuZXcgQnVpbGRlcigpKS5UeXBlKCkuRW5kKCkuQ29kZSgpLkZ1bmN0aW9uKCku
Q2FsbCgwKS5VbnJlYWNoYWJsZSgpLkVuZCgpLkVuZCgpLmpzb24oKTsKKyAgICAobmV3IEJ1aWxk
ZXIoKSkuVHlwZSgpLkVuZCgpLkNvZGUoKS5GdW5jdGlvbigpLlVucmVhY2hhYmxlKCkuQ2FsbCgw
KS5FbmQoKS5FbmQoKS5qc29uKCk7CiB9KSgpOwogCiAoZnVuY3Rpb24gT3Bjb2RlU2VsZWN0KCkg
ewotICAgIGNvbnN0IGIgPSAobmV3IEJ1aWxkZXIoKSkuQ29kZSgpLkZ1bmN0aW9uKCkKKyAgICBj
b25zdCBiID0gKG5ldyBCdWlsZGVyKCkpLlR5cGUoKS5FbmQoKS5Db2RlKCkuRnVuY3Rpb24oKQog
ICAgICAgICAuSTMyQ29uc3QoMSkuSTMyQ29uc3QoMikuSTMyQ29uc3QoMCkKICAgICAgICAgLlNl
bGVjdCgpCiAgICAgICAgIC5SZXR1cm4oKQogICAgICAgLkVuZCgpCiAgICAgLkVuZCgpOwogICAg
IGNvbnN0IGogPSBKU09OLnBhcnNlKGIuanNvbigpKTsKLSAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzBdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDYpOwotICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMF0u
ZGF0YVswXS5jb2RlWzNdLm5hbWUsICJzZWxlY3QiKTsKKyAgICBhc3NlcnQuZXEoai5zZWN0aW9u
WzFdLmRhdGFbMF0uY29kZS5sZW5ndGgsIDYpOworICAgIGFzc2VydC5lcShqLnNlY3Rpb25bMV0u
ZGF0YVswXS5jb2RlWzNdLm5hbWUsICJzZWxlY3QiKTsKIH0pKCk7CiAKIC8vIEZJWE1FIHRlc3Qg
dHlwZSBtaXNtYXRjaCB3aXRoIHNlbGVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MzI2NwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0
X0J1aWxkZXJXZWJBc3NlbWJseS5qcyBiL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWls
ZGVyV2ViQXNzZW1ibHkuanMKaW5kZXggYTI1MWM0My4uYWM1N2QzNyAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy93YXNtL3NlbGYtdGVzdC90ZXN0X0J1aWxkZXJXZWJBc3NlbWJseS5qcworKysgYi9KU1Rl
c3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlcldlYkFzc2VtYmx5LmpzCkBAIC0zMCwxNiAr
MzAsMyBAQCBpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKICAgICAgICAgICAg
ICAgWyIwMDAwMDAwMCAwMCA2MSA3MyA2ZCAwYyAwMCAwMCAwMCAwMCAwZiAwYSA0ZiAwMCA0OCAw
MCA0OCAgfMK3YXNtwrfCt8K3wrfCt8K3wrdPwrdIwrdIfCIsCiAgICAgICAgICAgICAgICAiMDAw
MDAwMTAgMDAgNDEgMDAgNDkgMDAgZGUgYWQgYzAgZmUgICAgICAgICAgICAgICAgICAgICAgIHzC
t0HCt0nCt8K3wrfCt8K3ICAgICAgIHwiXS5qb2luKCJcbiIpKTsKIH0pKCk7Ci0KLShmdW5jdGlv
biBCYXNpYygpIHsKLSAgICBjb25zdCBiaW4gPSAobmV3IEJ1aWxkZXIoKSkKLSAgICAgICAgLkNv
ZGUoKQotICAgICAgICAgICAgLkZ1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAuTm9wKCkKLSAg
ICAgICAgICAgICAgICAuTm9wKCkKLSAgICAgICAgICAgIC5FbmQoKQotICAgICAgICAuRW5kKCkK
LSAgICAgICAgLldlYkFzc2VtYmx5KCk7Ci0gICAgYXNzZXJ0LmVxKGJpbi5oZXhkdW1wKCkudHJp
bSgpLAotICAgICAgICAgICAgICAiMDAwMDAwMDAgMDAgNjEgNzMgNmQgMGMgMDAgMDAgMDAgMGEg
MDYgMDEgMDQgMDAgMGEgMGEgMGYgIHzCt2FzbcK3wrfCt8K3wrfCt8K3wrfCt8K3wrfCt3wiKTsK
LX0pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfV0FTTS5qcyBi
L0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9XQVNNLmpzCmluZGV4IDM5YTk1NjkuLjk5Nzc5
N2YgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9XQVNNLmpzCisrKyBi
L0pTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9XQVNNLmpzCkBAIC0xLDggKzEsOCBAQAogaW1w
b3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiBpbXBvcnQgKiBhcyBXQVNNIGZy
b20gJy4uL1dBU00uanMnOwogCi1hc3NlcnQubm90VW5kZWYoV0FTTS5kZXNjcmlwdGlvbik7Ci1h
c3NlcnQubm90VW5kZWYoV0FTTS52YWx1ZVR5cGUpOworYXNzZXJ0LmlzTm90VW5kZWYoV0FTTS5k
ZXNjcmlwdGlvbik7Cithc3NlcnQuaXNOb3RVbmRlZihXQVNNLnZhbHVlVHlwZSk7CiBhc3NlcnQu
Z2UoV0FTTS52YWx1ZVR5cGUubGVuZ3RoLCA0KTsKIAogZm9yIChjb25zdCB2IG9mIFdBU00udmFs
dWVUeXBlKQpAQCAtMTgsNyArMTgsNyBAQCBjb25zdCBleHBlY3RlZEZpZWxkcyA9IFsKICAgICAi
b3Bjb2RlIiwKIF07CiBmb3IgKGNvbnN0IGUgb2YgZXhwZWN0ZWRGaWVsZHMpIHsKLSAgICBhc3Nl
cnQubm90VW5kZWYoV0FTTS5kZXNjcmlwdGlvbltlXSk7CisgICAgYXNzZXJ0LmlzTm90VW5kZWYo
V0FTTS5kZXNjcmlwdGlvbltlXSk7CiAgICAgaWYgKHR5cGVvZihXQVNNLmRlc2NyaXB0aW9uW2Vd
KSAhPT0gIm9iamVjdCIpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZGVzY3Jp
cHRpb24gdG8gY29udGFpbiBmaWVsZCAiJHtlfSJgKTsKIH0KQEAgLTMyLDExICszMiwxMSBAQCBj
b25zdCBleHBlY3RlZE9wRmllbGRzID0gWwogXTsKIGZvciAoY29uc3Qgb3AgaW4gV0FTTS5kZXNj
cmlwdGlvbi5vcGNvZGUpCiAgICAgZm9yIChjb25zdCBlIG9mIGV4cGVjdGVkT3BGaWVsZHMpCi0g
ICAgICAgIGFzc2VydC5ub3RVbmRlZihXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF1bZV0pOwor
ICAgICAgICBhc3NlcnQuaXNOb3RVbmRlZihXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVtvcF1bZV0p
OwogCiAvLyBGSVhNRTogdGVzdCBmb3IgZmllbGQgImIzb3AiIHdoZW4gYWxsIGFyaXRobWV0aWMv
IGNvbXBhcmlzb24gb3BzIGhhdmUgdGhlbS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NjA2NAogCi1hc3NlcnQubm90VW5kZWYoV0FTTS5zZWN0aW9ucyk7Ci1hc3Nl
cnQubm90VW5kZWYoV0FTTS5zZWN0aW9uRW5jb2RpbmdUeXBlKTsKK2Fzc2VydC5pc05vdFVuZGVm
KFdBU00uc2VjdGlvbnMpOworYXNzZXJ0LmlzTm90VW5kZWYoV0FTTS5zZWN0aW9uRW5jb2RpbmdU
eXBlKTsKIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBXQVNNLnNlY3Rpb25zKQogICAgIGFzc2VydC5l
cShXQVNNLnNlY3Rpb25FbmNvZGluZ1R5cGUsIFdBU00uZGVzY3JpcHRpb24uc2VjdGlvbltzZWN0
aW9uXS50eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiYmY2ZmU0
Li43MmRjYzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTM5LDYg
KzExMzksMjMgQEAgZWxzZSAoKQogICAgICkKIGVuZGlmICgpCiAKKyMgV2ViQXNzZW1ibHkgZ2Vu
ZXJhdG9yCisKK21hY3JvKEdFTkVSQVRFX1BZVEhPTiBfZ2VuZXJhdG9yIF9pbnB1dCBfb3V0cHV0
KQorICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgT1VUUFVUICR7X291dHB1dH0KKyAg
ICAgICAgTUFJTl9ERVBFTkRFTkNZICR7X2dlbmVyYXRvcn0KKyAgICAgICAgREVQRU5EUyAke19p
bnB1dH0KKyAgICAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke19nZW5lcmF0b3J9
ICR7X2lucHV0fSAke19vdXRwdXR9CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5E
IEphdmFTY3JpcHRDb3JlX0hFQURFUlMgJHtfb3V0cHV0fSkKKyAgICBBRERfU09VUkNFX0RFUEVO
REVOQ0lFUygke19pbnB1dH0gJHtfb3V0cHV0fSkKK2VuZG1hY3JvKCkKK0dFTkVSQVRFX1BZVEhP
Tigke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIu
cHkgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3dhc20vd2FzbS5qc29uICR7REVSSVZFRF9T
T1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vV2FzbU9wcy5oKQorR0VORVJBVEVfUFlUSE9OKCR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5l
c0hlYWRlci5weSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vd2FzbS93YXNtLmpzb24gJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9XYXNtVmFsaWRhdGVJbmxpbmVzLmgp
CisKKyMgTFVUIGdlbmVyYXRvcgorCiBzZXQoSEFTSF9MVVRfR0VORVJBVE9SICR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9jcmVhdGVfaGFzaF90YWJsZSkKIG1hY3JvKEdFTkVSQVRFX0hBU0hf
TFVUIF9pbnB1dCBfb3V0cHV0KQogICAgIGFkZF9jdXN0b21fY29tbWFuZCgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IGIzNTczNTkuLjc4MWIyYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDc3IEBACisyMDE2LTExLTAyICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFw
cGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBtb3JlIHNl
Y3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIuCisKKyAgICAgICAgT24g
dGhlIEpTQyBzaWRlOgorCisgICAgICAgICAtIFB1dCBpbiBwYXJzZXIgc3R1YnMgZm9yIGFsbCBX
ZWJBc3NlbWJseSBzZWN0aW9ucy4KKyAgICAgICAgIC0gUGFyc2UgSW1wb3J0LCBFeHBvcnQgc2Vj
dGlvbnMuCisgICAgICAgICAtIFVzZSB0cnlSZXNlcnZlQ2FwYWNpdHkgaW5zdGVhZCBvZiByZXNl
cnZlLCBhbmQgYmFpbCBvdXQgb2YgdGhlIHBhcnNlciBpZiBpdCBmYWlscy4gVGhpcyBwcmV2ZW50
cyB0aGUgcGFyc2VyIGZyb20gYnJpbmdpbmcgZXZlcnl0aGluZyBkb3duIHdoZW4gZmFjZWQgd2l0
aCBhIG1hbGljaW91cyBpbnB1dC4KKyAgICAgICAgIC0gRW5jYXBzdWxhdGUgYWxsIHBhcnNlZCBt
b2R1bGUgaW5mb3JtYXRpb24gaW50byBpdHMgb3duIHN0cnVjdHVyZSwgbWFraW5nIGl0IGVhc2ll
ciB0byBwYXNzIGFyb3VuZCAoZnJvbSBwYXJzZXIgdG8gUGxhbiB0byBNb2R1bGUgdG8gSW5zdGFu
Y2UpLgorICAgICAgICAgLSBDcmVhdGUgV2FzbUZvcm1hdC5jcHAgdG8gaG9sZCBwYXJzZWQgbW9k
dWxlIGluZm9ybWF0aW9uJ3MgZHRvciB0byBhdm9pZCBpbmNsdWRpbmcgV2FzbU1lbW9yeS5oIG5l
ZWRsZXNzbHkuCisgICAgICAgICAtIFJlbW92ZSBhbGwgcmVtYWluZGVycyBvZiBwb2x5ZmlsbC1w
cm90b3R5cGUtMSwgYW5kIHVwZGF0ZSBsaWNlbnNlLgorICAgICAgICAgLSBBZGQgbWlzc2luZyBX
YXNtT3BzLmggYW5kIFdhc21WYWxpZGF0ZUlubGluZXMuaCBhdXRvLWdlbmVyYXRpb24gZm9yIGNt
YWtlIGJ1aWxkLgorCisgICAgICAgIE9uIHRoZSBCdWlsZGVyLmpzIHRlc3Rpbmcgc2lkZToKKwor
ICAgICAgICAgLSBJbXBsZW1lbnQgVHlwZSwgSW1wb3J0IChmdW5jdGlvbiBvbmx5KSwgRXhwb3J0
IChmdW5jdGlvbiBvbmx5KSBzZWN0aW9ucy4KKyAgICAgICAgIC0gQ2hlY2sgc2VjdGlvbiBvcmRl
ciBhbmQgdW5pcXVlbmVzcy4KKyAgICAgICAgIC0gT3B0aW9uYWxseSBhdXRvLWdlbmVyYXRlIHRo
ZSBUeXBlIHNlY3Rpb24gZnJvbSBzdWJzZXF1ZW50IEV4cG9ydCAvIEltcG9ydCAvIENvZGUgZW50
cmllcy4KKyAgICAgICAgIC0gQWxsb3cgcmUtZXhwb3J0aW5nIGFuIGltcG9ydC4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OiBtaXNzaW5nIGF1dG8tZ2VucmF0aW9uCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogbWVyZ2UgY29uZmxpY3QKKyAg
ICAgICAgKiB0ZXN0V2FzbS5jcHA6IHVwZGF0ZSBmb3IgQVBJIGNoYW5nZXMsIG5vIGZ1bmN0aW9u
YWwgY2hhbmdlCisgICAgICAgIChjaGVja1BsYW4pOgorICAgICAgICAocnVuV2FzbVRlc3RzKToK
KyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuY3BwOiBhZGQgYSBkdG9yIHdoaWNoIHJlcXVpcmVz
IGV4dHJhIGhlYWRlcnMgd2hpY2ggSSdkIHJhdGhlciBub3QgaW5jbHVkZSBpbiBXYXNtRm9ybWF0
LmgKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246On5Nb2R1bGVJbmZvcm1h
dGlvbik6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6IEFkZCBFeHRlcm5hbCwgSW1wb3J0
LCBGdW5jdGlvbmluZm9ybWF0aW9uLCBFeHBvcnQsIE1vZHVsZUluZm9ybWF0aW9uLCBDb21waWxl
ZEZ1bmN0aW9uLCBhbmQgcmVtb3ZlIG9ic29sZXRlIHN0dWZmIHdoaWNoIHdhcyBhIGhvbGRvdmVy
IGZyb20gdGhlIGZpcnN0IGltcGxlbWVudGF0aW9uIChhbGwgdGhhdCBjb2RlIGlzIG5vdyBnb25l
LCBzbyByZW1vdmUgaXRzIGxpY2Vuc2UpCisgICAgICAgIChKU0M6Oldhc206OkV4dGVybmFsOjpp
c1ZhbGlkKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOiBzaW1wbGlmeSBz
b21lLCBtYWtlIG5hbWVzIGNvbnNpc3RlbnQgd2l0aCB0aGUgV2ViQXNzZW1ibHkgc2VjdGlvbiBu
YW1lcywgY2hlY2sgbWVtb3J5IGFsbG9jYXRpb25zIHNvIHRoZXkgY2FuIGZhaWwgZWFybHkKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
UGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VU
YWJsZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2VFbGVtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2Vy
OjpwYXJzZUNvZGUpOiBhdm9pZCBvdmVyZmxvdyB0aHJvdWdoIGZ1bmN0aW9uIHNpemUuCisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKToKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpt
b2R1bGVJbmZvcm1hdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtUGFyc2VyLmg6CisgICAgICAg
IChKU0M6Oldhc206OlBhcnNlcjo6Y29uc3VtZVVURjhTdHJpbmcpOiBhZGQgYXMgcmVxdWlyZWQg
Ynkgc3BlYworICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlRXh0ZXJuYWxLaW5kKTog
YWRkIGFzIHBlciBzcGVjCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46OlBsYW4pOiBmaXggc29tZSBvd25lcnNoaXAsIGltcHJvdmUgc29tZSBl
cnJvciBtZXNzYWdlcworICAgICAgICAqIHdhc20vV2FzbVBsYW4uaDogZml4IHNvbWUgb3duZXJz
aGlwCisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmdldE1vZHVsZUluZm9ybWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Z2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
UGxhbjo6Y29tcGlsZWRGdW5jdGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6
Y29tcGlsZWRGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmdldENvbXBpbGVk
RnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9ucy5oOiBtYWNyb2l6ZSB3aXRo
IGRlc2NyaXB0aW9uLCBzbyB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBzdXBlciBwcmV0dHkuIFRo
aXMgY291bGQgYmUgYXV0by1nZW5lcmF0ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRl
KTogdGFrZSBtb2R1bGUgaW5mb3JtYXRpb24KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6IGRpdHRvCisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1v
ZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSk6IGNoZWNrIHRoYXQgbW9kdWxlcyB3aXRoIGltcG9ydHMgYXJlIGluc3RhbnRpYXRlZCB3
aXRoIGFuIGltcG9ydCBvYmplY3QsIGFzIHBlciBzcGVjLiBUaGlzIG5lZWRzIHRvIGJlIHRlc3Rl
ZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlUYWJsZSk6CisKIDIwMTYtMTEtMDMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyBuZWVkIHRvIGFsc28gc3VwcG9ydCBoYXZlQUJh
ZFRpbWUgbW9kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTk5NzM0MC4uNjAw
Y2EzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyOTUsNyArMTI5NSw2IEBA
CiAJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3
QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLzsgfTsKIAkJNTNGRjdG
OTkxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRjdGOTgxREJGQ0Q5MDAwQTI2Q0NDIC8qIFdh
c21WYWxpZGF0ZS5oICovOyB9OwogCQk1M0ZGN0Y5QjFEQkZEMkI5MDBBMjZDQ0MgLyogV2FzbVZh
bGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRkY3RjlBMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwICovOyB9OwotCQk1
M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZGN0Y5QzFEQzAwREIxMDBBMjZDQ0Mg
LyogV2FzbUZvcm1hdC5jcHAgKi87IH07CiAJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBK
U0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLzsg
fTsKIAkJNUI3MENGREYxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEOTFEQjY5
RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmNwcCAqLzsgfTsKIAkJNUI3MENGRTAxREI2
OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkRBMURCNjlFNUMwMEVDMjNGOSAv
KiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggKi87IH07CkBAIC0xOTkwLDYgKzE5ODksNyBAQAog
CQlBRDJGQ0MyRDFEQjgzOEZEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMkZDQzI3MURCODM4
QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5oICovOyB9OwogCQlBRDJGQ0MzMDFE
QjgzRDQ5MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MyRTFEQjgzOUY3MDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseS5jcHAgKi87IH07CiAJCUFEMkZDQzMxMURCODNENDkwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRDJGQ0MyRjFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5oICovOyB9OworCQlB
RDJGQ0MzMzFEQzQwNDU0MDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYg
LyogV2FzbUZvcm1hdC5jcHAgKi87IH07CiAJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBX
ZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRDg2QTkzRDFBQTREODdDMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFEREIxRjYz
MThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3Bh
cXVlUm9vdFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMUNGMDY4MTZEQ0FC
MkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCAqLzsgfTsKQEAgLTM2NjIsNyArMzY2Miw2
IEBACiAJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkY3Rjk4MURCRkNEOTAwMEEyNkND
QyAvKiBXYXNtVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Fz
bVZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkY3RjlBMURCRkQy
QjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbVZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTNGRjdGOUMxREMwMERCMTAwQTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAv
KiBKU0FzeW5jRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNBc3luY0Z1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3
MENGREExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQzOSw2ICs0NDM4LDcgQEAKIAkJQUQyRkNDMjcx
REI4MzhDNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5UHJvdG90eXBlLmg7IHBhdGggPSBqcy9XZWJB
c3NlbWJseVByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDJGQ0My
RTFEQjgzOUY3MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkFzc2VtYmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQUQyRkNDMkYxREI4MzlGNzAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJBc3NlbWJseS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZv
cm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtRm9ybWF0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0QxQUE0RDg3QzAwMkZF
NzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2Vha0dDTWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERC
MUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUI1OUY4OTM3MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3Ry
ZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rp
b25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5NTUsNyArNTk1NSw3
IEBACiAJCQkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmgg
Ki8sCiAJCQkJNTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlv
bi5jcHAgKi8sCiAJCQkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29u
dmVudGlvbi5oICovLAotCQkJCTUzRkY3RjlDMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0
LmNwcCAqLywKKwkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAg
Ki8sCiAJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLywKIAkJ
CQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCiAJ
CQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuY3BwICovLApAQCAtOTg3
NCw2ICs5ODc0LDcgQEAKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRU
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJ
bmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcx
MDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBRDJGQ0Mz
MzFEQzQwNDU0MDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0NDAwRjNDN0NCIC8qIEluamVj
dGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdhc20u
Y3BwCmluZGV4IDZlM2Y1ZDIuLjkyNjNiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0V2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNw
cApAQCAtMjc2LDEzICsyNzYsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tQbGFuKFBsYW4mIHBsYW4s
IHVuc2lnbmVkIGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpCiAgICAgICAgIENSQVNIKCk7CiAg
ICAgfQogCi0gICAgaWYgKHBsYW4ucmVzdWx0U2l6ZSgpICE9IGV4cGVjdGVkTnVtYmVyT2ZGdW5j
dGlvbnMpIHsKKyAgICBpZiAocGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKSAhPSBleHBlY3Rl
ZE51bWJlck9mRnVuY3Rpb25zKSB7CiAgICAgICAgIGRhdGFMb2dMbigiSW5jb3JyZWN0IG51bWJl
ciBvZiBmdW5jdGlvbnMiKTsKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhwZWN0ZWROdW1iZXJPZkZ1bmN0aW9uczsgKytpKSB7Ci0gICAg
ICAgIGlmICghcGxhbi5yZXN1bHQoaSkpIHsKKyAgICAgICAgaWYgKCFwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oaSkpIHsKICAgICAgICAgICAgIGRhdGFMb2dMbigiRnVuY3Rpb24gYXQgaW5kZXgsICIg
LCBpLCAiIGZhaWxlZCB0byBjb21waWxlIGNvcnJlY3RseSIpOwogICAgICAgICAgICAgQ1JBU0go
KTsKICAgICAgICAgfQpAQCAtMzIwLDggKzMyMCw4IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0
cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMg
ZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwKSwgYm94ZigzMikgfSksIDEpKTsK
LSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94ZigxKSwgYm94ZigzMikgfSksIDIpKTsKKyAgICAgICAgQ0hFQ0so
aXNJZGVudGljYWwoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveGYoMCksIGJveGYoMzIpIH0pLCAxKSk7CisgICAgICAgIENIRUNLKGlzSWRl
bnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3hmKDEpLCBib3hmKDMyKSB9KSwgMikpOwogICAgIH0KIAogICAgIHsKQEAgLTM0Nyw4
ICszNDcsOCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4o
cGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveGYoMCksIGJveGYoMzIpIH0pLCAxKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRp
Y2FsKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMSks
IGJveGYoMzIpIH0pLCAyKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDApLCBib3hm
KDMyKSB9KSwgMSkpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxKSwgYm94ZigzMikg
fSksIDIpKTsKICAgICB9CiAKICAgICB7CkBAIC0zODUsMTQgKzM4NSwxNCBAQCBzdGF0aWMgdm9p
ZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpLCBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAx
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCks
IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgyKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMiksIGJveCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0p
LCAwKTsKICAgICB9CiAKICAgICB7CkBAIC00MTUsMTAgKzQxNSwxMCBAQCBzdGF0aWMgdm9pZCBy
dW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7CiAKICAgICAgICAgLy8g
VGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9r
ZTxmbG9hdD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hm
KDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9h
dD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYo
MTIuNSkgfSksIDg3LjYyMzRmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxm
bG9hdD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEu
NSkgfSksIC0xLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4o
KnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIu
NSkgfSksIDg3LjYyMzRmKSk7CisgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9h
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMC4wKSwg
Ym94ZigxLjUpIH0pLCAtMS41ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8
ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3hmKDEw
MC4xMjM0KSwgYm94ZigxMi41KSB9KSwgODcuNjIzNGYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVu
dGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7CisgICAgICAgIENIRUNLKGlz
SWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCA4Ny42MjM0ZikpOwogICAg
IH0KIAogICAgIHsKQEAgLTQ0MSwxMCArNDQxLDEwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0
cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAyKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMg
ZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0Pigq
cGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwg
MS41ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJl
c3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAx
MTIuNjIzNGYpKTsKLSAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3hmKDAuMCksIGJveGYoMS41KSB9KSwgMS41
ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveGYoMTAwLjEyMzQpLCBib3hmKDEyLjUpIH0pLCAxMTIu
NjIzNGYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxhbi5j
b21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigwLjApLCBib3hmKDEuNSkg
fSksIDEuNWYpKTsKKyAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94ZigxMDAuMTIzNCksIGJv
eGYoMTIuNSkgfSksIDExMi42MjM0ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZv
a2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3hm
KDAuMCksIGJveGYoMS41KSB9KSwgMS41ZikpOworICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZmxvYXQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBi
b3hmKDEwMC4xMjM0KSwgYm94ZigxMi41KSB9KSwgMTEyLjYyMzRmKSk7CiAgICAgfQogCiAgICAg
ewpAQCAtNDcyLDExICs0NzIsMTEgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAg
ICAgY2hlY2tQbGFuKHBsYW4sIDIpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50
cnlQb2ludCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTIwMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7
IGJveCgxKSB9KSwgMTIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSwgYm94KDMpLCBib3goNCksIGJv
eCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3goMTApLCBib3goMTEpLCBi
b3goMTIpIH0pLCA3OCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0KSwgYm94
KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgxMCksIGJveCgxMSksIGJv
eCgxMDApIH0pLCAxNjYpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBv
aW50LCB7IGJveCgxMDApIH0pLCAxMjAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMTIp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQpLCBib3goNSks
IGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDExKSwgYm94KDEy
KSB9KSwgNzgpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQp
LCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDEx
KSwgYm94KDEwMCkgfSksIDE2Nik7CiAgICAgfQogCiAgICAgewpAQCAtNTAzLDEwICs1MDMsMTAg
QEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEp
OwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSks
IDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50
cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMikgfSksIDIpOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
NCkgfSksIDI0KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwg
eyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBv
aW50LCB7IGJveCg0KSB9KSwgMjQpOwogICAgIH0KIAogICAgIHsKQEAgLTUyNiwxOCArNTI2LDE4
IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIH07CiAKICAgICAgICAgUGxh
biBwbGFuKCp2bSwgdmVjdG9yKTsKLSAgICAgICAgaWYgKHBsYW4ucmVzdWx0U2l6ZSgpICE9IDIg
fHwgIXBsYW4ucmVzdWx0KDApIHx8ICFwbGFuLnJlc3VsdCgxKSkgeworICAgICAgICBpZiAocGxh
bi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKSAhPSAyIHx8ICFwbGFuLmNvbXBpbGVkRnVuY3Rpb24o
MCkgfHwgIXBsYW4uY29tcGlsZWRGdW5jdGlvbigxKSkgewogICAgICAgICAgICAgZGF0YUxvZ0xu
KCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5LiIpOwogICAgICAgICAgICAgQ1JB
U0goKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2lu
dCwgeyBib3goMCksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEw
MCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgxKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDE1KSB9KSwgMTYpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMTAwKSB9KSwgMjAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAyKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50
LCB7IGJveCgwKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uY29tcGlsZWRGdW5jdGlvbigxKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3go
MCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgxNSkgfSksIDE2KTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwg
MjAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMik7CiAgICAgfQogCiAgICAgewpAQCAt
NTYwLDEyICs1NjAsMTIgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hl
Y2tQbGFuKHBsYW4sIDIpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMSktPmpzRW50cnlQb2lu
dCwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5y
ZXN1bHQoMSktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDEpLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEp
IH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDEpLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMSktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDAp
IH0pLCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1
bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKICAgICB9CiAKICAgICB7
CkBAIC01ODksOSArNTg5LDkgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAg
Y2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNo
LgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0p
LCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0p
LCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQog
CiAgICAgewpAQCAtNjE2LDkgKzYxNiw5IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAg
ICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEwMCkgfSksIDEpOwog
ICAgIH0KIAogICAgIHsKQEAgLTY1Nyw3ICs2NTcsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVz
dHMoKQogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBzaXplb2YodWludDMyX3QpOwogICAgICAgICB1aW50MzJfdCogbWVtb3J5ID0gc3RhdGlj
X2Nhc3Q8dWludDMyX3QqPihwbGFuLm1lbW9yeSgpLT5tZW1vcnkoKSk7Ci0gICAgICAgIGludm9r
ZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KG9m
ZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94
KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwogICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKQEAgLTY2Niw3ICs2NjYsNyBAQCBzdGF0aWMgdm9p
ZCBydW5XYXNtVGVzdHMoKQogCiAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgICAgICBvZmZzZXQg
PSA1ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0p
OworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBv
ZmZzZXQgLz0gc2l6ZW9mKHVpbnQzMl90KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNl
dCAtIDFdLCAxMDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0s
IDB1KTsKQEAgLTcwOSw3ICs3MDksNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSA1OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOwog
ICAgICAgICB1aW50OF90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ocGxhbi5tZW1v
cnkoKS0+bWVtb3J5KCkpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAg
ICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOwogICAgICAgICBDSEVD
S19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29m
ZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQpAQCAtNzE3LDcgKzcxNyw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygp
CiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDU7Ci0gICAgICAgIGlu
dm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChv
ZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3go
bGVuZ3RoKSB9KTsKICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCAtIDFdLCAxMDB1KTsK
ICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpAQCAtNzQ3LDkgKzc0Nyw5IEBA
IHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIEFTU0VSVChwbGFuLm1lbW9yeSgp
LT5zaXplKCkpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2lu
dCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94
KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQogCiAgICAgewpA
QCAtNzc0LDkgKzc3NCw5IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNo
ZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4K
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCkgfSksIDEwMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEwMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSkgfSksIDEpOwogICAgIH0K
IAogICAgIHsKQEAgLTgwMSwxMCArODAxLDEwIEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygp
CiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCks
IGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgtMTIpLCBib3gocGxhbi5tZW1vcnkoKS0+c2l6ZSgpIC0gc2l6ZW9mKHVpbnQ2NF90KSkgfSks
IC0xMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rp
b24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwg
Ym94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0xMiksIGJveChwbGFuLm1lbW9y
eSgpLT5zaXplKCkgLSBzaXplb2YodWludDY0X3QpKSB9KSwgLTEyKTsKICAgICB9CiAKICAgICB7
CkBAIC04MjksOSArODI5LDkgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAg
Y2hlY2tQbGFuKHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNo
LgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0p
LCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgwKSwgYm94KDEwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDIpIH0p
LCAxMDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMTAwKSB9KSwgMSk7CiAgICAgfQog
CiAgICAgewpAQCAtODcwLDcgKzg3MCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNp
emVvZih1aW50MzJfdCk7CiAgICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+
KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwg
Ym94KGxlbmd0aCkgfSk7CisgICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveChvZmZzZXQpLCBib3gobGVuZ3Ro
KSB9KTsKICAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7CiAgICAgICAgIENIRUNL
X0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zm
c2V0ICsgbGVuZ3RoXSwgMHUpOwpAQCAtODc5LDcgKzg3OSw3IEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAKICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgICAgIG9mZnNldCA9IDUgKiBz
aXplb2YodWludDMyX3QpOwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CisgICAg
ICAgIGludm9rZTx2b2lkPigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIG9mZnNldCAv
PSBzaXplb2YodWludDMyX3QpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0s
IDEwMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwpA
QCAtOTIyLDcgKzkyMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IDU7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CiAgICAgICAg
IHVpbnQ4X3QqIG1lbW9yeSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihwbGFuLm1lbW9yeSgpLT5t
ZW1vcnkoKSk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KG9mZnNldCksIGJveChsZW5ndGgpIH0pOworICAgICAgICBp
bnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7CiAgICAgICAgIENIRUNLX0VRKG1l
bW9yeVtvZmZzZXQgLSAxXSwgMHUpOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsg
bGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCkBAIC05MzAsNyArOTMwLDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIAogICAg
ICAgICBsZW5ndGggPSAxMDsKICAgICAgICAgb2Zmc2V0ID0gNTsKLSAgICAgICAgaW52b2tlPHZv
aWQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCks
IGJveChsZW5ndGgpIH0pOworICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uY29tcGlsZWRGdW5j
dGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCg1KSwgYm94KG9mZnNldCksIGJveChsZW5ndGgp
IH0pOwogICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDEwMHUpOwogICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCkBAIC05NjAsOSArOTYwLDkgQEAgc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUo
KSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwg
Ym94KDEwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDEwMCkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMTApIH0p
LCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlv
bigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMikgfSksIDEwMCk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKICAgICB9CiAKICAgICB7CkBAIC05ODcs
OSArOTg3LDkgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFu
KHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBi
b3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQo
MCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSB9KSwgMSk7CiAgICAgfQogCiAgICAg
ewpAQCAtMTAxNCwxNCArMTAxNCwxNCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAg
ICAgICBjaGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3Qg
Y3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMCkg
fSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIp
IH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMikgfSksIDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgx
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJv
eCg2KSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVk
RnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50
cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiks
IGJveCgxKSB9KSwgMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBp
bGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3go
MSksIGJveCgxKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNv
bXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7
CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAxKTsKICAgICB9CiAKICAgICB7
CkBAIC0xMDUyLDE0ICsxMDUyLDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAg
ICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9
KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikg
fSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpz
RW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDEp
IH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94
KDYpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRy
eVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwg
Ym94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgx
KSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAogCkBAIC0x
MDc2LDcgKzEwNzYsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVj
a1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50
LCB7IH0pLCA1KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IH0pLCA1KTsKICAgICB9CiAKIApAQCAtMTA5NCw3
ICsxMDk0LDcgQEAgc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgY2hlY2tQbGFu
KHBsYW4sIDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyB9
KSwgMTEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgfSksIDExKTsKICAgICB9CiAKICAgICB7CkBAIC0xMTEx
LDcgKzExMTEsNyBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBjaGVja1Bs
YW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7
IH0pLCAxMSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyB9KSwgMTEpOwogICAgIH0KIAogICAgIHsKQEAgLTEx
MjgsNyArMTEyOCw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQs
IHsgfSksIDExKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IH0pLCAxMSk7CiAgICAgfQogCiAgICAgewpAQCAt
MTE0NCwxMCArMTE0NCwxMCBAQCBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogICAgICAgICBj
aGVja1BsYW4ocGxhbiwgMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2gu
Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBv
aW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwMCksIGJveCgxKSB9KSwg
MTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KC0xKSwgYm94KDEpfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptaW4oKSk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQ
b2ludCwgeyBib3goMTAwKSwgYm94KDEpIH0pLCAxMDEpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KC0x
KSwgYm94KDEpfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpLCBib3goMSkgfSksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkp
OwogICAgIH0KIAogICAgIHsKQEAgLTExNzAsOCArMTE3MCw4IEBAIHN0YXRpYyB2b2lkIHJ1bldh
c21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0
IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEwKSB9
KSwgMTApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMCkgfSksIDEwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMjAzLDEwICsxMjAzLDEwIEBAIHN0
YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAog
ICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpfSksIDMpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9
KSwgNTA1MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKX0pLCAzKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50
LCB7IGJveCgxMDApIH0pLCA1MDUwKTsKICAgICB9CiAKICAgICB7CkBAIC0xMjQ0LDE0ICsxMjQ0
LDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIGNoZWNrUGxhbihwbGFu
LCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
LCBib3goMSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1
bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgy
KSwgYm94KDEpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVz
dWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3go
MiksIGJveCgyKSB9KSwgNCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJl
c3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxMDApLCBib3goNikgfSksIDYwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAw
MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9u
KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQs
IHsgYm94KDEpLCBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goMSkg
fSksIDIpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0
aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMikgfSksIDIpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDIpLCBib3goMikgfSksIDQpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
PigqcGxhbi5jb21waWxlZEZ1bmN0aW9uKDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3go
NikgfSksIDEyKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRG
dW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDYwMCk7Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpz
RW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDEwMCkgfSksIDEwMDAwKTsKICAgICB9CiAKICAg
ICB7CkBAIC0xMjk0LDE0ICsxMjk0LDE0IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAg
ICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKIAogICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24n
dCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMSksIGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDApLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3go
MikgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdCgwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDEpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0KDAp
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5yZXN1bHQoMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwg
Ym94KDYpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGls
ZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNF
bnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgy
KSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29t
cGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+
anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJv
eCgxKSwgYm94KDEpIH0pLCAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
Y29tcGlsZWRGdW5jdGlvbigwKS0+anNFbnRyeVBvaW50LCB7IGJveCgyKSwgYm94KDYpIH0pLCAx
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uY29tcGlsZWRGdW5jdGlvbigw
KS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcAppbmRleCAyYmRjODAwLi5i
ZjhlMzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcApAQCAt
MjQsMTAgKzI0LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiV2Fz
bU1lbW9yeS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBjb25zdCBj
aGFyKiB0b1N0cmluZyhUeXBlIHR5cGUpCkBAIC00Niw2ICs0OSw4IEBAIGNvbnN0IGNoYXIqIHRv
U3RyaW5nKFR5cGUgdHlwZSkKICAgICB9CiB9CiAKK01vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxl
SW5mb3JtYXRpb24oKSB7IH0KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAotI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDgyODZhZWYuLjQ5OTY0NGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTIxLDIzICsyMSw2IEBA
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDE1IGJ5IHRoZSByZXBvc2l0b3J5IGF1
dGhvcnMgb2YKLSAqIFdlYkFzc2VtYmx5L3BvbHlmaWxsLXByb3RvdHlwZS0xLgotICoKLSAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0Ci0gKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKICNw
cmFnbWEgb25jZQpAQCAtOTgsMzcgKzgxLDgzIEBAIGlubGluZSBib29sIGlzVmFsdWVUeXBlKFR5
cGUgdHlwZSkKIH0KIAogY29uc3QgY2hhciogdG9TdHJpbmcoVHlwZSk7CisgICAgCitzdHJ1Y3Qg
RXh0ZXJuYWwgeworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBGdW5jdGlvbiA9
IDAsCisgICAgICAgIFRhYmxlID0gMSwKKyAgICAgICAgTWVtb3J5ID0gMiwKKyAgICAgICAgR2xv
YmFsID0gMywKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludD4KKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkKEludCB2YWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKHZhbCkgeworICAg
ICAgICBjYXNlIEZ1bmN0aW9uOgorICAgICAgICBjYXNlIFRhYmxlOgorICAgICAgICBjYXNlIE1l
bW9yeToKKyAgICAgICAgY2FzZSBHbG9iYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBzdGF0aWNfYXNzZXJ0KEZ1bmN0aW9uID09IDAsICJXYXNtIG5lZWRzIEZ1
bmN0aW9uIHRvIGhhdmUgdGhlIHZhbHVlIDAiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KFRhYmxlICAg
ID09IDEsICJXYXNtIG5lZWRzIFRhYmxlIHRvIGhhdmUgdGhlIHZhbHVlIDEiKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KE1lbW9yeSAgID09IDIsICJXYXNtIG5lZWRzIE1lbW9yeSB0byBoYXZlIHRoZSB2
YWx1ZSAyIik7CisgICAgc3RhdGljX2Fzc2VydChHbG9iYWwgICA9PSAzLCAiV2FzbSBuZWVkcyBH
bG9iYWwgdG8gaGF2ZSB0aGUgdmFsdWUgMyIpOworfTsKIAogc3RydWN0IFNpZ25hdHVyZSB7CiAg
ICAgVHlwZSByZXR1cm5UeXBlOwogICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7CiB9OwotCi1z
dHJ1Y3QgRnVuY3Rpb25JbXBvcnQgewotICAgIFN0cmluZyBmdW5jdGlvbk5hbWU7CisgICAgCitz
dHJ1Y3QgSW1wb3J0IHsKKyAgICBTdHJpbmcgbW9kdWxlOworICAgIFN0cmluZyBmaWVsZDsKKyAg
ICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgU2lnbmF0dXJlKiBm
dW5jdGlvblNpZ25hdHVyZTsKKyAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKKyAgICAgICAgLy8gRklY
TUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MTM0CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworICAgIH07CiB9OwogCi1zdHJ1Y3Qg
RnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgewotICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4Owot
ICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXg7CitzdHJ1Y3QgRnVuY3Rpb25JbmZvcm1h
dGlvbiB7CisgICAgU2lnbmF0dXJlKiBzaWduYXR1cmU7CisgICAgc2l6ZV90IHN0YXJ0OworICAg
IHNpemVfdCBlbmQ7CiB9OwogCi1zdHJ1Y3QgRnVuY3Rpb25EZWNsYXJhdGlvbiB7Ci0gICAgdWlu
dDMyX3Qgc2lnbmF0dXJlSW5kZXg7CitjbGFzcyBNZW1vcnk7CisKK3N0cnVjdCBFeHBvcnQgewor
ICAgIFN0cmluZyBmaWVsZDsKKyAgICBFeHRlcm5hbDo6S2luZCBraW5kOworICAgIHVuaW9uIHsK
KyAgICAgICAgU2lnbmF0dXJlKiBmdW5jdGlvblNpZ25hdHVyZTsKKyAgICAgICAgLy8gRklYTUUg
aW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQxMzUKKyAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAgIC8vIEZJWE1FIGltcGxlbWVu
dCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwor
ICAgIH07CiB9OwogCi1zdHJ1Y3QgRnVuY3Rpb25Qb2ludGVyVGFibGUgewotICAgIHVpbnQzMl90
IHNpZ25hdHVyZUluZGV4OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gZnVuY3Rpb25JbmRpY2VzOwot
ICAgIFZlY3RvcjxKU0Z1bmN0aW9uKj4gZnVuY3Rpb25zOwotfTsKK3N0cnVjdCBNb2R1bGVJbmZv
cm1hdGlvbiB7CisgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKKyAgICBWZWN0b3I8
SW1wb3J0PiBpbXBvcnRzOworICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBmdW5jdGlv
bnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIFZlY3RvcjxFeHBv
cnQ+IGV4cG9ydHM7CiAKLXN0cnVjdCBGdW5jdGlvbkluZm9ybWF0aW9uIHsKLSAgICBTaWduYXR1
cmUqIHNpZ25hdHVyZTsKLSAgICBzaXplX3Qgc3RhcnQ7Ci0gICAgc2l6ZV90IGVuZDsKKyAgICB+
TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CiAKK3N0cnVjdCBGdW5jdGlvbkNvbXBpbGF0aW9uOwor
dHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+PiBDb21w
aWxlZEZ1bmN0aW9uczsKKwogc3RydWN0IFVubGlua2VkQ2FsbCB7CiAgICAgQ29kZUxvY2F0aW9u
Q2FsbCBjYWxsTG9jYXRpb247CiAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDU1YzIxMmUu
LmIwMzViNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRl
ICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKQEAgLTQwLDYgKzQxLDgg
QEAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiBib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2UoKQogeworICAgIG1fbW9kdWxlID0gc3RkOjptYWtlX3VuaXF1ZTxNb2R1bGVJbmZv
cm1hdGlvbj4oKTsKKwogICAgIGNvbnN0IHNpemVfdCBtaW5TaXplID0gODsKICAgICBpZiAobGVu
Z3RoKCkgPCBtaW5TaXplKSB7CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIk1vZHVsZSBpcyAi
ICsgU3RyaW5nOjpudW1iZXIobGVuZ3RoKCkpICsgIiBieXRlcywgZXhwZWN0ZWQgYXQgbGVhc3Qg
IiArIFN0cmluZzo6bnVtYmVyKG1pblNpemUpICsgIiBieXRlcyI7CkBAIC0xMTEsNTQgKzExNCwy
MCBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBhdXRvIGVuZCA9IG1fb2Zm
c2V0ICsgc2VjdGlvbkxlbmd0aDsKIAogICAgICAgICBzd2l0Y2ggKHNlY3Rpb24pIHsKLQotICAg
ICAgICBjYXNlIFNlY3Rpb25zOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyBNZW1vcnkuIik7Ci0gICAgICAgICAg
ICBpZiAoIXBhcnNlTWVtb3J5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRSBpbXByb3Zl
IGVycm9yIG1lc3NhZ2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MzkxOQotICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gImNvdWxkbid0IHBhcnNlIG1l
bW9yeSI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpGdW5j
dGlvblR5cGVzOiB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIlBhcnNpbmcgdHlwZXMuIik7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlRnVuY3Rp
b25UeXBlcygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wcm92ZSBlcnJvciBtZXNz
YWdlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5MTkKLSAgICAg
ICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJjb3VsZG4ndCBwYXJzZSB0eXBlcyI7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25zOjpTaWduYXR1cmVzOiB7Ci0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIlBhcnNp
bmcgZnVuY3Rpb24gc2lnbmF0dXJlcy4iKTsKLSAgICAgICAgICAgIGlmICghcGFyc2VGdW5jdGlv
blNpZ25hdHVyZXMoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3Ig
bWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0g
ICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291bGRuJ3QgcGFyc2UgZnVuY3Rpb24g
c2lnbmF0dXJlcyI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFNlY3Rpb25z
OjpEZWZpbml0aW9uczogewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJQYXJzaW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zLiIpOwotICAgICAgICAg
ICAgaWYgKCFwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYzOTE5Ci0gICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiY291
bGRuJ3QgcGFyc2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMiOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBTZWN0aW9uczo6VW5rbm93bjoKLSAgICAgICAgLy8gRklYTUU6IERlbGV0
ZSB0aGlzIHdoZW4gd2Ugc3VwcG9ydCBhbGwgdGhlIHNlY3Rpb25zLgotICAgICAgICBkZWZhdWx0
OiB7CisgICAgICAgIC8vIEZJWE1FIGltcHJvdmUgZXJyb3IgbWVzc2FnZSBpbiBtYWNybyBiZWxv
dyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzOTE5CisjZGVmaW5l
IFdBU01fU0VDVElPTl9QQVJTRShOQU1FLCBJRCwgREVTQ1JJUFRJT04pIFwKKyAgICAgICAgY2Fz
ZSBTZWN0aW9uczo6TkFNRTogeyBcCisgICAgICAgICAgICBpZiAodmVyYm9zZSkgXAorICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiUGFyc2luZyAiIERFU0NSSVBUSU9OKTsgXAorICAgICAgICAg
ICAgaWYgKCFwYXJzZSAjIyBOQU1FKCkpIHsgXAorICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNz
YWdlID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gIiAjTkFNRSAiOiAiIERFU0NSSVBUSU9OOyBc
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAgICAgICB9IFwKKyAgICAg
ICAgfSBicmVhazsKKyAgICAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9Q
QVJTRSkKKyN1bmRlZiBXQVNNX1NFQ1RJT05fUEFSU0UKKworICAgICAgICBjYXNlIFNlY3Rpb25z
OjpVbmtub3duOiB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIlVua25vd24gc2VjdGlvbiwgc2tpcHBpbmcuIik7CiAgICAgICAgICAgICAvLyBJ
Z25vcmUgc2VjdGlvbidzIG5hbWUgTEVCIGFuZCBieXRlczogdGhleSdyZSBhbHJlYWR5IGluY2x1
ZGVkIGluIHNlY3Rpb25MZW5ndGguCkBAIC0xODQsNTAgKzE1MywyMSBAQCBib29sIE1vZHVsZVBh
cnNlcjo6cGFyc2UoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VNZW1vcnkoKQotewotICAgIHVpbnQ4X3QgZmxhZ3M7Ci0gICAgaWYgKCFwYXJzZVZhclVJ
bnQxKGZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDMyX3Qgc2l6ZTsK
LSAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKHNpemUgPiBtYXhQYWdlQ291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHVpbnQzMl90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OwotICAgIGlmIChmbGFncykgewotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VD
b3VudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYXBhY2l0eSAq
PSBwYWdlU2l6ZTsKLSAgICBzaXplICo9IHBhZ2VTaXplOwotCi0gICAgVmVjdG9yPHVuc2lnbmVk
PiBwaW5uZWRTaXplcyA9IHsgMCB9OwotICAgIG1fbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxN
ZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7Ci0gICAgcmV0dXJuIG1fbWVtb3J5
LT5tZW1vcnkoKTsKLX0KLQotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlcygp
Citib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUeXBlKCkKIHsKICAgICB1aW50MzJfdCBjb3VudDsK
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNvdW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiY291bnQ6ICIsIGNvdW50KTsK
LQotICAgIG1fc2lnbmF0dXJlcy5yZXNpemUoY291bnQpOworICAgIGlmICghbV9tb2R1bGUtPnNp
Z25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
dWludDhfdCB0eXBlOwotICAgICAgICBpZiAoIXBhcnNlVUludDcodHlwZSkpCisgICAgICAgIGlu
dDhfdCB0eXBlOworICAgICAgICBpZiAoIXBhcnNlSW50Nyh0eXBlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUgIT0gMHg0MCkgLy8gRnVuY3Rpb24gdHlwZSBj
b25zdGFudC4KKyAgICAgICAgaWYgKHR5cGUgIT0gLTB4MjApIC8vIEZ1bmN0aW9uIHR5cGUgY29u
c3RhbnQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKHZlcmJvc2Up
CkBAIC0yNDEsMjIgKzE4MSwyNSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblR5
cGVzKCkKICAgICAgICAgICAgIGRhdGFMb2dMbigiYXJndW1lbnRDb3VudDogIiwgYXJndW1lbnRD
b3VudCk7CiAKICAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIGFy
Z3VtZW50VHlwZXMucmVzaXplKGFyZ3VtZW50Q291bnQpOworICAgICAgICBpZiAoIWFyZ3VtZW50
VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VVSW50Nyh0eXBlKSB8fCAhaXNWYWx1
ZVR5cGUoc3RhdGljX2Nhc3Q8VHlwZT4odHlwZSkpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICAgICAgdWludDhfdCBhcmd1
bWVudFR5cGU7CisgICAgICAgICAgICBpZiAoIXBhcnNlVUludDcoYXJndW1lbnRUeXBlKSB8fCAh
aXNWYWx1ZVR5cGUoc3RhdGljX2Nhc3Q8VHlwZT4oYXJndW1lbnRUeXBlKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXJndW1lbnRUeXBlc1tpXSA9IHN0YXRp
Y19jYXN0PFR5cGU+KHR5cGUpOworICAgICAgICAgICAgYXJndW1lbnRUeXBlcy51bmNoZWNrZWRB
cHBlbmQoc3RhdGljX2Nhc3Q8VHlwZT4oYXJndW1lbnRUeXBlKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDEodHlwZSkpCisgICAgICAgIHVpbnQ4X3QgcmV0dXJuQ291
bnQ7CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MShyZXR1cm5Db3VudCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFR5cGUgcmV0dXJuVHlwZTsKIAogICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dMbih0eXBlKTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbihyZXR1cm5Db3VudCk7CiAKLSAgICAgICAgaWYgKHR5cGUpIHsKKyAgICAgICAgaWYgKHJl
dHVybkNvdW50KSB7CiAgICAgICAgICAgICBUeXBlIHZhbHVlOwogICAgICAgICAgICAgaWYgKCFw
YXJzZVZhbHVlVHlwZSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjY0LDQ4ICsyMDcsMTk1IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uVHlwZXMo
KQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUeXBlOjpWb2lkOwog
Ci0gICAgICAgIG1fc2lnbmF0dXJlc1tpXSA9IHsgcmV0dXJuVHlwZSwgV1RGTW92ZShhcmd1bWVu
dFR5cGVzKSB9OworICAgICAgICBtX21vZHVsZS0+c2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQo
eyByZXR1cm5UeXBlLCBXVEZNb3ZlKGFyZ3VtZW50VHlwZXMpIH0pOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25TaWduYXR1cmVz
KCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCit7CisgICAgdWludDMyX3QgaW1w
b3J0Q291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbXBvcnRDb3VudCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fbW9kdWxlLT5pbXBvcnRzLnRyeVJlc2VydmVDYXBh
Y2l0eShpbXBvcnRDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodWlu
dDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVyICE9IGltcG9ydENvdW50OyArK2lt
cG9ydE51bWJlcikgeworICAgICAgICBJbXBvcnQgaTsKKyAgICAgICAgdWludDMyX3QgbW9kdWxl
TGVuOworICAgICAgICB1aW50MzJfdCBmaWVsZExlbjsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihtb2R1bGVMZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWNvbnN1bWVVVEY4U3RyaW5nKGkubW9kdWxlLCBtb2R1bGVMZW4pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZpZWxkTGVuKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjb25zdW1lVVRGOFN0cmluZyhpLmZp
ZWxkLCBmaWVsZExlbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
cGFyc2VFeHRlcm5hbEtpbmQoaS5raW5kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgc3dpdGNoIChpLmtpbmQpIHsKKyAgICAgICAgY2FzZSBFeHRlcm5hbDo6RnVuY3Rpb246
IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7CisgICAgICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvblNpZ25hdHVy
ZUluZGV4ID4gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGkuZnVuY3Rpb25TaWduYXR1cmUgPSAmbV9tb2R1bGUt
PnNpZ25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF07CisgICAgICAgIH0gYnJlYWs7Cisg
ICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOgorICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1lbW9yeToKKyAgICAgICAgICAgIC8vIEZJWE1F
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4dGVybmFsOjpHbG9iYWw6CisgICAgICAgICAgICAv
LyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCisg
ICAgICAgICAgICAvLyBJbiB0aGUgTVZQLCBvbmx5IGltbXV0YWJsZSBnbG9iYWwgdmFyaWFibGVz
IGNhbiBiZSBpbXBvcnRlZC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgbV9tb2R1bGUtPmltcG9ydHMudW5jaGVja2VkQXBwZW5kKGkpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbigpCiB7CiAg
ICAgdWludDMyX3QgY291bnQ7CiAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihjb3VudCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fbW9kdWxlLT5mdW5jdGlvbnMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9mdW5jdGlv
bnMucmVzaXplKGNvdW50KTsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CiAgICAg
ICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CiAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIodHlw
ZU51bWJlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHR5cGVO
dW1iZXIgPj0gbV9zaWduYXR1cmVzLnNpemUoKSkKKyAgICAgICAgaWYgKHR5cGVOdW1iZXIgPj0g
bV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIG1fZnVuY3Rpb25zW2ldLnNpZ25hdHVyZSA9ICZtX3NpZ25hdHVyZXNbdHlwZU51
bWJlcl07CisgICAgICAgIG1fbW9kdWxlLT5mdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHsgJm1f
bW9kdWxlLT5zaWduYXR1cmVzW3R5cGVOdW1iZXJdLCAwLCAwIH0pOwogICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRp
b25zKCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkKK3sKKyAgICAvLyBGSVhNRQor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQor
eworICAgIHVpbnQ4X3QgZmxhZ3M7CisgICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICBpZiAoIXBhcnNl
VmFyVUludDMyKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNpemUgPiBt
YXhQYWdlQ291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQzMl90IGNhcGFj
aXR5ID0gbWF4UGFnZUNvdW50OworICAgIGlmIChmbGFncykgeworICAgICAgICBpZiAoIXBhcnNl
VmFyVUludDMyKGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKHNpemUgPiBjYXBhY2l0eSB8fCBjYXBhY2l0eSA+IG1heFBhZ2VDb3VudCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKKyAg
ICBzaXplICo9IHBhZ2VTaXplOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5uZWRTaXplcyA9
IHsgMCB9OworICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lbW9yeT4o
c2l6ZSwgY2FwYWNpdHksIHBpbm5lZFNpemVzKTsKKyAgICByZXR1cm4gbV9tb2R1bGUtPm1lbW9y
eS0+bWVtb3J5KCk7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpCit7Cisg
ICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
MworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnQo
KQoreworICAgIHVpbnQzMl90IGV4cG9ydENvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIo
ZXhwb3J0Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX21vZHVsZS0+
ZXhwb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhwb3J0Q291bnQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGV4cG9ydE51bWJlciA9IDA7IGV4cG9ydE51bWJl
ciAhPSBleHBvcnRDb3VudDsgKytleHBvcnROdW1iZXIpIHsKKyAgICAgICAgRXhwb3J0IGU7Cisg
ICAgICAgIHVpbnQzMl90IGZpZWxkTGVuOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZp
ZWxkTGVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjb25zdW1l
VVRGOFN0cmluZyhlLmZpZWxkLCBmaWVsZExlbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtpbmQoZS5raW5kKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChlLmtpbmQpIHsKKyAgICAgICAgY2FzZSBFeHRl
cm5hbDo6RnVuY3Rpb246IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uU2lnbmF0dXJl
SW5kZXg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJl
SW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChm
dW5jdGlvblNpZ25hdHVyZUluZGV4ID4gbV9tb2R1bGUtPnNpZ25hdHVyZXMuc2l6ZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGUuZnVuY3Rpb25TaWduYXR1
cmUgPSAmbV9tb2R1bGUtPnNpZ25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF07CisgICAg
ICAgIH0gYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6OlRhYmxlOgorICAgICAgICAgICAg
Ly8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1lbW9yeToKKyAgICAg
ICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQxMzQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4dGVybmFsOjpHbG9iYWw6
CisgICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTMzCisgICAgICAgICAgICAvLyBJbiB0aGUgTVZQLCBvbmx5IGltbXV0YWJsZSBn
bG9iYWwgdmFyaWFibGVzIGNhbiBiZSBleHBvcnRlZC4KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgbV9tb2R1bGUtPmV4cG9ydHMudW5jaGVja2VkQXBwZW5kKGUpOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VT
dGFydCgpCit7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTcwOQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZHVsZVBhcnNlcjo6
cGFyc2VFbGVtZW50KCkKK3sKKyAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxNzA5CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZUNvZGUoKQogewogICAgIHVpbnQzMl90IGNvdW50OwogICAgIGlmICghcGFy
c2VWYXJVSW50MzIoY291bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY291
bnQgIT0gbV9mdW5jdGlvbnMuc2l6ZSgpKQorICAgIGlmIChjb3VudCAhPSBtX21vZHVsZS0+ZnVu
Y3Rpb25zLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpICE9
IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaXplOwogICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChmdW5jdGlvblNpemUgPiBsZW5ndGgoKSB8fCBmdW5jdGlvblNpemUg
PiBsZW5ndGgoKSAtIG1fb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8gPSBtX2Z1bmN0aW9uc1tpXTsKKyAgICAgICAg
RnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA9IG1fbW9kdWxlLT5mdW5jdGlvbnNbaV07CiAgICAg
ICAgIGluZm8uc3RhcnQgPSBtX29mZnNldDsKICAgICAgICAgaW5mby5lbmQgPSBtX29mZnNldCAr
IGZ1bmN0aW9uU2l6ZTsKICAgICAgICAgbV9vZmZzZXQgPSBpbmZvLmVuZDsKQEAgLTMxNCw2ICs0
MDQsMTIgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9ucygpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKQorewor
ICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3
MDkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCAzODI5M2FjLi44OTliZjIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC0yNyw3ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJXYXNtTWVtb3J5Lmgi
CisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRl
ICJXYXNtUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTYsMjcgKzU2LDE4
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOwogICAgIH0KIAotICAg
IGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25JbmZvcm1hdGlvbigp
IGNvbnN0CisgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5m
b3JtYXRpb24oKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fZnVuY3Rpb25zOwotICAgIH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVt
b3J5PiYgbWVtb3J5KCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7
Ci0gICAgICAgIHJldHVybiBtX21lbW9yeTsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeSgp
OwotICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25UeXBlcygpOwotICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRnVuY3Rpb25TaWduYXR1cmVzKCk7Ci0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb25zKCk7Ci0gICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odWludDMyX3Qg
bnVtYmVyKTsKKyNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKE5BTUUsIElELCBE
RVNDUklQVElPTikgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMgTkFNRSgpOworICAg
IEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCisjdW5k
ZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKLSAgICBWZWN0b3I8RnVuY3Rpb25JbmZv
cm1hdGlvbj4gbV9mdW5jdGlvbnM7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZT4gbV9zaWduYXR1cmVz
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1fbWVtb3J5OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAgICAgYm9vbCBtX2ZhaWxlZCB7IHRy
dWUgfTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBhcnNlci5oCmluZGV4IDQ2YTdiMzkuLjU5MDg3NzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJX
YXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0xFQkRl
Y29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAg
LTQyLDE0ICs0NCwxNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBjb25zdW1lQ2hhcmFjdGVyKGNoYXIpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNv
bnN1bWVTdHJpbmcoY29uc3QgY2hhciopOworICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGNv
bnN1bWVVVEY4U3RyaW5nKFN0cmluZyYsIHNpemVfdCk7CiAKICAgICBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBwYXJzZVZhclVJbnQxKHVpbnQ4X3QmIHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VJbnQ3KGludDhfdCYgcmVzdWx0KTsKICAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJlc3VsdCk7CiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VVSW50MzIodWludDMyX3QmIHJlc3VsdCk7CiAgICAgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MzIodWludDMyX3QmIHJlc3VsdCkgeyByZXR1cm4g
V1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIobV9zb3VyY2UsIG1fc291cmNlTGVuZ3RoLCBt
X29mZnNldCwgcmVzdWx0KTsgfQogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFy
VUludDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2Rl
VUludDY0KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7IH0KIAog
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJlc3VsdCk7
CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFeHRlcm5hbEtpbmQoRXh0ZXJuYWw6
OktpbmQmIHJlc3VsdCk7CiAKICAgICBjb25zdCB1aW50OF90KiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZTsgfQogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZUxlbmd0aDsgfQpAQCAtOTIsNiArOTcsMjEgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNl
cjo6Y29uc3VtZVN0cmluZyhjb25zdCBjaGFyKiBzdHIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OmNvbnN1bWVVVEY4U3RyaW5nKFN0cmluZyYgcmVz
dWx0LCBzaXplX3Qgc3RyaW5nTGVuZ3RoKQoreworICAgIGlmIChzdHJpbmdMZW5ndGggPT0gMCkg
eworICAgICAgICByZXN1bHQgPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGlmIChsZW5ndGgoKSA8IHN0cmluZ0xlbmd0aCB8fCBtX29mZnNldCA+IGxlbmd0aCgp
IC0gc3RyaW5nTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gU3Ry
aW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KCZzb3VyY2UoKVttX29mZnNl
dF0pLCBzdHJpbmdMZW5ndGgpOworICAgIG1fb2Zmc2V0ICs9IHN0cmluZ0xlbmd0aDsKKyAgICBp
ZiAocmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQzMih1aW50MzJf
dCYgcmVzdWx0KQogewogICAgIGlmIChsZW5ndGgoKSA8IDQgfHwgbV9vZmZzZXQgPiBsZW5ndGgo
KSAtIDQpCkBAIC0xMDEsNiArMTIxLDE1IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBh
cnNlVUludDMyKHVpbnQzMl90JiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0FMV0FZ
U19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlSW50NyhpbnQ4X3QmIHJlc3VsdCkKK3sKKyAgICBp
ZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1aW50
OF90IHYgPSBzb3VyY2UoKVttX29mZnNldCsrXTsKKyAgICByZXN1bHQgPSAodiAmIDB4NDApID8g
V1RGOjpiaXR3aXNlX2Nhc3Q8aW50OF90Pih1aW50OF90KHYgfCAweDgwKSkgOiB2OworICAgIHJl
dHVybiAodiAmIDB4ODApID09IDA7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBh
cnNlVUludDcodWludDhfdCYgcmVzdWx0KQogewogICAgIGlmIChtX29mZnNldCA+PSBsZW5ndGgo
KSkKQEAgLTEyOCw2ICsxNTcsMTcgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VW
YWx1ZVR5cGUoVHlwZSYgcmVzdWx0KQogICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFR5cGU+KHZh
bHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyAgICAKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJz
ZXI6OnBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVybmFsOjpLaW5kJiByZXN1bHQpCit7CisgICAgdWlu
dDhfdCB2YWx1ZTsKKyAgICBpZiAoIXBhcnNlVUludDcodmFsdWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFFeHRlcm5hbDo6aXNWYWxpZCh2YWx1ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFeHRlcm5hbDo6S2luZD4odmFsdWUp
OworICAgIHJldHVybiB0cnVlOworfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKaW5kZXggNzM5YmU0Mi4uMmUwMjhk
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcApAQCAtMzEsOSArMzEs
MTEgQEAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNlci5oIgogI2luY2x1ZGUgIldh
c21WYWxpZGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
CkBAIC00OCw0MCArNTAsNTAgQEAgUGxhbjo6UGxhbihWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKIHsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ZGF0YUxvZ0xuKCJTdGFydGluZyBwbGFuLiIpOwotICAgIE1vZHVsZVBhcnNlciBtb2R1bGVQYXJz
ZXIoc291cmNlLCBzb3VyY2VMZW5ndGgpOwotICAgIGlmICghbW9kdWxlUGFyc2VyLnBhcnNlKCkp
IHsKLSAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5nIG1vZHVsZSBmYWlsZWQ6ICIsIG1vZHVsZVBh
cnNlci5lcnJvck1lc3NhZ2UoKSk7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbW9kdWxlUGFy
c2VyLmVycm9yTWVzc2FnZSgpOwotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBNb2R1
bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJjZSwgc291cmNlTGVuZ3RoKTsKKyAgICAgICAgaWYg
KCFtb2R1bGVQYXJzZXIucGFyc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJQYXJzaW5n
IG1vZHVsZSBmYWlsZWQ6ICIsIG1vZHVsZVBhcnNlci5lcnJvck1lc3NhZ2UoKSk7CisgICAgICAg
ICAgICBtX2Vycm9yTWVzc2FnZSA9IG1vZHVsZVBhcnNlci5lcnJvck1lc3NhZ2UoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX21vZHVsZUluZm9ybWF0aW9uID0g
V1RGTW92ZShtb2R1bGVQYXJzZXIubW9kdWxlSW5mb3JtYXRpb24oKSk7CiAgICAgfQotCiAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dMbigiUGFyc2VkIG1vZHVsZS4iKTsKIAotICAg
IGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6IG1vZHVsZVBhcnNlci5mdW5j
dGlvbkluZm9ybWF0aW9uKCkpIHsKKyAgICBpZiAoIW1fY29tcGlsZWRGdW5jdGlvbnMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCkpKSB7Cisg
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJGYWlsZWQgYWxsb2NhdGluZyBlbm91Z2ggc3BhY2UgZm9yICIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZE51bWJlcihtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgY29tcGlsZWQgZnVuY3Rpb25zIik7Cisg
ICAgICAgIG1fZXJyb3JNZXNzYWdlID0gYnVpbGRlci50b1N0cmluZygpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZm9yIChjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvIDog
bV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zKSB7CiAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmNpb24gc3RhcnRpbmcgYXQ6ICIs
IGluZm8uc3RhcnQsICIgYW5kIGVuZGluZyBhdDogIiwgaW5mby5lbmQpOworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJQcm9jZXNzaW5nIGZ1bmN0aW9uIHN0YXJ0aW5nIGF0OiAiLCBpbmZvLnN0YXJ0
LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8uZW5kKTsKICAgICAgICAgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCA9IHNvdXJjZSArIGluZm8uc3RhcnQ7CiAgICAgICAgIHNpemVfdCBmdW5j
dGlvbkxlbmd0aCA9IGluZm8uZW5kIC0gaW5mby5zdGFydDsKICAgICAgICAgQVNTRVJUKGZ1bmN0
aW9uTGVuZ3RoIDw9IHNvdXJjZUxlbmd0aCk7CiAKLSAgICAgICAgU3RyaW5nIGVycm9yID0gdmFs
aWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgaW5mby5zaWduYXR1
cmUsIG1vZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpOworICAgICAgICBTdHJpbmcg
ZXJyb3IgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBp
bmZvLnNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zKTsKICAgICAgICAg
aWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJv
cjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fcmVzdWx0LmFw
cGVuZChwYXJzZUFuZENvbXBpbGUodm0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBt
b2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCksIGluZm8uc2lnbmF0dXJlLCBtb2R1bGVQYXJzZXIu
ZnVuY3Rpb25JbmZvcm1hdGlvbigpKSk7CisgICAgICAgIG1fY29tcGlsZWRGdW5jdGlvbnMudW5j
aGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSh2bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQoKSwgaW5mby5zaWduYXR1cmUs
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucykpOwogICAgIH0KIAogICAgIC8vIFBhdGNo
IHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgotICAgIGZvciAoc3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlvblB0ciA6IG1fcmVzdWx0KSB7CisgICAg
Zm9yIChzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4mIGZ1bmN0aW9uUHRyIDog
bV9jb21waWxlZEZ1bmN0aW9ucykgewogICAgICAgICBGdW5jdGlvbkNvbXBpbGF0aW9uKiBmdW5j
dGlvbiA9IGZ1bmN0aW9uUHRyLmdldCgpOwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBmdW5j
dGlvbi0+dW5saW5rZWRDYWxscykKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwobV9yZXN1bHRbY2FsbC5m
dW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKG1fY29t
cGlsZWRGdW5jdGlvbnNbY2FsbC5mdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgpKSk7CiAgICAg
fQogCi0gICAgbV9tZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7CiAgICAg
bV9mYWlsZWQgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgK
aW5kZXggYjg0ZjlkNy4uZDdjMDNhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oCkBAIC0zOCw4ICszOCw2IEBAIGNsYXNzIE1lbW9yeTsKIAogY2xhc3MgUGxhbiB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRp
b24+PiBDb21waWxlZEZ1bmN0aW9uczsKLQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0m
LCBWZWN0b3I8dWludDhfdD4pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0mLCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwpAQCAt
NTAsMzYgKzQ4LDM3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFpbGVkKCkp
OwogICAgICAgICByZXR1cm4gbV9lcnJvck1lc3NhZ2U7CiAgICAgfQotICAgIHNpemVfdCByZXN1
bHRTaXplKCkgY29uc3QKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRp
b24+JiBnZXRNb2R1bGVJbmZvcm1hdGlvbigpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9yZXN1bHQuc2l6ZSgpOworICAgICAgICBy
ZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICB9Ci0gICAgY29uc3QgRnVuY3Rpb25Db21w
aWxhdGlvbiogcmVzdWx0KHNpemVfdCBuKSBjb25zdAorICAgIGNvbnN0IE1lbW9yeSogbWVtb3J5
KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAg
ICAgIHJldHVybiBtX3Jlc3VsdC5hdChuKS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm1lbW9yeS5nZXQoKTsKICAgICB9Ci0gICAgY29uc3QgTWVtb3J5KiBtZW1v
cnkoKSBjb25zdAorICAgIHNpemVfdCBjb21waWxlZEZ1bmN0aW9uQ291bnQoKSBjb25zdAogICAg
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1f
bWVtb3J5LmdldCgpOworICAgICAgICByZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9ucy5zaXplKCk7
CiAgICAgfQotICAgIAotICAgIENvbXBpbGVkRnVuY3Rpb25zKiBnZXRGdW5jdGlvbnMoKQorICAg
IGNvbnN0IEZ1bmN0aW9uQ29tcGlsYXRpb24qIGNvbXBpbGVkRnVuY3Rpb24oc2l6ZV90IGkpIGNv
bnN0CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwotICAgICAgICBy
ZXR1cm4gJm1fcmVzdWx0OworICAgICAgICByZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9ucy5hdChp
KS5nZXQoKTsKICAgICB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4qIGdldE1lbW9yeSgp
CisgICAgQ29tcGlsZWRGdW5jdGlvbnMmIGdldENvbXBpbGVkRnVuY3Rpb25zKCkKICAgICB7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiAmbV9tZW1v
cnk7CisgICAgICAgIHJldHVybiBtX2NvbXBpbGVkRnVuY3Rpb25zOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBDb21waWxlZEZ1bmN0aW9ucyBtX3Jlc3VsdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWVtb3J5PiBtX21lbW9yeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+
IG1fbW9kdWxlSW5mb3JtYXRpb247CisgICAgQ29tcGlsZWRGdW5jdGlvbnMgbV9jb21waWxlZEZ1
bmN0aW9uczsKKwogICAgIGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07CiAgICAgU3RyaW5nIG1fZXJy
b3JNZXNzYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TZWN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25zLmgK
aW5kZXggNzI1Nzg2Ny4uOTk2MDUyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVNlY3Rpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25zLmgKQEAgLTI5LDEyICsyOSwyNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCisjZGVmaW5lIEZPUl9FQUNIX1dBU01fU0VDVElPTihtYWNybykgXAorICAg
IG1hY3JvKFR5cGUsICAgICAxLCAiRnVuY3Rpb24gc2lnbmF0dXJlIGRlY2xhcmF0aW9ucyIpIFwK
KyAgICBtYWNybyhJbXBvcnQsICAgMiwgIkltcG9ydCBkZWNsYXJhdGlvbnMiKSBcCisgICAgbWFj
cm8oRnVuY3Rpb24sIDMsICJGdW5jdGlvbiBkZWNsYXJhdGlvbnMiKSBcCisgICAgbWFjcm8oVGFi
bGUsICAgIDQsICJJbmRpcmVjdCBmdW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzIikgXAor
ICAgIG1hY3JvKE1lbW9yeSwgICA1LCAiTWVtb3J5IGF0dHJpYnV0ZXMiKSBcCisgICAgbWFjcm8o
R2xvYmFsLCAgIDYsICJHbG9iYWwgZGVjbGFyYXRpb25zIikgXAorICAgIG1hY3JvKEV4cG9ydCwg
ICA3LCAiRXhwb3J0cyIpIFwKKyAgICBtYWNybyhTdGFydCwgICAgOCwgIlN0YXJ0IGZ1bmN0aW9u
IGRlY2xhcmF0aW9uIikgXAorICAgIG1hY3JvKEVsZW1lbnQsICA5LCAiRWxlbWVudHMgc2VjdGlv
biIpIFwKKyAgICBtYWNybyhDb2RlLCAgICAxMCwgIkZ1bmN0aW9uIGJvZGllcyAoY29kZSkiKSBc
CisgICAgbWFjcm8oRGF0YSwgICAgMTEsICJEYXRhIHNlZ21lbnRzIikKKwogc3RydWN0IFNlY3Rp
b25zIHsKICAgICBlbnVtIFNlY3Rpb24gOiB1aW50OF90IHsKLSAgICAgICAgRnVuY3Rpb25UeXBl
cyA9IDEsCi0gICAgICAgIFNpZ25hdHVyZXMgPSAzLAotICAgICAgICBNZW1vcnkgPSA1LAotICAg
ICAgICBEZWZpbml0aW9ucyA9IDEwLAorI2RlZmluZSBERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0o
TkFNRSwgSUQsIERFU0NSSVBUSU9OKSBOQU1FID0gSUQsCisgICAgICAgIEZPUl9FQUNIX1dBU01f
U0VDVElPTihERUZJTkVfV0FTTV9TRUNUSU9OX0VOVU0pCisjdW5kZWYgREVGSU5FX1dBU01fU0VD
VElPTl9FTlVNCiAgICAgICAgIFVua25vd24KICAgICB9OwogICAgIHN0YXRpYyBib29sIHZhbGlk
YXRlT3JkZXIoU2VjdGlvbiBwcmV2aW91cywgU2VjdGlvbiBuZXh0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCA2
NWNjYTk1Li5kNmJhMzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtMzUsOSArMzUsOSBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+KiBjb21waWxlZEZ1bmN0aW9ucywgc3RkOjp1bmlx
dWVfcHRyPFdhc206Ok1lbW9yeT4qIG1lbW9yeSkKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1hdGlvbiwg
V2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rpb25zKQogewotICAgIGF1dG8q
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVs
ZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgY29tcGlsZWRG
dW5jdGlvbnMsIG1lbW9yeSk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1v
ZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbiwgY29tcGlsZWRGdW5jdGlvbnMp
OwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNl
OwogfQpAQCAtNDcsMTAgKzQ3LDEwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+KiBj
b21waWxlZEZ1bmN0aW9ucywgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qIG1lbW9yeSkK
K0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYg
bW9kdWxlSW5mb3JtYXRpb24sIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0
aW9ucykKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fY29tcGlsZWRGdW5jdGlv
bnMoV1RGTW92ZSgqY29tcGlsZWRGdW5jdGlvbnMpKQotICAgICwgbV9tZW1vcnkoV1RGTW92ZSgq
bWVtb3J5KSkKKyAgICAsIG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1h
dGlvbikpCisgICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1vdmUoY29tcGlsZWRGdW5jdGlv
bnMpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggYTQzOGE2MS4uOWRhMjEyMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApAQCAtMjks
MzIgKzI5LDMyIEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotbmFtZXNwYWNlIFdhc20gewotc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb247Ci1jbGFz
cyBNZW1vcnk7Ci19Ci0KIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0
cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRp
b24+PiosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+Kik7CisgICAgc3RhdGljIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYpOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKKyAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiogbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6Ci0gICAg
SlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+Kiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1l
bW9yeT4qKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIFdhc206OkNvbXBpbGVkRnVuY3Rp
b25zJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwotCiBwcml2YXRlOgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6RnVuY3Rpb25Db21waWxhdGlvbj4+IG1fY29tcGlsZWRGdW5jdGlvbnM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOworICAgIFdhc206OkNv
bXBpbGVkRnVuY3Rpb25zIG1fY29tcGlsZWRGdW5jdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGE5ZmYxMWQuLmM4YWVh
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcApAQCAtNjQsOCArNjQsOSBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5
SW5zdGFuY2UoRXhlY1N0YXRlKiBzdAogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmlu
ZWQoKSAmJiAhaW1wb3J0T2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxp
dGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVu
ZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlw
ZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKIAotICAgIC8vIEZJWE1FIHVzZSB0aGUgaW1w
b3J0T2JqZWN0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDM5
CiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBU
eXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgor
ICAgIGlmIChtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCktPmltcG9ydHMuc2l6ZSgpICYmICFp
bXBvcnRPYmplY3QpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgic2Vj
b25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJlY2F1
c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNlQXBw
ZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOwogCiAgICAgLy8g
RklYTUUgU3RyaW5nIHRoaW5ncyBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQwMjMKICAgICAvLyBMZXQgZXhwb3J0cyBiZSBhIGxpc3Qgb2YgKHN0cmluZywg
SlMgdmFsdWUpIHBhaXJzIHRoYXQgaXMgbWFwcGVkIGZyb20gZWFjaCBleHRlcm5hbCB2YWx1ZSBl
IGluIGluc3RhbmNlLmV4cG9ydHMgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggMWM1ODJiNC4uY2ZjYWM2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAK
QEAgLTQ3LDYgKzQ3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIHN0YXQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDEzNAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNj
b3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0
IHlldCBpbXBsZW1lbnQgdGhlIE1lbW9yeSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDBiMDU1YTAuLmJiNjg0ZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC03MywxMyArNzMsMTEgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVj
U3RhdGUqIHN0YXQKICAgICBpZiAocGxhbi5mYWlsZWQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVdlYkFzc2VtYmx5
Q29tcGlsZUVycm9yKHN0YXRlLCBwbGFuLmVycm9yTWVzc2FnZSgpKSkpOwogCi0gICAgLy8gVGhl
IHNwZWMgc3RyaW5nIHZhbHVlcyBpbnNpZGUgQXN0Lm1vZHVsZSBhcmUgZGVjb2RlZCBhcyBVVEY4
IGFzIGRlc2NyaWJlZCBpbiBXZWIubWQuIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQwMjMKLQogICAgIC8vIE9uIHN1Y2Nlc3MsIGEgbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZSBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBbW01vZHVsZV1dIHNldCB0byB0aGUg
dmFsaWRhdGVkIEFzdC5tb2R1bGUuCiAgICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwg
YXNJbnRlcm5hbEZ1bmN0aW9uKHN0YXRlLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5XZWJB
c3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHBsYW4uZ2V0RnVuY3Rpb25zKCks
IHBsYW4uZ2V0TWVtb3J5KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBwbGFuLmdldE1vZHVsZUluZm9ybWF0
aW9uKCksIHBsYW4uZ2V0Q29tcGlsZWRGdW5jdGlvbnMoKSkpOwogfQogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUq
IHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggY2FhN2U5ZS4uYzk1ODBiYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJs
ZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShFeGVj
U3RhdGUqIHN0YXRlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSBUYWJsZSBjb25z
dHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOwogfQogCi0tIAoyLjkuMwoK
</data>

          </attachment>
      

    </bug>

</bugzilla>