<?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>45237</bug_id>
          
          <creation_ts>2010-09-04 16:25:13 -0700</creation_ts>
          <short_desc>Add JSON parameter support to JS/V8 binding generator scripts</short_desc>
          <delta_ts>2023-05-27 05:40:02 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Kinuko Yasuda">kinuko</assigned_to>
          <cc>abarth</cc>
    
    <cc>annevk</cc>
    
    <cc>arv</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dmikurube</cc>
    
    <cc>dumi</cc>
    
    <cc>ericu</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274400</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-04 16:25:13 -0700</bug_when>
    <thetext>Add a new extended attribute (e.g. AllowSON) to support passing parameters in JSON format.

Some spec/idl expect that the user might pass a parameter
in JSON format if the parameter&apos;s idl is simple.
For example, FileSystem API (Aug 25, 2010 draft) has a code example
where an object (that has two boolean attributes) is passed in JSON format.

http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#examples-1
4.2 Flags interface, 4.2.2 Examples:
&gt; lockFile = dataDir.getFile(&quot;lockfile.txt&quot;, {CREATE: true, EXCLUSIVE: true});

While such idl should be generally discouraged, if we need to go with this design it&apos;d be better to have some generic support in the generator rather than having custom implementations for each.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274403</commentid>
    <comment_count>1</comment_count>
      <attachid>66593</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-04 16:28:49 -0700</bug_when>
    <thetext>Created attachment 66593
Patch

Proposal patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274407</commentid>
    <comment_count>2</comment_count>
      <attachid>66593</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-04 17:06:59 -0700</bug_when>
    <thetext>Comment on attachment 66593
Patch

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

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:235
&gt; +    my $type = shift;
&gt; +    return (&quot;CREATE&quot; =&gt; &quot;boolean&quot;, &quot;EXCLUSIVE&quot; =&gt; &quot;boolean&quot;) if $type eq &quot;Flags&quot;;
This logic shouldn&apos;t be in the code generator.  You&apos;ll need to provide this information as input to the code generator.

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:240
&gt; +    # For testing.
&gt; +    return (&quot;intAttr&quot; =&gt; &quot;long&quot;,
&gt; +            &quot;stringAttr&quot; =&gt; &quot;DOMString&quot;,
&gt; +            &quot;testObjAttr&quot; =&gt; &quot;TestObj&quot;) if $type eq &quot;TestJSONObj&quot;;
Why do we have special code to support testing?  Doesn&apos;t that defeat the purpose of testing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275434</commentid>
    <comment_count>3</comment_count>
      <attachid>66799</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-07 17:31:35 -0700</bug_when>
    <thetext>Created attachment 66799
Patch

How about this?  Changed the code to use codeGenerator-&gt;ParseInterface instead of having a copy of interface definitions in the generator code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277373</commentid>
    <comment_count>4</comment_count>
      <attachid>67223</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-10 12:38:50 -0700</bug_when>
    <thetext>Created attachment 67223
Patch

rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277375</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-10 12:41:15 -0700</bug_when>
    <thetext>Attachment 67223 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:199:  webkit_dom_test_json_obj_set_property is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:199:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:206:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:227:  webkit_dom_test_json_obj_get_property is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:227:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:234:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:266:  webkit_dom_test_json_obj_constructed is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:273:  webkit_dom_test_json_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:275:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:326:  webkit_dom_test_json_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:341:  Extra space between return and WEBKIT_DOM_TEST_JSON_OBJ  [whitespace/declaration] [3]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:342:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bindings/scripts/test/V8/V8TestJSONObj.h:26:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
WebCore/bindings/scripts/test/CPP/WebDOMTestJSONObj.cpp:30:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 37 in 21 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>277385</commentid>
    <comment_count>6</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-10 13:00:15 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Attachment 67223 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
&gt; Last 3072 characters of output:
&gt;   Use 0 instead of NULL.  [readability/null] [5]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:199:  webkit_dom_test_json_obj_set_property is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:199:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:206:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:227:  webkit_dom_test_json_obj_get_property is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:227:  prop_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:234:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:266:  webkit_dom_test_json_obj_constructed is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:273:  webkit_dom_test_json_obj_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:275:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:326:  webkit_dom_test_json_obj_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:341:  Extra space between return and WEBKIT_DOM_TEST_JSON_OBJ  [whitespace/declaration] [3]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.cpp:342:  Use 0 instead of NULL.  [readability/null] [5]
&gt; WebCore/bindings/scripts/test/V8/V8TestJSONObj.h:26:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
&gt; WebCore/bindings/scripts/test/CPP/WebDOMTestJSONObj.cpp:30:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:39:  parent_instance is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:43:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/bindings/scripts/test/GObject/WebKitDOMTestJSONObj.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Total errors found: 37 in 21 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

All of them are for generated code.  (I don&apos;t know how to suppress them...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277387</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-10 13:01:26 -0700</bug_when>
    <thetext>&gt; All of them are for generated code.  (I don&apos;t know how to suppress them...)

Yeah, we need to teach check-webkit-style about those files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277400</commentid>
    <comment_count>8</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-10 13:23:56 -0700</bug_when>
    <thetext>(Adding some more people who know binding code well)

Hmm this patch worked for me but calling $codeGenerator-&gt;ParseInterface() in the code generation really slows down the process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300510</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-27 13:29:24 -0700</bug_when>
    <thetext>Is the spec really using json rather than the internal structured clone algorithm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304326</commentid>
    <comment_count>10</comment_count>
      <attachid>67223</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-11-03 15:34:49 -0700</bug_when>
    <thetext>Comment on attachment 67223
Patch

Removing from the review queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304327</commentid>
    <comment_count>11</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-11-03 15:37:08 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Is the spec really using json rather than the internal structured clone algorithm?

(In reply to comment #9)
&gt; Is the spec really using json rather than the internal structured clone algorithm?

The spec reads using json parameter rather than the internal structured clone algorithm.
(As far as I believe, @ericu would be able to tell the truth)


I have the feeling that probably adding a CustomConversion attribute to parameter attributes would make more sense.   Then the developer would need to write a small custom code that only handles the parameter rather than writing a custom code for the entire method.  (This was suggested by antonm@chromium.org)

I&apos;m going to poke around the idea and see if such a generalization makes more sense in other cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304350</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-03 16:38:05 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; Is the spec really using json rather than the internal structured clone algorithm?
&gt;
&gt; The spec reads using json parameter rather than the internal structured clone algorithm.
&gt; (As far as I believe, @ericu would be able to tell the truth)

btw, I don&apos;t understand the comment because I don&apos;t a text representation for structured clone only an algorithm that explains how to do it. (If there was a text representation, then that may make more sense.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1958386</commentid>
    <comment_count>13</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2023-05-27 05:40:02 -0700</bug_when>
    <thetext>V8 integration is no longer a thing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66593</attachid>
            <date>2010-09-04 16:28:49 -0700</date>
            <delta_ts>2010-09-07 17:31:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45237-20100904162847.patch</filename>
            <type>text/plain</type>
            <size>23388</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTJjNjc1NWJhY2FjZTcyN2RhYWJmOTY1MWE2M2Q0YTRlYTI4ZDA2Ni4uM2MxYjlkZDBkYWQ5ZTcz
NDE2MjljMDlmODJiNDAxOGZjNWEyOWJjMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0wOS0wNCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEpTT04gcGFyYW1ldGVyIHN1cHBvcnQgdG8g
SlMvVjggYmluZGluZyBnZW5lcmF0b3Igc2NyaXB0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjM3CisKKyAgICAgICAgQWRkaW5nIGEgbmV3IGV4
dGVuZGVkIGF0dHJpYnV0ZSAiQWxsb3dKU09OIiB0byBzdXBwb3J0IHBhc3NpbmcgcGFyYW1ldGVy
cyBpbiBKU09OIGZvcm1hdC4KKworICAgICAgICBBZGRlZCBhIG5ldyB0ZXN0IG1ldGhvZCBtZXRo
b2RXaXRoQWxsb3dKU09OIGluIFRlc3RPYmouaWRsLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhBbGxvd0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhBbGxvd0pTT05DYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RPYmpUZW1wbGF0ZSk6CisgICAg
ICAgICogZmlsZWFwaS9EaXJlY3RvcnlFbnRyeS5pZGw6CisKIDIwMTAtMDktMDQgIEp1c3RpbiBT
Y2h1aCAgPGpzY2h1aEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xh
cyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KaW5kZXggMWExMTRhNDI5N2UxNDkyOTMzYmFiMjgzZTM2NGY1Y2ExNDc5MmJjZi4uNGMzNjQ1
MzFlMzhjZmM4ZTA0ODc0ZjU3Njg3ZDVmNTZlOGNjODI1YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0yMjcsNiArMjI3LDIxIEBAIHN1YiBHZXRD
YWxsYmFja0NsYXNzTmFtZQogICAgIHJldHVybiAiSlMkY2xhc3NOYW1lIjsKIH0KIAorIyBSZXR1
cm5zIGF0dHJpYnV0ZXMgKGEgaGFzaCBvZiBuYW1lLCB0eXBlKSBmb3IgYSBnaXZlbiBvYmplY3Qu
CisjIFRoaXMgc3Vicm91dGluZSBpcyBjYWxsZWQgZm9yIHBhcmFtZXRlcnMgdGhhdCBhcmUgYW5u
b3RhdGVkIHdpdGggIkFsbG93SlNPTiIuCitzdWIgR2V0QXR0cmlidXRlc0ZvckpTT05PYmplY3QK
K3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAoIkNSRUFURSIgPT4gImJvb2xl
YW4iLCAiRVhDTFVTSVZFIiA9PiAiYm9vbGVhbiIpIGlmICR0eXBlIGVxICJGbGFncyI7CisKKyAg
ICAjIEZvciB0ZXN0aW5nLgorICAgIHJldHVybiAoImludEF0dHIiID0+ICJsb25nIiwKKyAgICAg
ICAgICAgICJzdHJpbmdBdHRyIiA9PiAiRE9NU3RyaW5nIiwKKyAgICAgICAgICAgICJ0ZXN0T2Jq
QXR0ciIgPT4gIlRlc3RPYmoiKSBpZiAkdHlwZSBlcSAiVGVzdEpTT05PYmoiOworCisgICAgcmV0
dXJuICgpOworfQorCiBzdWIgQXZvaWRJbmNsdXNpb25PZlR5cGUKIHsKICAgICBteSAkdHlwZSA9
IHNoaWZ0OwpAQCAtMTk2OCwxMSArMTk4MywxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBSZWZQdHI8IiAuICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFz
c05hbWV9OjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG15ICRhcmdWYWx1ZSA9ICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ1R5cGUgPSAkY29kZUdlbmVyYXRvci0+
U3RyaXBNb2R1bGUoJHBhcmFtZXRlci0+dHlwZSk7CisKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIEZvciBmdW5jdGlvbnMgd2l0aCAiU3RyaWN0VHlwZUNoZWNraW5nIiwgaWYgYW4gaW5w
dXQgcGFyYW1ldGVyJ3MgdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgYSBUeXBlRXJyb3IgaXMgdGhyb3duIGluc3RlYWQgb2Yg
Y2FzdGluZyB0byBudWxsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlN0cmljdFR5cGVDaGVja2luZyJ9
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRhcmdWYWx1ZSA9ICJleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG15ICRhcmdUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJhbWV0ZXItPnR5
cGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzTmF0aXZlVHlwZSgk
YXJnVHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAkYXJnc0luZGV4ICYm
ICEke2FyZ1ZhbHVlfS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICEke2FyZ1ZhbHVlfS5pbmhlcml0
cygmSlMke2FyZ1R5cGV9OjpzX2luZm8pKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7XG4iKTsKQEAgLTE5ODIsNyArMTk5OCwzNCBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0
ZXIpIC4gIiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFy
Z3VtZW50KCRhcmdzSW5kZXgpIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBGb3IgcGFyYW1ldGVycyB3aXRoICJBbGxvd0pTT04iLCBsb29rIGZvciBvYmplY3QgcHJv
cGVydGllcyBhbmQgZHluYW1pY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNy
ZWF0ZSBhIGRlc2lyZWQgdHlwZSBvZiBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIUlzTmF0aXZlVHlwZSgkYXJnVHlwZSkgJiYgJHBhcmFtZXRlci0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkFsbG93SlNPTiJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG15ICRwYXJhbWV0ZXJUeXBlID0gJHBhcmFtZXRlci0+dHlwZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHBhcmFtZXRlclR5cGUuaCJ9ID0gMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
UmVmUHRyPCRwYXJhbWV0ZXJUeXBlPiAkbmFtZTtcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISRhcmdWYWx1ZS5pc051bGwo
KSAmJiAhJGFyZ1ZhbHVlLmlzVW5kZWZpbmVkKCkgJiYgJGFyZ1ZhbHVlLmlzT2JqZWN0KCkgJiYg
ISR7YXJnVmFsdWV9LmluaGVyaXRzKCZKUyR7YXJnVHlwZX06OnNfaW5mbykpIHtcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9ICRhcmdWYWx1ZS5nZXRPYmplY3QoKTtcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG5hbWUg
PSAke3BhcmFtZXRlclR5cGV9OjpjcmVhdGUoKTtcbiIpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG15ICVhdHRyaWJ1dGVzID0gR2V0QXR0cmlidXRlc0ZvckpTT05PYmplY3Qo
JHBhcmFtZXRlclR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNo
IG15ICRhdHRyTmFtZSAoa2V5cyAlYXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXkgJGpzVmFyTmFtZSA9ICJqcyIgLiAkY29kZUdlbmVyYXRvci0+V0tf
dWNmaXJzdCgkYXR0ck5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bXkgJHNldHRlciA9ICJzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICR2YXJUeXBlID0gJGF0
dHJpYnV0ZXN7JGF0dHJOYW1lfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG15ICR2YXJTaWduYXR1cmUgPSBuZXcgZG9tU2lnbmF0dXJlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJHZhclNpZ25hdHVyZS0+dHlwZSgkdmFyVHlwZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFyU2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMoe30pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIEpTVmFsdWUgJGpzVmFyTmFtZSA9IG9iamVjdC0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgXCIkYXR0ck5hbWVcIikpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKCEkanNW
YXJOYW1lLmlzTnVsbCgpICYmICEkanNWYXJOYW1lLmlzVW5kZWZpbmVkKCkpXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICAgICAgJG5hbWUtPiRzZXR0ZXIoIiAuIEpTVmFsdWVUb05hdGl2ZSgkdmFyU2lnbmF0dXJlLCAk
anNWYXJOYW1lKSAuICIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
fSBlbHNlIHtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgJG5hbWUgPSBhZG9wdFJlZigiIC4gSlNWYWx1ZVRvTmF0aXZlKCRw
YXJhbWV0ZXIsICRhcmdWYWx1ZSkgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFt
ZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+
YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlz
ICJhbiBpbmRleCIgYW5kIGl0J3MgbmVnYXRpdmUgaXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJ
WkVfRVJSIGV4Y2VwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ1dCB0aGlz
IG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVu
c2lnbmVkIGFuZCB0aGUgZmFjdCB0aGF0IGl0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQppbmRleCBlY2E3MzAxNmViOTk2NmU5ZWQyNmQxNGRlMGI0MDRhZDcy
ZjMyYWVlLi44NmQ3YmVjYjk2YjJlYzdiNTE1MTdjN2QyOGVmZGI3ODBjZWNiM2Q1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTEyNTUsMTEgKzEy
NTUsMTEgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIg
LiBDb252ZXJ0VG9WOFBhcmFtZXRlcigkcGFyYW1ldGVyLCAkbmF0aXZlVHlwZSwgJHBhcmFtZXRl
ck5hbWUsICR2YWx1ZSkgLiAiXG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IlY4QmluZGluZ01hY3Jvcy5oIn0gPSAxOworICAgICAgICAgICAgbXkgJGFy
Z1ZhbHVlID0gImFyZ3NbJHBhcmFtSW5kZXhdIjsKKyAgICAgICAgICAgIG15ICRhcmdUeXBlID0g
R2V0VHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcik7CiAgICAgICAgICAgICAjIEZvciBmdW5j
dGlvbnMgd2l0aCAiU3RyaWN0VHlwZUNoZWNraW5nIiwgaWYgYW4gaW5wdXQgcGFyYW1ldGVyJ3Mg
dHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlLAogICAgICAgICAgICAgIyBhIFR5cGVF
cnJvciBpcyB0aHJvd24gaW5zdGVhZCBvZiBjYXN0aW5nIHRvIG51bGwuCiAgICAgICAgICAgICBp
ZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTdHJpY3RUeXBl
Q2hlY2tpbmcifSkgewotICAgICAgICAgICAgICAgIG15ICRhcmdWYWx1ZSA9ICJhcmdzWyRwYXJh
bUluZGV4XSI7Ci0gICAgICAgICAgICAgICAgbXkgJGFyZ1R5cGUgPSBHZXRUeXBlRnJvbVNpZ25h
dHVyZSgkcGFyYW1ldGVyKTsKICAgICAgICAgICAgICAgICBpZiAoSXNXcmFwcGVyVHlwZSgkYXJn
VHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICBpZiAoYXJncy5MZW5ndGgoKSA+ICRwYXJhbUluZGV4ICYmICFpc1VuZGVmaW5lZE9yTnVsbCgk
YXJnVmFsdWUpICYmICFWOCR7YXJnVHlwZX06Okhhc0luc3RhbmNlKCRhcmdWYWx1ZSkpIHtcbiIp
OwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBW
OFByb3h5Ojp0aHJvd1R5cGVFcnJvcigpO1xuIik7CkBAIC0xMjcyLDggKzEyNzIsNDYgQEAgRU5E
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBFWENFUFRJT05fQkxPQ0soJG5hdGl2ZVR5cGUsICRwYXJhbWV0
ZXJOYW1lLCAiIC4KLSAgICAgICAgICAgICAgICAgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIs
ICJhcmdzWyRwYXJhbUluZGV4XSIsIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0
ZXIpID8gICIke3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIik7XG4iKTsKKworICAgICAg
ICAgICAgIyBGb3IgcGFyYW1ldGVycyB3aXRoICJBbGxvd0pTT04iLCBsb29rIGZvciBvYmplY3Qg
cHJvcGVydGllcyBhbmQgZHluYW1pY2FsbHkKKyAgICAgICAgICAgICMgY3JlYXRlIGEgZGVzaXJl
ZCB0eXBlIG9mIGluc3RhbmNlLgorICAgICAgICAgICAgaWYgKElzV3JhcHBlclR5cGUoJGFyZ1R5
cGUpICYmICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBbGxvd0pTT04ifSkgewor
ICAgICAgICAgICAgICAgIG15ICRwYXJhbWV0ZXJUeXBlID0gJHBhcmFtZXRlci0+dHlwZTsKKyAg
ICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIkcGFyYW1ldGVyVHlwZS5oIn0gPSAxOworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPCRwYXJhbWV0
ZXJUeXBlPiAkcGFyYW1ldGVyTmFtZTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgaWYgKCFpc1VuZGVmaW5lZE9yTnVsbCgkYXJnVmFsdWUpICYmICRh
cmdWYWx1ZS0+SXNPYmplY3QoKSAmJiAhVjgke2FyZ1R5cGV9OjpIYXNJbnN0YW5jZSgkYXJnVmFs
dWUpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
ICAgICBFWENFUFRJT05fQkxPQ0sodjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgb2JqZWN0LCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbJHBhcmFtSW5kZXhdKSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICAkcGFyYW1ldGVyTmFt
ZSA9ICR7cGFyYW1ldGVyVHlwZX06OmNyZWF0ZSgpO1xuIik7CisKKyAgICAgICAgICAgICAgICBt
eSAlYXR0cmlidXRlcyA9IEdldEF0dHJpYnV0ZXNGb3JKU09OT2JqZWN0KCRwYXJhbWV0ZXJUeXBl
KTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyTmFtZSAoa2V5cyAlYXR0cmlidXRl
cykgeworICAgICAgICAgICAgICAgICAgICBteSAkdmFyTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5X
S19sY2ZpcnN0KCRhdHRyTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG15ICRqc1Zhck5hbWUg
PSAidjgiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJOYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgbXkgJHNldHRlciA9ICJzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmly
c3QoJGF0dHJOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJHZhclR5cGUgPSAkYXR0cmli
dXRlc3skYXR0ck5hbWV9OworICAgICAgICAgICAgICAgICAgICBteSAkdmFyU2lnbmF0dXJlID0g
bmV3IGRvbVNpZ25hdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgJHZhclNpZ25hdHVyZS0+dHlw
ZSgkdmFyVHlwZSk7CisgICAgICAgICAgICAgICAgICAgICR2YXJTaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcyh7fSk7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+ICRqc1Zhck5hbWUgPSBvYmplY3QtPkdl
dCh2ODo6U3RyaW5nOjpOZXcoXCIkYXR0ck5hbWVcIikpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIGlmICghJGpzVmFyTmFtZS5Jc0Vt
cHR5KCkgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKCRqc1Zhck5hbWUpKSB7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgbXkgJHZhck5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVy
ZSgkdmFyU2lnbmF0dXJlLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCR2YXJOYXRpdmVU
eXBlID1+IC9eVjhQYXJhbWV0ZXIvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgICAgICAgICAgIiAuIENvbnZlcnRUb1Y4UGFyYW1ldGVyKCR2
YXJTaWduYXR1cmUsICR2YXJOYXRpdmVUeXBlLCAkdmFyTmFtZSwgSlNWYWx1ZVRvTmF0aXZlKCR2
YXJTaWduYXR1cmUsICRqc1Zhck5hbWUpKSAuICJcbiIpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICAgICAgICAgIEVYQ0VQVElPTl9CTE9DSygkdmFyTmF0aXZlVHlwZSwgJHZhck5hbWUsICIg
LiBKU1ZhbHVlVG9OYXRpdmUoJHZhclNpZ25hdHVyZSwgJGpzVmFyTmFtZSkgLiAiKTtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZS0+JHNldHRlcigkdmFyTmFtZSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAg
ICAgfVxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgfSBlbHNlIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICAgRVhDRVBUSU9OX0JMT0NLKCRuYXRpdmVUeXBlLCB0bXBf
JHBhcmFtZXRlck5hbWUsICIgLgorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVRvTmF0
aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsIEJhc2ljVHlwZUNhbkZhaWxDb252
ZXJzaW9uKCRwYXJhbWV0ZXIpID8gICIke3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIik7
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICRw
YXJhbWV0ZXJOYW1lID0gYWRvcHRSZWYodG1wXyRwYXJhbWV0ZXJOYW1lKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
RVhDRVBUSU9OX0JMT0NLKCRuYXRpdmVUeXBlLCAkcGFyYW1ldGVyTmFtZSwgIiAuCisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiYXJnc1skcGFyYW1JbmRl
eF0iLCBCYXNpY1R5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSA/ICAiJHtwYXJhbWV0
ZXJOYW1lfU9rIiA6IHVuZGVmKSAuICIpO1xuIik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzSW5kZXgi
fSkgewpAQCAtMjUxOSw2ICsyNTU3LDIxIEBAIHN1YiBJc0FjdGl2ZURvbVR5cGUKICAgICByZXR1
cm4gMDsKIH0KIAorIyBSZXR1cm5zIGF0dHJpYnV0ZXMgKGEgaGFzaCBvZiBuYW1lLCB0eXBlKSBm
b3IgYSBnaXZlbiBvYmplY3QuCisjIFRoaXMgc3Vicm91dGluZSBpcyBjYWxsZWQgZm9yIHBhcmFt
ZXRlcnMgdGhhdCBhcmUgYW5ub3RhdGVkIHdpdGggIkFsbG93SlNPTiIuCitzdWIgR2V0QXR0cmli
dXRlc0ZvckpTT05PYmplY3QKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAo
IkNSRUFURSIgPT4gImJvb2xlYW4iLCAiRVhDTFVTSVZFIiA9PiAiYm9vbGVhbiIpIGlmICR0eXBl
IGVxICJGbGFncyI7CisKKyAgICAjIEZvciB0ZXN0aW5nLgorICAgIHJldHVybiAoImludEF0dHIi
ID0+ICJsb25nIiwKKyAgICAgICAgICAgICJzdHJpbmdBdHRyIiA9PiAiRE9NU3RyaW5nIiwKKyAg
ICAgICAgICAgICJ0ZXN0T2JqQXR0ciIgPT4gIlRlc3RPYmoiKSBpZiAkdHlwZSBlcSAiVGVzdEpT
T05PYmoiOworCisgICAgcmV0dXJuICgpOworfQorCiBzdWIgR2V0TmF0aXZlVHlwZUZvckNvbnZl
cnNpb25zCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGUxNzJjZDU3ZTRmNjNkNDdlYWY0NDhi
YTQzNjBjZTA1YjMyNDZhZWEuLjk0MGQ3MjA2MGU4Y2UzMTczZTYzNmQ0MTRlMjdiMGJhMGYzMmMz
YWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKKyNpbmNs
dWRlICJKU1Rlc3RKU09OT2JqLmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCiAjaW5jbHVkZSAi
SlNsb2cuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiVGVzdEpTT05P
YmouaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmg+CkBAIC0xNzcsNyArMTc5LDcgQEAgYm9v
bCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikK
ICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXNbNDVdID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQ
cm90b3R5cGVUYWJsZVZhbHVlc1s0Nl0gPQogewogICAgIHsgIkNPTlNUX1ZBTFVFXzAiLCBEb250
RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkwIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAogICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRlIHwgUmVhZE9u
bHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0T2JqQ09OU1RfVkFMVUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LApA
QCAtMjIzLDExICsyMjUsMTIgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9i
alByb3RvdHlwZVRhYmxlVmFsdWVzWzQ1XSA9CiAgICAgeyAibWV0aG9kV2l0aE5vbkNhbGxiYWNr
QXJnQW5kQ2FsbGJhY2tBcmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIiwgRG9u
dERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmcpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJvdmVybG9hZGVk
TWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCks
IChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgIm1ldGhvZFdpdGhBbGxv
d0pTT04iLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQWxsb3dKU09O
KSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAwLCAwLCAwLCAwIFRI
VU5LX0dFTkVSQVRPUigwKSB9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMg
SlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7
IDEzNSwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpT
Q19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAx
MzYsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNz
SW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAw
LCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialBy
b3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCkBAIC0xNDQ3LDYgKzE0NTAsMzYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoRXhlY1N0YXQKICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbGxvd0pTT04oRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkp
OworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOworICAgIFJlZlB0cjxUZXN0SlNPTk9iaj4gdGVzdEpzb25PYmo7CisgICAgaWYgKCFl
eGVjLT5hcmd1bWVudCgwKS5pc051bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSAmJiBleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpICYmICFleGVjLT5hcmd1bWVudCgw
KS5pbmhlcml0cygmSlNUZXN0SlNPTk9iajo6c19pbmZvKSkgeworICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCk7CisgICAgICAgIHRlc3RKc29u
T2JqID0gVGVzdEpTT05PYmo6OmNyZWF0ZSgpOworICAgICAgICBKU1ZhbHVlIGpzVGVzdE9iakF0
dHIgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJ0ZXN0T2JqQXR0ciIpKTsK
KyAgICAgICAgaWYgKCFqc1Rlc3RPYmpBdHRyLmlzTnVsbCgpICYmICFqc1Rlc3RPYmpBdHRyLmlz
VW5kZWZpbmVkKCkpCisgICAgICAgICAgICB0ZXN0SnNvbk9iai0+c2V0VGVzdE9iakF0dHIodG9U
ZXN0T2JqKGpzVGVzdE9iakF0dHIpKTsKKyAgICAgICAgSlNWYWx1ZSBqc1N0cmluZ0F0dHIgPSBv
YmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJzdHJpbmdBdHRyIikpOworICAgICAg
ICBpZiAoIWpzU3RyaW5nQXR0ci5pc051bGwoKSAmJiAhanNTdHJpbmdBdHRyLmlzVW5kZWZpbmVk
KCkpCisgICAgICAgICAgICB0ZXN0SnNvbk9iai0+c2V0U3RyaW5nQXR0cih1c3RyaW5nVG9TdHJp
bmcoanNTdHJpbmdBdHRyLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIEpTVmFsdWUganNJbnRB
dHRyID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaW50QXR0ciIpKTsKKyAg
ICAgICAgaWYgKCFqc0ludEF0dHIuaXNOdWxsKCkgJiYgIWpzSW50QXR0ci5pc1VuZGVmaW5lZCgp
KQorICAgICAgICAgICAgdGVzdEpzb25PYmotPnNldEludEF0dHIoanNJbnRBdHRyLnRvSW50MzIo
ZXhlYykpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RKc29uT2JqID0gYWRvcHRSZWYodG9U
ZXN0SlNPTk9iaihleGVjLT5hcmd1bWVudCgwKSkpOworICAgIH0KKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisKKyAgICBpbXAtPm1ldGhvZFdpdGhBbGxvd0pTT04odGVzdEpzb25PYmopOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIC8vIENvbnN0YW50IGdl
dHRlcnMKIAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8wKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDk5M2RmOGNhOTMwMWVhZjdmNzc3NWNiZjM5ZGIzMTEz
YzQ5NzNhZDMuLjY4YWM2MWU4YmI3YjQyZmU1NTlkMDNiMGExMjNlYTE2MmM2OGRiZmUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC0xMTksNiAr
MTE5LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXIKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJh
Y2tBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZChK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFsbG93SlNPTihKU0M6OkV4ZWNTdGF0ZSop
OwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlJbnRBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggZjhmZTc4Mjdm
OTQwOTJiMWZmYjliNGU2MDllMTk0NDc5MDM1NjBjYi4uNTU1ZDdkNzIwZjJjYmQzZDgyMDFjMjBh
NjUwODkyNzRkMGU5NTM1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9i
ai5pZGwKQEAgLTEzOCw2ICsxMzgsMTEgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICB2b2lkICAg
IG92ZXJsb2FkZWRNZXRob2QoaW4gW0NhbGxiYWNrXSBUZXN0Q2FsbGJhY2sgY2FsbGJhY2spOwog
I2VuZGlmCiAKKyNpZiBkZWZpbmVkKFRFU1RJTkdfVjgpIHx8IGRlZmluZWQoVEVTVElOR19KUykK
KyAgICAgICAgLy8gQWxsb3dKU09OCisgICAgICAgIHZvaWQgICAgbWV0aG9kV2l0aEFsbG93SlNP
TihpbiBbQWxsb3dKU09OXSBUZXN0SlNPTk9iaiB0ZXN0SnNvbk9iaik7CisjZW5kaWYKKwogICAg
ICAgICAvLyBPYmplY3RpdmVDIHJlc2VydmVkIHdvcmRzLgogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgbG9uZyAgICAgIGRlc2NyaXB0aW9uOwogICAgICAgICBhdHRyaWJ1dGUgbG9uZyAgICAg
ICAgICAgICAgIGlkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKaW5kZXggYjRhY2Y3NGU5YmFkMTgwM2E3OTM5MWEyMzNjZDZhYmQ0ZmU5YTYyZi4u
YmM5ZjFjYTU3YTEzMWMzZWNhYThiYzJjMjAzNDYzNjk4Y2FiZmVmZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdENh
bGxTdGFjay5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUg
IlRlc3RKU09OT2JqLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKQEAgLTM1LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
ICNpbmNsdWRlICJWOFRlc3RDYWxsYmFjay5oIgorI2luY2x1ZGUgIlY4VGVzdEpTT05PYmouaCIK
ICNpbmNsdWRlICJWOGxvZy5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgpAQCAtMTAwMyw2ICsxMDA1LDM3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiB9CiAKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEFsbG93SlNPTkNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRo
b2RXaXRoQWxsb3dKU09OIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8VGVzdEpTT05PYmo+IHRlc3RKc29uT2JqOwor
ICAgIGlmICghaXNVbmRlZmluZWRPck51bGwoYXJnc1swXSkgJiYgYXJnc1swXS0+SXNPYmplY3Qo
KSAmJiAhVjhUZXN0SlNPTk9iajo6SGFzSW5zdGFuY2UoYXJnc1swXSkpIHsKKyAgICAgICAgRVhD
RVBUSU9OX0JMT0NLKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIG9iamVjdCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgICAgIHRlc3RKc29uT2JqID0gVGVzdEpT
T05PYmo6OmNyZWF0ZSgpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFRlc3RPYmpB
dHRyID0gb2JqZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3KCJ0ZXN0T2JqQXR0ciIpKTsKKyAgICAg
ICAgaWYgKCF2OFRlc3RPYmpBdHRyLklzRW1wdHkoKSAmJiAhaXNVbmRlZmluZWRPck51bGwodjhU
ZXN0T2JqQXR0cikpIHsKKyAgICAgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgdGVz
dE9iakF0dHIsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UodjhUZXN0T2JqQXR0cikgPyBWOFRlc3RP
Ymo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhUZXN0T2JqQXR0cikp
IDogMCk7CisgICAgICAgICAgICB0ZXN0SnNvbk9iai0+c2V0VGVzdE9iakF0dHIodGVzdE9iakF0
dHIpOworICAgICAgICB9CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4U3RyaW5nQXR0
ciA9IG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygic3RyaW5nQXR0ciIpKTsKKyAgICAgICAg
aWYgKCF2OFN0cmluZ0F0dHIuSXNFbXB0eSgpICYmICFpc1VuZGVmaW5lZE9yTnVsbCh2OFN0cmlu
Z0F0dHIpKSB7CisgICAgICAgICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JM
T0NLKFY4UGFyYW1ldGVyPD4sIHN0cmluZ0F0dHIsIHY4U3RyaW5nQXR0cik7CisgICAgICAgICAg
ICB0ZXN0SnNvbk9iai0+c2V0U3RyaW5nQXR0cihzdHJpbmdBdHRyKTsKKyAgICAgICAgfQorICAg
ICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OEludEF0dHIgPSBvYmplY3QtPkdldCh2ODo6U3Ry
aW5nOjpOZXcoImludEF0dHIiKSk7CisgICAgICAgIGlmICghdjhJbnRBdHRyLklzRW1wdHkoKSAm
JiAhaXNVbmRlZmluZWRPck51bGwodjhJbnRBdHRyKSkgeworICAgICAgICAgICAgRVhDRVBUSU9O
X0JMT0NLKGludCwgaW50QXR0ciwgdG9JbnQzMih2OEludEF0dHIpKTsKKyAgICAgICAgICAgIHRl
c3RKc29uT2JqLT5zZXRJbnRBdHRyKGludEF0dHIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICBFWENFUFRJT05fQkxPQ0soVGVzdEpTT05PYmoqLCB0bXBfdGVzdEpzb25PYmosIFY4
VGVzdEpTT05PYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhUZXN0SlNPTk9iajo6dG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKKyAgICAgICB0
ZXN0SnNvbk9iaiA9IGFkb3B0UmVmKHRtcF90ZXN0SnNvbk9iaik7CisgICAgfQorICAgIGltcC0+
bWV0aG9kV2l0aEFsbG93SlNPTih0ZXN0SnNvbk9iaik7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0T2JqSW50ZXJuYWwKIAogc3Rh
dGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdE9iakF0dHJzW10gPSB7CkBAIC0xMTc2LDYg
KzEyMDksMTIgQEAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBD
b25maWd1cmVWOFRlc3RPYmpUZW1wbGF0ZSh2ODo6UGVyc2kKICAgICB2ODo6SGFuZGxlPHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBjdXN0b21BcmdzQW5kRXhjZXB0aW9uQXJndltjdXN0b21BcmdzQW5k
RXhjZXB0aW9uQXJnY10gPSB7IFY4bG9nOjpHZXRSYXdUZW1wbGF0ZSgpIH07CiAgICAgdjg6Okhh
bmRsZTx2ODo6U2lnbmF0dXJlPiBjdXN0b21BcmdzQW5kRXhjZXB0aW9uU2lnbmF0dXJlID0gdjg6
OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25BcmdjLCBjdXN0b21B
cmdzQW5kRXhjZXB0aW9uQXJndik7CiAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImN1
c3RvbUFyZ3NBbmRFeGNlcHRpb24iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2Jq
SW50ZXJuYWw6OmN1c3RvbUFyZ3NBbmRFeGNlcHRpb25DYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCksIGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25TaWduYXR1cmUpKTsKKworICAgIC8vIEN1
c3RvbSBTaWduYXR1cmUgJ21ldGhvZFdpdGhBbGxvd0pTT04nCisgICAgY29uc3QgaW50IG1ldGhv
ZFdpdGhBbGxvd0pTT05BcmdjID0gMTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBtZXRob2RXaXRoQWxsb3dKU09OQXJndlttZXRob2RXaXRoQWxsb3dKU09OQXJnY10gPSB7
IFY4VGVzdEpTT05PYmo6OkdldFJhd1RlbXBsYXRlKCkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpT
aWduYXR1cmU+IG1ldGhvZFdpdGhBbGxvd0pTT05TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpO
ZXcoZGVzYywgbWV0aG9kV2l0aEFsbG93SlNPTkFyZ2MsIG1ldGhvZFdpdGhBbGxvd0pTT05Bcmd2
KTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibWV0aG9kV2l0aEFsbG93SlNPTiIp
LCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEFs
bG93SlNPTkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9kV2l0aEFsbG93
SlNPTlNpZ25hdHVyZSkpOwogICAgIGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKGRlc2MsIHByb3Rv
LCBUZXN0T2JqQ29uc3RzLCBzaXplb2YoVGVzdE9iakNvbnN0cykgLyBzaXplb2YoKlRlc3RPYmpD
b25zdHMpKTsKIAogICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeUVudHJ5LmlkbCBiL1dlYkNvcmUvZmlsZWFwaS9EaXJl
Y3RvcnlFbnRyeS5pZGwKaW5kZXggYWMzMGM3Zjg4MzM3ZWIzZDg2MmM1NWY4NDZkOTI3ZjAwZDVm
YWEyNC4uMzA5YTA1YzIzZDMxY2Q4Mzk5NDRlNGYwZTQ0ZWQ3NDYxNzBiNDNjYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeUVudHJ5LmlkbAorKysgYi9XZWJDb3JlL2ZpbGVh
cGkvRGlyZWN0b3J5RW50cnkuaWRsCkBAIC0zNSw3ICszNSw5IEBAIG1vZHVsZSBzdG9yYWdlIHsK
ICAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBEaXJlY3RvcnlFbnRyeSA6IEVudHJ5IHsKICAg
ICAgICAgRGlyZWN0b3J5UmVhZGVyIGNyZWF0ZVJlYWRlcigpOwotICAgICAgICB2b2lkIGdldEZp
bGUoaW4gRE9NU3RyaW5nIHBhdGgsIGluIFtPcHRpb25hbF0gRmxhZ3Mgb3B0aW9ucywgaW4gW09w
dGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtPcHRp
b25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7Ci0gICAgICAgIHZv
aWQgZ2V0RGlyZWN0b3J5KGluIERPTVN0cmluZyBwYXRoLCBpbiBbT3B0aW9uYWxdIEZsYWdzIG9w
dGlvbnMsIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2sp
OworCisgICAgICAgIC8vIEZJWE1FOiBDaGVjayB3aXRoIHRoZSBzcGVjIHRvIHNlZSBpZiB3ZSBj
YW4gYXZvaWQgQWxsb3dKU09OIGhlcmUuCisgICAgICAgIHZvaWQgZ2V0RmlsZShpbiBET01TdHJp
bmcgcGF0aCwgaW4gW09wdGlvbmFsLCBBbGxvd0pTT05dIEZsYWdzIGZsYWdzLCBpbiBbT3B0aW9u
YWwsIENhbGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09wdGlvbmFs
LCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAgdm9pZCBn
ZXREaXJlY3RvcnkoaW4gRE9NU3RyaW5nIHBhdGgsIGluIFtPcHRpb25hbCwgQWxsb3dKU09OXSBG
bGFncyBmbGFncywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxs
YmFjayk7CiAgICAgfTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66799</attachid>
            <date>2010-09-07 17:31:35 -0700</date>
            <delta_ts>2010-09-10 12:38:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45237-20100907173134.patch</filename>
            <type>text/plain</type>
            <size>89116</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTJjNjc1NWJhY2FjZTcyN2RhYWJmOTY1MWE2M2Q0YTRlYTI4ZDA2Ni4uODlkZGM3ODExYzA4NTFl
ZmNkNzk1ZTE3ODliYWZiNmIxNTMwYTA1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wOS0wNCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEpTT04gcGFyYW1ldGVyIHN1cHBvcnQgdG8g
SlMvVjggYmluZGluZyBnZW5lcmF0b3Igc2NyaXB0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjM3CisKKyAgICAgICAgQWRkaW5nIGEgbmV3IGV4
dGVuZGVkIGF0dHJpYnV0ZSAiQWxsb3dKU09OIiB0byBzdXBwb3J0IHBhc3NpbmcgcGFyYW1ldGVy
cyBpbiBKU09OIGZvcm1hdC4KKworICAgICAgICBBZGRlZCBhIG5ldyB0ZXN0IG1ldGhvZCBtZXRo
b2RXaXRoQWxsb3dKU09OIGluIFRlc3RPYmouaWRsLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG06CisgICAgICAgICogZmlsZWFwaS9EaXJlY3RvcnlFbnRyeS5pZGw6CisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFsbG93SlNP
Tik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SlNPTk9i
ai5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdEpTT05PYmouaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEpTT05PYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNPTk9iai5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNPTk9i
alByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEpTT05PYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNPTk9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0SlNPTk9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNPTk9iai5tbTogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEpTT05PYmpJbnRlcm5hbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEpTT05PYmouaWRsOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SlNPTk9iai5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RKU09OT2JqLmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQWxsb3dKU09OQ2Fs
bGJhY2spOgorCiAyMDEwLTA5LTA0ICBKdXN0aW4gU2NodWggIDxqc2NodWhAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDFhMTE0YTQyOTdlMTQ5Mjkz
M2JhYjI4M2UzNjRmNWNhMTQ3OTJiY2YuLmFiMDExMDI4NzUxOGJjMzU4NGI4Nzk1ZjBhNzk3MGJh
YTRjOTIwNWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQpAQCAtMjI3LDYgKzIyNywyMCBAQCBzdWIgR2V0Q2FsbGJhY2tDbGFzc05hbWUKICAgICByZXR1
cm4gIkpTJGNsYXNzTmFtZSI7CiB9CiAKKyMgUmV0dXJucyBzaWduYXR1cmVzIG9mIHJlYWQtd3Jp
dGUgYXR0cmlidXRlcyBmb3IgYSBnaXZlbiBvYmplY3QuCisjIFRoaXMgc3Vicm91dGluZSBpcyBj
YWxsZWQgZm9yIHBhcmFtZXRlcnMgdGhhdCBhcmUgYW5ub3RhdGVkIHdpdGggIkFsbG93SlNPTiIu
CitzdWIgR2V0QXR0cmlidXRlc0ZvckpTT05PYmplY3QKK3sKKyAgICBteSAkdHlwZSA9IHNoaWZ0
OworCisgICAgbXkgJHBhcnNlZCA9ICRjb2RlR2VuZXJhdG9yLT5QYXJzZUludGVyZmFjZSgkdHlw
ZSk7CisgICAgbXkgQGF0dHJpYnV0ZXNBcnJheSA9ICgpOworICAgIGZvcmVhY2ggbXkgJGF0dHJp
YnV0ZSAoQHskcGFyc2VkLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVz
QXJyYXksICRhdHRyaWJ1dGUpIGlmICgkYXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9ubHkvKTsK
KyAgICB9CisgICAgcmV0dXJuIEBhdHRyaWJ1dGVzQXJyYXk7Cit9CisKIHN1YiBBdm9pZEluY2x1
c2lvbk9mVHlwZQogewogICAgIG15ICR0eXBlID0gc2hpZnQ7CkBAIC0xOTY4LDExICsxOTgyLDEy
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwiIC4gJHBhcmFtZXRlci0+dHlw
ZSAuICI+ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gImV4
ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
eSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkcGFyYW1ldGVyLT50eXBl
KTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRm9yIGZ1bmN0aW9ucyB3aXRoICJT
dHJpY3RUeXBlQ2hlY2tpbmciLCBpZiBhbiBpbnB1dCBwYXJhbWV0ZXIncyB0eXBlIGRvZXMgbm90
IG1hdGNoIHRoZSBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIFR5
cGVFcnJvciBpcyB0aHJvd24gaW5zdGVhZCBvZiBjYXN0aW5nIHRvIG51bGwuCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiU3RyaWN0VHlwZUNoZWNraW5nIn0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gImV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpIjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ1R5cGUgPSAkY29kZUdlbmVyYXRv
ci0+U3RyaXBNb2R1bGUoJHBhcmFtZXRlci0+dHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghSXNOYXRpdmVUeXBlKCRhcmdUeXBlKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+ICRhcmdzSW5kZXggJiYgISR7YXJnVmFsdWV9LmlzVW5kZWZpbmVkT3JO
dWxsKCkgJiYgISR7YXJnVmFsdWV9LmluaGVyaXRzKCZKUyR7YXJnVHlwZX06OnNfaW5mbykpXG4i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOwpAQCAtMTk4Miw3
ICsxOTk3LDMxIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0
aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVU
b05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICI7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZvciBwYXJhbWV0ZXJzIHdpdGggIkFs
bG93SlNPTiIsIGxvb2sgZm9yIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkeW5hbWljYWxseQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgY3JlYXRlIGEgZGVzaXJlZCB0eXBlIG9mIGluc3Rh
bmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNOYXRpdmVUeXBlKCRhcmdU
eXBlKSAmJiAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQWxsb3dKU09OIn0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHBhcmFtZXRlclR5cGUgPSAkcGFy
YW1ldGVyLT50eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyIkcGFyYW1ldGVyVHlwZS5oIn0gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHBhcmFtZXRlclR5cGU+ICRuYW1l
O1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmICghJGFyZ1ZhbHVlLmlzTnVsbCgpICYmICEkYXJnVmFsdWUuaXNVbmRlZmluZWQo
KSAmJiAkYXJnVmFsdWUuaXNPYmplY3QoKSAmJiAhJHthcmdWYWx1ZX0uaW5oZXJpdHMoJkpTJHth
cmdUeXBlfTo6c19pbmZvKSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gJGFyZ1ZhbHVl
LmdldE9iamVjdCgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICAkbmFtZSA9ICR7cGFyYW1ldGVyVHlwZX06OmNyZWF0ZSgp
O1xuIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgQGF0dHJpYnV0ZXMg
PSBHZXRBdHRyaWJ1dGVzRm9ySlNPTk9iamVjdCgkcGFyYW1ldGVyVHlwZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQGF0dHJpYnV0ZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRhdHRyTmFtZSA9ICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG15ICRqc1Zhck5hbWUgPSAianMiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3Qo
JGF0dHJOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzZXR0
ZXIgPSAic2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyTmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgSlNWYWx1ZSAkanNWYXJOYW1lID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCBcIiRhdHRyTmFtZVwiKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoISRqc1Zhck5hbWUuaXNOdWxsKCkg
JiYgISRqc1Zhck5hbWUuaXNVbmRlZmluZWQoKSlcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICAkbmFtZS0+JHNl
dHRlcigiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJGpzVmFyTmFt
ZSkgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH0gZWxzZSB7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgICRuYW1lID0gYWRvcHRSZWYoIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVy
LCAkYXJnVmFsdWUpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgIiAuIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpIC4g
IiAkbmFtZSA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImV4ZWMtPmFyZ3VtZW50
KCRhcmdzSW5kZXgpIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHBhcmFtZXRlciBpcyAiYW4gaW5k
ZXgiIGFuZCBpdCdzIG5lZ2F0aXZlIGl0IHNob3VsZCB0aHJvdyBhbiBJTkRFWF9TSVpFX0VSUiBl
eGNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCdXQgdGhpcyBuZWVkcyB0
byBiZSBkb25lIGluIHRoZSBiaW5kaW5ncywgYmVjYXVzZSB0aGUgdHlwZSBpcyB1bnNpZ25lZCBh
bmQgdGhlIGZhY3QgdGhhdCBpdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KaW5kZXggZWNhNzMwMTZlYjk5NjZlOWVkMjZkMTRkZTBiNDA0YWQ3MmYzMmFlZS4u
MjUzNTVkMmUzNzQ4NTkwZTAzZWZiYjI1NDQ0MjBmOTRmMjRlMGIwMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0yNSw2ICsyNSw4IEBACiAKIHBh
Y2thZ2UgQ29kZUdlbmVyYXRvclY4OwogCit1c2UgSURMUGFyc2VyOworCiB1c2UgRmlsZTo6c3Rh
dDsKIHVzZSBEaWdlc3Q6Ok1ENTsKIApAQCAtMTI1NSwxMSArMTI1NywxMSBAQCBFTkQKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIENvbnZlcnRUb1Y4UGFyYW1l
dGVyKCRwYXJhbWV0ZXIsICRuYXRpdmVUeXBlLCAkcGFyYW1ldGVyTmFtZSwgJHZhbHVlKSAuICJc
biIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhCaW5k
aW5nTWFjcm9zLmgifSA9IDE7CisgICAgICAgICAgICBteSAkYXJnVmFsdWUgPSAiYXJnc1skcGFy
YW1JbmRleF0iOworICAgICAgICAgICAgbXkgJGFyZ1R5cGUgPSBHZXRUeXBlRnJvbVNpZ25hdHVy
ZSgkcGFyYW1ldGVyKTsKICAgICAgICAgICAgICMgRm9yIGZ1bmN0aW9ucyB3aXRoICJTdHJpY3RU
eXBlQ2hlY2tpbmciLCBpZiBhbiBpbnB1dCBwYXJhbWV0ZXIncyB0eXBlIGRvZXMgbm90IG1hdGNo
IHRoZSBzaWduYXR1cmUsCiAgICAgICAgICAgICAjIGEgVHlwZUVycm9yIGlzIHRocm93biBpbnN0
ZWFkIG9mIGNhc3RpbmcgdG8gbnVsbC4KICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlN0cmljdFR5cGVDaGVja2luZyJ9KSB7Ci0gICAg
ICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0gImFyZ3NbJHBhcmFtSW5kZXhdIjsKLSAgICAgICAg
ICAgICAgICBteSAkYXJnVHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0dXJlKCRwYXJhbWV0ZXIpOwog
ICAgICAgICAgICAgICAgIGlmIChJc1dyYXBwZXJUeXBlKCRhcmdUeXBlKSkgewogICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gJHBhcmFtSW5kZXggJiYgIWlzVW5kZWZpbmVkT3JOdWxsKCRhcmdWYWx1ZSkgJiYgIVY4JHth
cmdUeXBlfTo6SGFzSW5zdGFuY2UoJGFyZ1ZhbHVlKSkge1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIFY4UHJveHk6OnRocm93VHlwZUVy
cm9yKCk7XG4iKTsKQEAgLTEyNzIsOCArMTI3NCw0NCBAQCBFTkQKICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IEVYQ0VQVElPTl9CTE9DSygkbmF0aXZlVHlwZSwgJHBhcmFtZXRlck5hbWUsICIgLgotICAgICAg
ICAgICAgICAgICBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3NbJHBhcmFtSW5kZXhd
IiwgQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAgIiR7cGFyYW1ldGVy
TmFtZX1PayIgOiB1bmRlZikgLiAiKTtcbiIpOworCisgICAgICAgICAgICAjIEZvciBwYXJhbWV0
ZXJzIHdpdGggIkFsbG93SlNPTiIsIGxvb2sgZm9yIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkeW5h
bWljYWxseQorICAgICAgICAgICAgIyBjcmVhdGUgYSBkZXNpcmVkIHR5cGUgb2YgaW5zdGFuY2Uu
CisgICAgICAgICAgICBpZiAoSXNXcmFwcGVyVHlwZSgkYXJnVHlwZSkgJiYgJHBhcmFtZXRlci0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFsbG93SlNPTiJ9KSB7CisgICAgICAgICAgICAgICAgbXkg
JHBhcmFtZXRlclR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOworICAgICAgICAgICAgICAgICRpbXBs
SW5jbHVkZXN7IiRwYXJhbWV0ZXJUeXBlLmgifSA9IDE7CisgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICBSZWZQdHI8JHBhcmFtZXRlclR5cGU+ICRwYXJhbWV0ZXJO
YW1lO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBp
ZiAoIWlzVW5kZWZpbmVkT3JOdWxsKCRhcmdWYWx1ZSkgJiYgJGFyZ1ZhbHVlLT5Jc09iamVjdCgp
ICYmICFWOCR7YXJnVHlwZX06Okhhc0luc3RhbmNlKCRhcmdWYWx1ZSkpIHtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIEVYQ0VQVElPTl9CTE9D
Syh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBvYmplY3QsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoYXJnc1skcGFyYW1JbmRleF0pKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHtwYXJhbWV0ZXJUeXBl
fTo6Y3JlYXRlKCk7XG4iKTsKKworICAgICAgICAgICAgICAgIG15IEBhdHRyaWJ1dGVzID0gR2V0
QXR0cmlidXRlc0ZvckpTT05PYmplY3QoJHBhcmFtZXRlclR5cGUpOworICAgICAgICAgICAgICAg
IGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbXkgJGF0dHJOYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICAg
ICAgICAgICAgICBteSAkdmFyTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRy
TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG15ICRqc1Zhck5hbWUgPSAidjgiIC4gJGNvZGVH
ZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbXkg
JHNldHRlciA9ICJzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJOYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgbXkgJHZhclR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGU7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+ICRqc1Zhck5hbWUgPSBvYmplY3QtPkdldCh2ODo6U3Ry
aW5nOjpOZXcoXCIkYXR0ck5hbWVcIikpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIGlmICghJGpzVmFyTmFtZS5Jc0VtcHR5KCkgJiYg
IWlzVW5kZWZpbmVkT3JOdWxsKCRqc1Zhck5hbWUpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgbXkgJHZhck5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoJHZhck5hdGl2ZVR5
cGUgPX4gL15WOFBhcmFtZXRlci8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICAgICAgICAiIC4gQ29udmVydFRvVjhQYXJhbWV0ZXIoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAkdmFyTmF0aXZlVHlwZSwgJHZhck5hbWUsIEpTVmFsdWVUb05h
dGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRqc1Zhck5hbWUpKSAuICJcbiIpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICAgICAgICAgIEVYQ0VQVElPTl9CTE9DSygkdmFyTmF0aXZlVHlw
ZSwgJHZhck5hbWUsICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAk
anNWYXJOYW1lKSAuICIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgICAgICRwYXJhbWV0ZXJO
YW1lLT4kc2V0dGVyKCR2YXJOYW1lKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB9IGVsc2Uge1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICBFWENFUFRJT05f
QkxPQ0soJG5hdGl2ZVR5cGUsIHRtcF8kcGFyYW1ldGVyTmFtZSwgIiAuCisgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlVG9OYXRpdmUoJHBhcmFtZXRlciwgImFyZ3NbJHBhcmFtSW5kZXhd
IiwgQmFzaWNUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAgIiR7cGFyYW1ldGVy
TmFtZX1PayIgOiB1bmRlZikgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgICAgJHBhcmFtZXRlck5hbWUgPSBhZG9wdFJlZih0bXBfJHBhcmFt
ZXRlck5hbWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICBFWENFUFRJT05fQkxPQ0soJG5hdGl2ZVR5cGUsICRwYXJh
bWV0ZXJOYW1lLCAiIC4KKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVRvTmF0aXZlKCRwYXJh
bWV0ZXIsICJhcmdzWyRwYXJhbUluZGV4XSIsIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRw
YXJhbWV0ZXIpID8gICIke3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIik7XG4iKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSXNJbmRleCJ9KSB7CkBAIC0yNTE5LDYgKzI1NTcsMjAgQEAgc3ViIElz
QWN0aXZlRG9tVHlwZQogICAgIHJldHVybiAwOwogfQogCisjIFJldHVybnMgc2lnbmF0dXJlcyBv
ZiByZWFkLXdyaXRlIGF0dHJpYnV0ZXMgZm9yIGEgZ2l2ZW4gb2JqZWN0LgorIyBUaGlzIHN1YnJv
dXRpbmUgaXMgY2FsbGVkIGZvciBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFubm90YXRlZCB3aXRoICJB
bGxvd0pTT04iLgorc3ViIEdldEF0dHJpYnV0ZXNGb3JKU09OT2JqZWN0Cit7CisgICAgbXkgJHR5
cGUgPSBzaGlmdDsKKworICAgIG15ICRwYXJzZWQgPSAkY29kZUdlbmVyYXRvci0+UGFyc2VJbnRl
cmZhY2UoJHR5cGUpOworICAgIG15IEBhdHRyaWJ1dGVzQXJyYXkgPSAoKTsKKyAgICBmb3JlYWNo
IG15ICRhdHRyaWJ1dGUgKEB7JHBhcnNlZC0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgcHVzaChA
YXR0cmlidXRlc0FycmF5LCAkYXR0cmlidXRlKSBpZiAoJGF0dHJpYnV0ZS0+dHlwZSAhfiAvXnJl
YWRvbmx5Lyk7CisgICAgfQorICAgIHJldHVybiBAYXR0cmlidXRlc0FycmF5OworfQorCiBzdWIg
R2V0TmF0aXZlVHlwZUZvckNvbnZlcnNpb25zCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SlNP
Tk9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEpT
T05PYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlMTg0NmM4NWNmOGQ3YzQ2ZTJkODEyNGI0MjgzM2Q0YmUw
MjVmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdEpTT05PYmouY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTVRlc3RKU09OT2JqLmgi
CisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGVzdEpTT05PYmouaCIKKyNpbmNsdWRl
ICJUZXN0T2JqLmgiCisjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRE9N
VGVzdE9iai5oIgorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJ3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgV2ViRE9NVGVzdEpTT05PYmo6OldlYkRPTVRlc3RK
U09OT2JqUHJpdmF0ZSB7CisgICAgV2ViRE9NVGVzdEpTT05PYmpQcml2YXRlKFdlYkNvcmU6OlRl
c3RKU09OT2JqKiBvYmplY3QgPSAwKQorICAgICAgICA6IGltcGwob2JqZWN0KQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEpTT05PYmo+IGltcGw7Cit9OworCitXZWJE
T01UZXN0SlNPTk9iajo6V2ViRE9NVGVzdEpTT05PYmooKQorICAgIDogV2ViRE9NT2JqZWN0KCkK
KyAgICAsIG1faW1wbCgwKQoreworfQorCitXZWJET01UZXN0SlNPTk9iajo6V2ViRE9NVGVzdEpT
T05PYmooV2ViQ29yZTo6VGVzdEpTT05PYmoqIGltcGwpCisgICAgOiBXZWJET01PYmplY3QoKQor
ICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0SlNPTk9ialByaXZhdGUoaW1wbCkpCit7Cit9CisK
K1dlYkRPTVRlc3RKU09OT2JqOjpXZWJET01UZXN0SlNPTk9iaihjb25zdCBXZWJET01UZXN0SlNP
Tk9iaiYgY29weSkKKyAgICA6IFdlYkRPTU9iamVjdCgpCit7CisgICAgbV9pbXBsID0gY29weS5p
bXBsKCkgPyBuZXcgV2ViRE9NVGVzdEpTT05PYmpQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Cit9
CisKK1dlYkRPTVRlc3RKU09OT2JqJiBXZWJET01UZXN0SlNPTk9iajo6b3BlcmF0b3I9KGNvbnN0
IFdlYkRPTVRlc3RKU09OT2JqJiBjb3B5KQoreworICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9p
bXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEpTT05PYmpQcml2YXRlKGNvcHkuaW1w
bCgpKSA6IDA7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDb3JlOjpUZXN0SlNPTk9iaiog
V2ViRE9NVGVzdEpTT05PYmo6OmltcGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPmltcGwuZ2V0KCkgOiAwOworfQorCitXZWJET01UZXN0SlNPTk9iajo6fldlYkRPTVRl
c3RKU09OT2JqKCkKK3sKKyAgICBkZWxldGUgbV9pbXBsOworICAgIG1faW1wbCA9IDA7Cit9CisK
K2ludCBXZWJET01UZXN0SlNPTk9iajo6aW50QXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBs
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+aW50QXR0cigpOwor
fQorCit2b2lkIFdlYkRPTVRlc3RKU09OT2JqOjpzZXRJbnRBdHRyKGludCBuZXdJbnRBdHRyKQor
eworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldElu
dEF0dHIobmV3SW50QXR0cik7Cit9CisKK2xvbmcgbG9uZyBXZWJET01UZXN0SlNPTk9iajo6bG9u
Z0xvbmdBdHRyKCkgY29uc3QKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gaW1wbCgpLT5sb25nTG9uZ0F0dHIoKTsKK30KKwordm9pZCBXZWJET01U
ZXN0SlNPTk9iajo6c2V0TG9uZ0xvbmdBdHRyKGxvbmcgbG9uZyBuZXdMb25nTG9uZ0F0dHIpCit7
CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+c2V0TG9u
Z0xvbmdBdHRyKG5ld0xvbmdMb25nQXR0cik7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBXZWJE
T01UZXN0SlNPTk9iajo6dW5zaWduZWRMb25nTG9uZ0F0dHIoKSBjb25zdAoreworICAgIGlmICgh
aW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPnVuc2lnbmVk
TG9uZ0xvbmdBdHRyKCk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdEpTT05PYmo6OnNldFVuc2lnbmVk
TG9uZ0xvbmdBdHRyKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdVbnNpZ25lZExvbmdMb25nQXR0cikK
K3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5zZXRV
bnNpZ25lZExvbmdMb25nQXR0cihuZXdVbnNpZ25lZExvbmdMb25nQXR0cik7Cit9CisKK1dlYkRP
TVN0cmluZyBXZWJET01UZXN0SlNPTk9iajo6c3RyaW5nQXR0cigpIGNvbnN0Cit7CisgICAgaWYg
KCFpbXBsKCkpCisgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKKworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+c3RyaW5nQXR0cigpKTsKK30K
Kwordm9pZCBXZWJET01UZXN0SlNPTk9iajo6c2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJp
bmcmIG5ld1N0cmluZ0F0dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGltcGwoKS0+c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdBdHRyKTsKK30KKworV2ViRE9N
VGVzdE9iaiBXZWJET01UZXN0SlNPTk9iajo6dGVzdE9iakF0dHIoKSBjb25zdAoreworICAgIGlm
ICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOworCisgICAgcmV0dXJu
IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+dGVzdE9iakF0dHIoKSkpOworfQorCit2b2lk
IFdlYkRPTVRlc3RKU09OT2JqOjpzZXRUZXN0T2JqQXR0cihjb25zdCBXZWJET01UZXN0T2JqJiBu
ZXdUZXN0T2JqQXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW1wbCgpLT5zZXRUZXN0T2JqQXR0cih0b1dlYkNvcmUobmV3VGVzdE9iakF0dHIpKTsKK30K
KworV2ViQ29yZTo6VGVzdEpTT05PYmoqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0SlNPTk9i
aiYgd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Cit9CisKK1dlYkRPTVRl
c3RKU09OT2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RKU09OT2JqKiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gV2ViRE9NVGVzdEpTT05PYmoodmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RKU09OT2JqLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEpTT05PYmouaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NmViZTg5MDMwY2U2NzcwNTA4MzZkOGQwMDQ2NTZlMzgzZDAwODUyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RKU09OT2JqLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0Bn
bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViRE9NVGVzdEpTT05PYmpfaAorI2Rl
ZmluZSBXZWJET01UZXN0SlNPTk9ial9oCisKKyNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KKyNp
bmNsdWRlIDxXZWJET01TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVz
dEpTT05PYmo7Cit9OworCitjbGFzcyBXZWJET01UZXN0T2JqOworCitjbGFzcyBXZWJET01UZXN0
SlNPTk9iaiA6IHB1YmxpYyBXZWJET01PYmplY3QgeworcHVibGljOgorICAgIFdlYkRPTVRlc3RK
U09OT2JqKCk7CisgICAgZXhwbGljaXQgV2ViRE9NVGVzdEpTT05PYmooV2ViQ29yZTo6VGVzdEpT
T05PYmoqKTsKKyAgICBXZWJET01UZXN0SlNPTk9iaihjb25zdCBXZWJET01UZXN0SlNPTk9iaiYp
OworICAgIFdlYkRPTVRlc3RKU09OT2JqJiBvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdEpTT05P
YmomKTsKKyAgICB2aXJ0dWFsIH5XZWJET01UZXN0SlNPTk9iaigpOworCisgICAgaW50IGludEF0
dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldEludEF0dHIoaW50KTsKKyAgICBsb25nIGxvbmcgbG9u
Z0xvbmdBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb25nTG9uZ0F0dHIobG9uZyBsb25nKTsK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdW5zaWduZWRMb25nTG9uZ0F0dHIoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisgICAg
V2ViRE9NU3RyaW5nIHN0cmluZ0F0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0cmluZ0F0dHIo
Y29uc3QgV2ViRE9NU3RyaW5nJik7CisgICAgV2ViRE9NVGVzdE9iaiB0ZXN0T2JqQXR0cigpIGNv
bnN0OworICAgIHZvaWQgc2V0VGVzdE9iakF0dHIoY29uc3QgV2ViRE9NVGVzdE9iaiYpOworCisg
ICAgV2ViQ29yZTo6VGVzdEpTT05PYmoqIGltcGwoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAg
IHN0cnVjdCBXZWJET01UZXN0SlNPTk9ialByaXZhdGU7CisgICAgV2ViRE9NVGVzdEpTT05PYmpQ
cml2YXRlKiBtX2ltcGw7Cit9OworCitXZWJDb3JlOjpUZXN0SlNPTk9iaiogdG9XZWJDb3JlKGNv
bnN0IFdlYkRPTVRlc3RKU09OT2JqJik7CitXZWJET01UZXN0SlNPTk9iaiB0b1dlYktpdChXZWJD
b3JlOjpUZXN0SlNPTk9iaiopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTT05PYmouY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNPTk9iai5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjg0YTljNTNhYWZmMGI4ZjZkZDVhOTgzMjJlNjI0NzViODIyN2VhNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEpTT05PYmouY3BwCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgi
CisjaW5jbHVkZSAiVGVzdEpTT05PYmouaCIKKyNpbmNsdWRlICJUZXN0T2JqLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NQmluZGluZy5oIgorI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0SlNPTk9iai5oIgorI2luY2x1
ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0SlNPTk9ialByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJr
aXQvV2ViS2l0RE9NVGVzdE9iai5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2Jq
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3ZWJraXRw
cml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorZ3BvaW50ZXIga2l0KFdlYkNv
cmU6OlRlc3RKU09OT2JqKiBvYmopCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAw
KTsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisg
ICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmos
IFdlYktpdDo6d3JhcFRlc3RKU09OT2JqKG9iaikpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0IC8vCisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZ2V0X2ludF9hdHRy
KFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpUZXN0SlNPTk9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzID0gaXRlbS0+aW50QXR0cigpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQK
K3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9zZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdEpTT05P
YmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OlRl
c3RKU09OT2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRB
dHRyKHZhbHVlKTsKK30KKworZ2ludDY0Cit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZ2V0X2xv
bmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2ludDY0IHJlcyA9IGl0ZW0tPmxvbmdMb25nQXR0cigpOworICAgIHJldHVy
biByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9zZXRfbG9uZ19sb25n
X2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYsIGdpbnQ2NCB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0TG9uZ0xvbmdBdHRyKHZhbHVlKTsKK30KKworZ3VpbnQ2NAor
d2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJL
aXRET01UZXN0SlNPTk9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6VGVzdEpTT05PYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50
NjQgcmVzID0gaXRlbS0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9u
Z19hdHRyKFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmLCBndWludDY0IHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OlRlc3RKU09OT2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZExvbmdMb25nQXR0cih2YWx1ZSk7Cit9CisK
K2djaGFyKgord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dldF9zdHJpbmdfYXR0cihXZWJLaXRE
T01UZXN0SlNPTk9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6VGVzdEpTT05PYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJu
IHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX3NldF9zdHJpbmdfYXR0
cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OlRlc3RKU09OT2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldFN0cmluZ0F0dHIoY29udmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioK
K3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9nZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0
SlNPTk9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVz
dEpTT05PYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT50ZXN0T2JqQXR0cigpKTsK
KyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T2Jq
Kj4oV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVz
dEpTT05PYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OlRlc3RKU09OT2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29u
dmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBj
b252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldFRlc3RPYmpBdHRy
KGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SlNP
Tk9iaiwgd2Via2l0X2RvbV90ZXN0X2pzb25fb2JqLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29yZTo6VGVzdEpTT05PYmoqIGNvcmUoV2ViS2l0
RE9NVGVzdEpTT05PYmoqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVx
dWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiogY29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RKU09OT2JqKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCkt
PmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwor
CisgICAgcmV0dXJuIGNvcmVPYmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfSU5UX0FUVFIsCisgICAgUFJPUF9MT05HX0xPTkdf
QVRUUiwKKyAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSLAorICAgIFBST1BfU1RSSU5H
X0FUVFIsCisgICAgUFJPUF9URVNUX09CSl9BVFRSLAorfTsKKworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfanNvbl9vYmpfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7Cisg
ICAgCisgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6
VGVzdEpTT05PYmoqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SlNPTk9i
aiAqPihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7
CisKKyAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQorCisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc29uX29i
al9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYgPSBXRUJL
SVRfRE9NX1RFU1RfSlNPTl9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiog
Y29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7Cisg
ICAgY2FzZSBQUk9QX0lOVF9BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldEludEF0
dHIoKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6CisgICAgeworICAgICAgICBjb3Jl
U2VsZi0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoKGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1ZSkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAg
ICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyKFdURjo6U3RyaW5nOjpmcm9tVVRG
OChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYktpdERP
TVRlc3RKU09OT2JqKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0pTT05fT0JKKG9iamVjdCk7Cisg
ICAgV2ViQ29yZTo6VGVzdEpTT05PYmoqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKKyAgICB7Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5pbnRBdHRyKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgorICAgIHsK
KyAgICAgICAgZ192YWx1ZV9zZXRfaW50NjQodmFsdWUsIGNvcmVTZWxmLT5sb25nTG9uZ0F0dHIo
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19M
T05HX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIGNvcmVT
ZWxmLT51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmluZ0F0dHIoKSkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1RFU1RfT0JKX0FUVFI6CisgICAg
eworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPnRlc3RP
YmpBdHRyKCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQo
cHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfanNvbl9vYmpfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworCisgICAgaWYg
KEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9qc29uX29ial9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2pzb25f
b2JqX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9qc29uX29ial9jbGFzc19pbml0KFdlYktpdERPTVRlc3RKU09OT2Jq
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21fdGVzdF9qc29uX29ial9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9qc29uX29ial9zZXRfcHJvcGVydHk7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpf
Z2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9t
X3Rlc3RfanNvbl9vYmpfY29uc3RydWN0ZWQ7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfSU5UX0FUVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfbG9uZygiaW50LWF0dHIiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X2pzb25fb2Jq
X2ludC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25n
IFRlc3RKU09OT2JqLmludC1hdHRyIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4
dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCitHX01BWExPTkcs
IC8qIG1heCAqLworMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0xPTkdfTE9OR19BVFRSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludDY0KCJsb25n
LWxvbmctYXR0ciIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfanNvbl9vYmpfbG9uZy1sb25nLWF0dHIi
LCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2ludDY0IFRlc3RKU09O
T2JqLmxvbmctbG9uZy1hdHRyIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJh
IGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUlOSU5UNjQsIC8qIG1pbiAqLworR19NQVhJTlQ2NCwg
LyogbWF4ICovCiswLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FU
VFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWlu
dDY0KCJ1bnNpZ25lZC1sb25nLWxvbmctYXR0ciIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfanNvbl9v
YmpfdW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cmVhZC13cml0ZSAgZ3VpbnQ2NCBUZXN0SlNPTk9iai51bnNpZ25lZC1sb25nLWxvbmctYXR0ciIs
IC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAvKiBtaW4gKi8KK0dfTUFYVUlOVDY0LCAvKiBtaW4gKi8KKzAsIC8qIGRlZmF1bHQgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9TVFJJTkdfQVRUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoInN0cmluZy1hdHRyIiwgLyogbmFtZSAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9q
c29uX29ial9zdHJpbmctYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdy
aXRlICBnY2hhciogVGVzdEpTT05PYmouc3RyaW5nLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBk
byB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIC8qIGRlZmF1bHQgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9URVNUX09CSl9BVFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgidGVzdC1vYmotYXR0ciIsIC8qIG5hbWUgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
c3RfanNvbl9vYmpfdGVzdC1vYmotYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJy
ZWFkLXdyaXRlICBXZWJLaXRET01UZXN0T2JqKiBUZXN0SlNPTk9iai50ZXN0LW9iai1hdHRyIiwg
LyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9UWVBFX0RPTV9URVNUX09CSiwgLyogZ29iamVjdCB0eXBlICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9q
c29uX29ial9pbml0KFdlYktpdERPTVRlc3RKU09OT2JqKiByZXF1ZXN0KQoreworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRlc3RKU09OT2JqKiB3cmFwVGVzdEpTT05PYmooV2Vi
Q29yZTo6VGVzdEpTT05PYmoqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVz
aW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmpl
Y3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBm
aW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICov
CisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9K
U09OX09CSihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfSlNPTl9PQkosCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIE5VTEwpKTsKK30KK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNP
Tk9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0SlNPTk9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhZGU3YWY2MDFhMTg2NTUwZGRhMTQyMmU5YzllZWIw
ZTAxZDI5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RKU09OT2JqLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RKU09OT2JqX2gKKyNkZWZp
bmUgV2ViS2l0RE9NVGVzdEpTT05PYmpfaAorCisjaW5jbHVkZSAid2Via2l0L3dlYmtpdGRvbWRl
ZmluZXMuaCIKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRkZWZpbmVzLmg+CisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgorCisKK0df
QkVHSU5fREVDTFMKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfSlNPTl9PQkogICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9KU09OX09CSihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9KU09OX09CSiwgV2ViS2l0RE9NVGVz
dEpTT05PYmopKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSlNPTl9PQkpfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RF
U1RfSlNPTl9PQkosIFdlYktpdERPTVRlc3RKU09OT2JqQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9KU09OX09CSihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9KU09OX09CSikpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVTVF9KU09OX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9KU09OX09CSikpCisjZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9KU09OX09CSl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9KU09OX09CSiwgV2ViS2l0RE9N
VGVzdEpTT05PYmpDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdEpTT05PYmogeworICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TVRlc3RKU09OT2JqQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9nZXRf
dHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9qc29uX29i
al9nZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYpOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9zZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVz
dEpTT05PYmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworV0VCS0lUX0FQSSBnaW50NjQKK3dlYmtp
dF9kb21fdGVzdF9qc29uX29ial9nZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdEpTT05P
YmoqIHNlbGYpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9z
ZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYsIGdpbnQ2NCB2YWx1
ZSk7CisKK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dldF91
bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZik7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX3NldF91bnNpZ25lZF9sb25n
X2xvbmdfYXR0cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZiwgZ3VpbnQ2NCB2YWx1ZSk7CisK
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZ2V0X3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Rlc3RfanNvbl9vYmpfc2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RKU09OT2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitXRUJLSVRfQVBJIFdlYktpdERPTVRlc3RP
YmoqCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9N
VGVzdEpTT05PYmoqIHNlbGYpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9q
c29uX29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZiwgV2Vi
S2l0RE9NVGVzdE9iaiogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0
RE9NVGVzdEpTT05PYmpfaCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNPTk9ialByaXZhdGUuaCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTT05PYmpQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZGQzMzVmMmRlMzllZThkNTk1NDU4ODg5NjJiNTJiZGViNDEyNTFiMAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEpTT05PYmpQcml2YXRlLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIFdFQl9LSVRfRE9NX1RFU1RfSlNPTl9PQkpfUFJJVkFURV9I
CisjZGVmaW5lIFdFQl9LSVRfRE9NX1RFU1RfSlNPTl9PQkpfUFJJVkFURV9ICisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KKyNp
bmNsdWRlICJUZXN0SlNPTk9iai5oIgorbmFtZXNwYWNlIFdlYktpdCB7CisgICAgV2ViS2l0RE9N
VGVzdEpTT05PYmogKgorICAgIHdyYXBUZXN0SlNPTk9iaihXZWJDb3JlOjpUZXN0SlNPTk9iaiAq
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiAqCisgICAgY29yZShXZWJL
aXRET01UZXN0SlNPTk9iaiAqcmVxdWVzdCk7CisKKyAgICBncG9pbnRlcgorICAgIGtpdChXZWJD
b3JlOjpUZXN0SlNPTk9iaiogbm9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV0VCX0tJVF9ET01fVEVTVF9KU09OX09CSl9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTT05PYmouY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNPTk9iai5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzY2MGI0ZTQyZDFkOGNhOTA2NDU3YmNmOWJmMmE0ODJlMmQyMTk3NwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTT05PYmouY3Bw
CkBAIC0wLDAgKzEsMjU5IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RKU09OT2JqLmgiCisKKyNpbmNsdWRlICJKU1Rlc3RP
YmouaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGVzdEpTT05PYmouaCIKKyNpbmNs
dWRlICJUZXN0T2JqLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU051bWJlckNlbGwuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FTU0VSVF9DTEFTU19G
SVRTX0lOX0NFTEwoSlNUZXN0SlNPTk9iaik7CisKKy8qIEhhc2ggdGFibGUgKi8KKyNpZiBFTkFC
TEUoSklUKQorI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgor
I2Vsc2UKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNlbmRpZgorCitzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SlNPTk9ialRhYmxlVmFsdWVzWzddID0KK3sK
KyAgICB7ICJpbnRBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RKU09OT2JqSW50QXR0ciksIChpbnRwdHJfdClz
ZXRKU1Rlc3RKU09OT2JqSW50QXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJsb25n
TG9uZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEpTT05PYmpMb25nTG9uZ0F0dHIpLCAoaW50cHRyX3Qpc2V0
SlNUZXN0SlNPTk9iakxvbmdMb25nQXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJ1
bnNpZ25lZExvbmdMb25nQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0SlNPTk9ialVuc2lnbmVkTG9uZ0xvbmdB
dHRyKSwgKGludHB0cl90KXNldEpTVGVzdEpTT05PYmpVbnNpZ25lZExvbmdMb25nQXR0ciBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKKyAgICB7ICJzdHJpbmdBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RKU09OT2Jq
U3RyaW5nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RKU09OT2JqU3RyaW5nQXR0ciBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKKyAgICB7ICJ0ZXN0T2JqQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0SlNPTk9ialRl
c3RPYmpBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdEpTT05PYmpUZXN0T2JqQXR0ciBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwgUmVhZE9ubHks
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
SlNPTk9iakNvbnN0cnVjdG9yKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCisg
ICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Cit9OworCisjdW5kZWYgVEhVTktf
R0VORVJBVE9SCitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0SlNP
Tk9ialRhYmxlID0geyAxNiwgMTUsIEpTVGVzdEpTT05PYmpUYWJsZVZhbHVlcywgMCB9OworLyog
SGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KKyNpZiBFTkFCTEUoSklUKQorI2RlZmluZSBU
SFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNkZWZpbmUgVEhV
TktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0SlNPTk9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbMV0gPQoreworICAgIHsg
MCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVS
QVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdEpTT05PYmpD
b25zdHJ1Y3RvclRhYmxlID0geyAxLCAwLCBKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3JUYWJsZVZh
bHVlcywgMCB9OworY2xhc3MgSlNUZXN0SlNPTk9iakNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworCisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOwor
ICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hh
c0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworfTsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEpTT05PYmpDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVz
dEpTT05PYmpDb25zdHJ1Y3RvciIsIDAsICZKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3JUYWJsZSwg
MCB9OworCitKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3I6OkpTVGVzdEpTT05PYmpDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAg
OiBET01Db25zdHJ1Y3Rvck9iamVjdChKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQor
eworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1Rlc3RK
U09OT2JqUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7Cit9CisKK2Jvb2wgSlNUZXN0SlNPTk9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpT
VGVzdEpTT05PYmpDb25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCAmSlNUZXN0SlNPTk9iakNv
bnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNU
ZXN0SlNPTk9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpT
VGVzdEpTT05PYmpDb25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCAmSlNUZXN0SlNPTk9iakNv
bnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKKy8q
IEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworI2lmIEVOQUJMRShKSVQpCisjZGVmaW5lIFRI
VU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCisjZWxzZQorI2RlZmluZSBUSFVO
S19HRU5FUkFUT1IoZ2VuZXJhdG9yKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RKU09OT2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbMV0gPQoreworICAgIHsgMCwg
MCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3VuZGVmIFRIVU5LX0dFTkVSQVRP
Ugorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdEpTT05PYmpQcm90
b3R5cGVUYWJsZSA9IHsgMSwgMCwgSlNUZXN0SlNPTk9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAw
IH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0SlNPTk9ialByb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdEpTT05PYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0SlNPTk9ialByb3RvdHlwZVRhYmxlLCAw
IH07CisKK0pTT2JqZWN0KiBKU1Rlc3RKU09OT2JqUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9N
UHJvdG90eXBlPEpTVGVzdEpTT05PYmo+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Cit9CisKK2NvbnN0
IENsYXNzSW5mbyBKU1Rlc3RKU09OT2JqOjpzX2luZm8gPSB7ICJUZXN0SlNPTk9iaiIsIDAsICZK
U1Rlc3RKU09OT2JqVGFibGUsIDAgfTsKKworSlNUZXN0SlNPTk9iajo6SlNUZXN0SlNPTk9iaihO
b25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0SlNPTk9iaj4gaW1wbCkKKyAgICA6IERPTU9i
amVjdFdpdGhHbG9iYWxQb2ludGVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9p
bXBsKGltcGwpCit7Cit9CisKK0pTVGVzdEpTT05PYmo6On5KU1Rlc3RKU09OT2JqKCkKK3sKKyAg
ICBmb3JnZXRET01PYmplY3QodGhpcywgaW1wbCgpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdEpT
T05PYmo6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNUZXN0SlNPTk9ialByb3Rv
dHlwZShnbG9iYWxPYmplY3QsIEpTVGVzdEpTT05PYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK2Jvb2wgSlNUZXN0SlNP
Tk9iajo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0
YXRpY1ZhbHVlU2xvdDxKU1Rlc3RKU09OT2JqLCBCYXNlPihleGVjLCAmSlNUZXN0SlNPTk9ialRh
YmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdEpTT05PYmo6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0SlNPTk9iaiwgQmFzZT4oZXhl
YywgJkpTVGVzdEpTT05PYmpUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RKU09OT2JqSW50QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdEpTT05PYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RKU09OT2JqKj4oYXNPYmplY3Qoc2xvdEJhc2Up
KTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IHN0YXRp
Y19jYXN0PFRlc3RKU09OT2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+aW50QXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitKU1ZhbHVlIGpzVGVzdEpTT05PYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RKU09O
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KGFzT2JqZWN0KHNs
b3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RKU09OT2JqKiBpbXAg
PSBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmxvbmdMb25nQXR0cigpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGpzVGVzdEpTT05PYmpVbnNpZ25lZExvbmdMb25n
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXIm
KQoreworICAgIEpTVGVzdEpTT05PYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RK
U09OT2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVGVzdEpTT05PYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RKU09OT2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcC0+dW5z
aWduZWRMb25nTG9uZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBq
c1Rlc3RKU09OT2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdEpTT05PYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RKU09OT2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RK
U09OT2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nKGV4ZWMsIGltcC0+c3RyaW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitK
U1ZhbHVlIGpzVGVzdEpTT05PYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
c2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdEpTT05PYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RKU09OT2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
KyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RKU09OT2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGlt
cC0+dGVzdE9iakF0dHIoKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUganNU
ZXN0SlNPTk9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwg
Y29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0SlNPTk9iaiogZG9tT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgcmV0dXJu
IEpTVGVzdEpTT05PYmo6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpOworfQordm9pZCBKU1Rlc3RKU09OT2JqOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBsb29rdXBQdXQ8SlNUZXN0SlNPTk9iaiwgQmFzZT4oZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgJkpTVGVzdEpTT05PYmpUYWJsZSwgdGhpcywgc2xvdCk7Cit9CisK
K3ZvaWQgc2V0SlNUZXN0SlNPTk9iakludEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RKU09OT2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RK
U09OT2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisgICAgaW1wLT5zZXRJbnRBdHRyKHZhbHVlLnRvSW50MzIoZXhlYykpOworfQorCit2b2lk
IHNldEpTVGVzdEpTT05PYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RKU09OT2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RK
U09OT2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisgICAgaW1wLT5zZXRMb25nTG9uZ0F0dHIoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2YWx1
ZS50b0ludGVnZXIoZXhlYykpKTsKK30KKwordm9pZCBzZXRKU1Rlc3RKU09OT2JqVW5zaWduZWRM
b25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RKU09OT2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0SlNPTk9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RKU09OT2JqKiBpbXAgPSBzdGF0
aWNfY2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wLT5zZXRV
bnNpZ25lZExvbmdMb25nQXR0cihzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHZhbHVl
LnRvSW50ZWdlcihleGVjKSkpOworfQorCit2b2lkIHNldEpTVGVzdEpTT05PYmpTdHJpbmdBdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgSlNUZXN0SlNPTk9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEpTT05P
YmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0SlNPTk9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVz
dEpTT05PYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcC0+c2V0U3RyaW5nQXR0cih1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKK30KKwordm9pZCBzZXRKU1Rl
c3RKU09OT2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RKU09OT2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RKU09OT2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAg
aW1wLT5zZXRUZXN0T2JqQXR0cih0b1Rlc3RPYmoodmFsdWUpKTsKK30KKworSlNWYWx1ZSBKU1Rl
c3RKU09OT2JqOjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEpT
T05PYmpDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RKU09OT2JqKiBvYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNUZXN0SlNPTk9iaj4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBvYmplY3QpOworfQorVGVzdEpTT05PYmoqIHRvVGVzdEpTT05PYmooSlND
OjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0SlNP
Tk9iajo6c19pbmZvKSA/IHN0YXRpY19jYXN0PEpTVGVzdEpTT05PYmoqPihhc09iamVjdCh2YWx1
ZSkpLT5pbXBsKCkgOiAwOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU09OT2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RKU09OT2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg2NTM2ZmVmZjIyZGM2MGI1OWVl
N2M4MjhjMGY4YzBiNzkzNTUyMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTT05PYmouaApAQCAtMCwwICsxLDkzIEBACisvKgorICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAg
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgSlNUZXN0SlNPTk9ial9oCisjZGVmaW5lIEpTVGVz
dEpTT05PYmpfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RXaXRoR2xvYmFs
T2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXN0SlNPTk9iajsKKworY2xhc3MgSlNUZXN0SlNPTk9i
aiA6IHB1YmxpYyBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlciB7CisgICAgdHlwZWRlZiBET01P
YmplY3RXaXRoR2xvYmFsUG9pbnRlciBCYXNlOworcHVibGljOgorICAgIEpTVGVzdEpTT05PYmoo
Tm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBKU0RPTUdsb2JhbE9iamVjdCosIFBh
c3NSZWZQdHI8VGVzdEpTT05PYmo+KTsKKyAgICB2aXJ0dWFsIH5KU1Rlc3RKU09OT2JqKCk7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNT
bG90Q291bnQpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgVGVzdEpTT05P
YmoqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAg
ICBSZWZQdHI8VGVzdEpTT05PYmo+IG1faW1wbDsKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RKU09OT2JqKik7CitUZXN0SlNP
Tk9iaiogdG9UZXN0SlNPTk9iaihKU0M6OkpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3RKU09OT2Jq
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKKyAgICB0
eXBlZGVmIEpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IEJhc2U7CitwdWJsaWM6CisgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IGNyZWF0ZVN0
cnVjdHVyZShKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOworICAgIH0KKyAgICBK
U1Rlc3RKU09OT2JqUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Tm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkgOiBKU0M6OkpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkgeyB9Citwcm90ZWN0
ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7Cit9OworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RK
U09OT2JqSW50QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdEpTT05PYmpJbnRBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SlNP
Tk9iakxvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlND
OjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdEpTT05PYmpMb25nTG9uZ0F0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RKU09OT2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RKU09OT2JqVW5z
aWduZWRMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RKU09OT2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpT
VGVzdEpTT05PYmpTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SlNPTk9ialRlc3RPYmpBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQg
c2V0SlNUZXN0SlNPTk9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SlNPTk9iakNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGUxNzJjZDU3ZTRmNjNkNDdlYWY0
NDhiYTQzNjBjZTA1YjMyNDZhZWEuLjVmMDYxODBjOTVjYWQ1NmRhMmRlZjY2ODgwNzYwZWE3MTgy
ZjBjMzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKKyNp
bmNsdWRlICJKU1Rlc3RKU09OT2JqLmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCiAjaW5jbHVk
ZSAiSlNsb2cuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNr
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiVGVzdEpT
T05PYmouaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmg+CkBAIC0xNzcsNyArMTc5LDcgQEAg
Ym9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRv
cikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXNbNDVdID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0Nl0gPQogewogICAgIHsgIkNPTlNUX1ZBTFVFXzAiLCBE
b250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkwIFRIVU5L
X0dFTkVSQVRPUigwKSB9LAogICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0T2JqQ09OU1RfVkFMVUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9
LApAQCAtMjIzLDExICsyMjUsMTIgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzQ1XSA9CiAgICAgeyAibWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tBcmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIiwg
RG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJvdmVybG9h
ZGVkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZCksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgIm1ldGhvZFdpdGhB
bGxvd0pTT04iLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxO
YXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQWxsb3dK
U09OKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAwLCAwLCAwLCAw
IFRIVU5LX0dFTkVSQVRPUigwKSB9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0
aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUg
PSB7IDEzNSwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGlj
IEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0g
eyAxMzYsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUi
LCAwLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9i
alByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC0xNDQ3LDYgKzE0NTAsNDIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoRXhlY1N0YXQKICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbGxvd0pTT04o
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIFJlZlB0cjxUZXN0SlNPTk9iaj4gdGVzdEpzb25PYmo7CisgICAgaWYg
KCFleGVjLT5hcmd1bWVudCgwKS5pc051bGwoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSAmJiBleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpICYmICFleGVjLT5hcmd1bWVu
dCgwKS5pbmhlcml0cygmSlNUZXN0SlNPTk9iajo6c19pbmZvKSkgeworICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCk7CisgICAgICAgIHRlc3RK
c29uT2JqID0gVGVzdEpTT05PYmo6OmNyZWF0ZSgpOworICAgICAgICBKU1ZhbHVlIGpzSW50QXR0
ciA9IG9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImludEF0dHIiKSk7CisgICAg
ICAgIGlmICghanNJbnRBdHRyLmlzTnVsbCgpICYmICFqc0ludEF0dHIuaXNVbmRlZmluZWQoKSkK
KyAgICAgICAgICAgIHRlc3RKc29uT2JqLT5zZXRJbnRBdHRyKGpzSW50QXR0ci50b0ludDMyKGV4
ZWMpKTsKKyAgICAgICAgSlNWYWx1ZSBqc0xvbmdMb25nQXR0ciA9IG9iamVjdC0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgImxvbmdMb25nQXR0ciIpKTsKKyAgICAgICAgaWYgKCFqc0xvbmdM
b25nQXR0ci5pc051bGwoKSAmJiAhanNMb25nTG9uZ0F0dHIuaXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgICAgIHRlc3RKc29uT2JqLT5zZXRMb25nTG9uZ0F0dHIoc3RhdGljX2Nhc3Q8bG9uZyBsb25n
Pihqc0xvbmdMb25nQXR0ci50b0ludGVnZXIoZXhlYykpKTsKKyAgICAgICAgSlNWYWx1ZSBqc1Vu
c2lnbmVkTG9uZ0xvbmdBdHRyID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAi
dW5zaWduZWRMb25nTG9uZ0F0dHIiKSk7CisgICAgICAgIGlmICghanNVbnNpZ25lZExvbmdMb25n
QXR0ci5pc051bGwoKSAmJiAhanNVbnNpZ25lZExvbmdMb25nQXR0ci5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICAgICAgdGVzdEpzb25PYmotPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oanNVbnNpZ25lZExvbmdMb25nQXR0ci50b0ludGVnZXIo
ZXhlYykpKTsKKyAgICAgICAgSlNWYWx1ZSBqc1N0cmluZ0F0dHIgPSBvYmplY3QtPmdldChleGVj
LCBJZGVudGlmaWVyKGV4ZWMsICJzdHJpbmdBdHRyIikpOworICAgICAgICBpZiAoIWpzU3RyaW5n
QXR0ci5pc051bGwoKSAmJiAhanNTdHJpbmdBdHRyLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAg
ICB0ZXN0SnNvbk9iai0+c2V0U3RyaW5nQXR0cih1c3RyaW5nVG9TdHJpbmcoanNTdHJpbmdBdHRy
LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIEpTVmFsdWUganNUZXN0T2JqQXR0ciA9IG9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInRlc3RPYmpBdHRyIikpOworICAgICAgICBp
ZiAoIWpzVGVzdE9iakF0dHIuaXNOdWxsKCkgJiYgIWpzVGVzdE9iakF0dHIuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgIHRlc3RKc29uT2JqLT5zZXRUZXN0T2JqQXR0cih0b1Rlc3RPYmooanNU
ZXN0T2JqQXR0cikpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RKc29uT2JqID0gYWRvcHRS
ZWYodG9UZXN0SlNPTk9iaihleGVjLT5hcmd1bWVudCgwKSkpOworICAgIH0KKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisKKyAgICBpbXAtPm1ldGhvZFdpdGhBbGxvd0pTT04odGVzdEpzb25PYmopOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIC8vIENvbnN0
YW50IGdldHRlcnMKIAogSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8wKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDk5M2RmOGNhOTMwMWVhZjdmNzc3NWNiZjM5
ZGIzMTEzYzQ5NzNhZDMuLjY4YWM2MWU4YmI3YjQyZmU1NTlkMDNiMGExMjNlYTE2MmM2OGRiZmUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC0x
MTksNiArMTE5LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXIKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Q2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZChKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFsbG93SlNPTihKU0M6OkV4ZWNT
dGF0ZSopOwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlJ
bnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdEpTT05PYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dEpTT05PYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWRlODk3MjI4MDU3OWE0MmE0MmE0NDZlN2VmZjliMjU1
OTAwNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0SlNPTk9iai5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53
ZWluaWdAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgor
CisjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNU
CisKK0BjbGFzcyBET01UZXN0T2JqOworQGNsYXNzIE5TU3RyaW5nOworCitAaW50ZXJmYWNlIERP
TVRlc3RKU09OT2JqIDogRE9NT2JqZWN0CistIChpbnQpaW50QXR0cjsKKy0gKHZvaWQpc2V0SW50
QXR0cjooaW50KW5ld0ludEF0dHI7CistIChsb25nIGxvbmcpbG9uZ0xvbmdBdHRyOworLSAodm9p
ZClzZXRMb25nTG9uZ0F0dHI6KGxvbmcgbG9uZyluZXdMb25nTG9uZ0F0dHI7CistICh1bnNpZ25l
ZCBsb25nIGxvbmcpdW5zaWduZWRMb25nTG9uZ0F0dHI7CistICh2b2lkKXNldFVuc2lnbmVkTG9u
Z0xvbmdBdHRyOih1bnNpZ25lZCBsb25nIGxvbmcpbmV3VW5zaWduZWRMb25nTG9uZ0F0dHI7Cist
IChOU1N0cmluZyAqKXN0cmluZ0F0dHI7CistICh2b2lkKXNldFN0cmluZ0F0dHI6KE5TU3RyaW5n
ICopbmV3U3RyaW5nQXR0cjsKKy0gKERPTVRlc3RPYmogKil0ZXN0T2JqQXR0cjsKKy0gKHZvaWQp
c2V0VGVzdE9iakF0dHI6KERPTVRlc3RPYmogKiluZXdUZXN0T2JqQXR0cjsKK0BlbmQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RKU09OT2JqLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
SlNPTk9iai5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWZiMjRmZjhkNjA0ZTkwZDFhN2MxMjkwNzEzMTcyNjE0
OWNjYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0SlNPTk9iai5tbQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiRE9NVGVzdEpTT05PYmouaCIKKworI2ltcG9ydCAiRE9NQmxvYkludGVybmFs
LmgiCisjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1ZhbHVl
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU5v
ZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCisjaW1wb3J0
ICJET01UZXN0SlNPTk9iakludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0T2JqSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRF
eGVjU3RhdGUuaCIKKyNpbXBvcnQgIktVUkwuaCIKKyNpbXBvcnQgIlRlc3RKU09OT2JqLmgiCisj
aW1wb3J0ICJUZXN0T2JqLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAiV2Vi
Q29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
Q29yZTo6VGVzdEpTT05PYmoqPihfaW50ZXJuYWwpCisKK0BpbXBsZW1lbnRhdGlvbiBET01UZXN0
SlNPTk9iagorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVs
ZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RKU09OT2JqIGNsYXNzXSwgc2VsZikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVm
KCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAg
aWYgKF9pbnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIgZmluYWxp
emVdOworfQorCistIChpbnQpaW50QXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+aW50QXR0cigpOworfQorCistICh2b2lk
KXNldEludEF0dHI6KGludCluZXdJbnRBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNldEludEF0dHIobmV3SW50QXR0cik7Cit9CisK
Ky0gKGxvbmcgbG9uZylsb25nTG9uZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPmxvbmdMb25nQXR0cigpOworfQorCist
ICh2b2lkKXNldExvbmdMb25nQXR0cjoobG9uZyBsb25nKW5ld0xvbmdMb25nQXR0cgoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRMb25n
TG9uZ0F0dHIobmV3TG9uZ0xvbmdBdHRyKTsKK30KKworLSAodW5zaWduZWQgbG9uZyBsb25nKXVu
c2lnbmVkTG9uZ0xvbmdBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIHJldHVybiBJTVBMLT51bnNpZ25lZExvbmdMb25nQXR0cigpOworfQorCist
ICh2b2lkKXNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyOih1bnNpZ25lZCBsb25nIGxvbmcpbmV3VW5z
aWduZWRMb25nTG9uZ0F0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgSU1QTC0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIobmV3VW5zaWduZWRMb25n
TG9uZ0F0dHIpOworfQorCistIChOU1N0cmluZyAqKXN0cmluZ0F0dHIKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPnN0cmluZ0F0
dHIoKTsKK30KKworLSAodm9pZClzZXRTdHJpbmdBdHRyOihOU1N0cmluZyAqKW5ld1N0cmluZ0F0
dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1Q
TC0+c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdBdHRyKTsKK30KKworLSAoRE9NVGVzdE9iaiAqKXRl
c3RPYmpBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1QTC0+dGVzdE9iakF0dHIoKSkpOworfQorCist
ICh2b2lkKXNldFRlc3RPYmpBdHRyOihET01UZXN0T2JqICopbmV3VGVzdE9iakF0dHIKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgQVNTRVJUKG5ld1Rl
c3RPYmpBdHRyKTsKKworICAgIElNUEwtPnNldFRlc3RPYmpBdHRyKGNvcmUobmV3VGVzdE9iakF0
dHIpKTsKK30KKworQGVuZAorCitXZWJDb3JlOjpUZXN0SlNPTk9iaiogY29yZShET01UZXN0SlNP
Tk9iaiAqd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlciA/IHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViQ29yZTo6VGVzdEpTT05PYmoqPih3cmFwcGVyLT5faW50ZXJuYWwpIDogMDsKK30KKworRE9N
VGVzdEpTT05PYmogKmtpdChXZWJDb3JlOjpUZXN0SlNPTk9iaiogdmFsdWUpCit7CisgICAgeyBE
T01fQVNTRVJUX01BSU5fVEhSRUFEKCk7IFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5k
T25lKCk7IH07CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAo
RE9NVGVzdEpTT05PYmogKndyYXBwZXIgPSBnZXRET01XcmFwcGVyKHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIFtbd3JhcHBlciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICBET01UZXN0SlNPTk9i
aiAqd3JhcHBlciA9IFtbRE9NVGVzdEpTT05PYmogYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVy
LT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUp
OworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsK
KyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNPTk9iakludGVybmFsLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RKU09OT2JqSW50ZXJuYWwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kN2VkNDE0OTUzMjExNDBhMWQ0ZTIzNGFlYTUxODI4ZDlkODI5NzVjCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0SlNPTk9iakludGVybmFsLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NVGVzdEpTT05PYmouaD4KKworI2lmIFdFQktJ
VF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgY2xhc3MgVGVzdEpTT05PYmo7Cit9CisKK1dlYkNvcmU6OlRlc3RK
U09OT2JqKiBjb3JlKERPTVRlc3RKU09OT2JqICopOworRE9NVGVzdEpTT05PYmogKmtpdChXZWJD
b3JlOjpUZXN0SlNPTk9iaiopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RKU09OT2JqLmlkbCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RKU09OT2JqLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTNhN2M2MzQ3NWM5NmUwYTUxMDI3
MjcxYmUyYjk1Y2UzMjY1NWE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdEpTT05PYmouaWRsCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zdHJBcmcsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gVGhpcyBJREwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0
b3Igd2l0aCBhbiBpbnRlcmZhY2UKKy8vIHRoYXQgaGFzIHRoZSAiQWxsb3dKU09OIiBhdHRyaWJ1
dGUgYW5kIGZvciB0cmFja2luZyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KK21vZHVsZSB0ZXN0IHsK
KyAgICBpbnRlcmZhY2UgVGVzdEpTT05PYmogeworICAgICAgICAvLyBBdHRyaWJ1dGVzCisgICAg
ICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgICAgaW50QXR0cjsKKyAgICAgICAg
YXR0cmlidXRlIGxvbmcgbG9uZyAgICAgICAgICAgICAgICBsb25nTG9uZ0F0dHI7CisgICAgICAg
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgICAgICAgdW5zaWduZWRMb25nTG9uZ0F0dHI7
CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgICAgICAgICAgc3RyaW5nQXR0cjsK
KyAgICAgICAgYXR0cmlidXRlIFRlc3RPYmogICAgICAgICAgICAgICAgICB0ZXN0T2JqQXR0cjsK
KyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE9iai5pZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRl
eCBmOGZlNzgyN2Y5NDA5MmIxZmZiOWI0ZTYwOWUxOTQ0NzkwMzU2MGNiLi41NTVkN2Q3MjBmMmNi
ZDNkODIwMWMyMGE2NTA4OTI3NGQwZTk1MzUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0T2JqLmlkbApAQCAtMTM4LDYgKzEzOCwxMSBAQCBtb2R1bGUgdGVzdCB7CiAgICAg
ICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChpbiBbQ2FsbGJhY2tdIFRlc3RDYWxsYmFjayBj
YWxsYmFjayk7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoVEVTVElOR19WOCkgfHwgZGVmaW5lZChU
RVNUSU5HX0pTKQorICAgICAgICAvLyBBbGxvd0pTT04KKyAgICAgICAgdm9pZCAgICBtZXRob2RX
aXRoQWxsb3dKU09OKGluIFtBbGxvd0pTT05dIFRlc3RKU09OT2JqIHRlc3RKc29uT2JqKTsKKyNl
bmRpZgorCiAgICAgICAgIC8vIE9iamVjdGl2ZUMgcmVzZXJ2ZWQgd29yZHMuCiAgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBsb25nICAgICAgZGVzY3JpcHRpb247CiAgICAgICAgIGF0dHJpYnV0
ZSBsb25nICAgICAgICAgICAgICAgaWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RKU09OT2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEpTT05PYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYzcwZmFiOGExOGM5ZTAz
M2I4MDA0N2MyNTQ3MTMzN2Q4NTZmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RKU09OT2JqLmNwcApAQCAtMCwwICsxLDIwNiBAQAor
LyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFRl
c3RKU09OT2JqLmgiCisKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCisjaW5jbHVk
ZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRl
ICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJW
OFRlc3RPYmouaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworV3JhcHBlclR5cGVJbmZvIFY4VGVzdEpTT05PYmo6OmluZm8gPSB7IFY4VGVzdEpTT05PYmo6
OkdldFRlbXBsYXRlLCBWOFRlc3RKU09OT2JqOjpkZXJlZk9iamVjdCwgMCB9OworCituYW1lc3Bh
Y2UgVGVzdEpTT05PYmpJbnRlcm5hbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4
X1VTRShUKSB7IH0KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRBdHRyQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0SlNPTk9iai5pbnRBdHRyLl9nZXQiKTsK
KyAgICBUZXN0SlNPTk9iaiogaW1wID0gVjhUZXN0SlNPTk9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CisgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5pbnRBdHRyKCkpOworfQor
CitzdGF0aWMgdm9pZCBpbnRBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdEpTT05PYmouaW50QXR0ci5fc2V0Iik7Cisg
ICAgVGVzdEpTT05PYmoqIGltcCA9IFY4VGVzdEpTT05PYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOworICAgIGludCB2ID0gdG9JbnQzMih2YWx1ZSk7CisgICAgaW1wLT5zZXRJbnRBdHRyKHYp
OworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBsb25nTG9u
Z0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RKU09OT2JqLmxvbmdM
b25nQXR0ci5fZ2V0Iik7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IFY4VGVzdEpTT05PYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihpbXAtPmxvbmdMb25nQXR0cigpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGxv
bmdMb25nQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RKU09OT2JqLmxvbmdMb25nQXR0ci5fc2V0Iik7CisgICAgVGVz
dEpTT05PYmoqIGltcCA9IFY4VGVzdEpTT05PYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwor
ICAgIGxvbmcgbG9uZyB2ID0gdG9JbnQ2NCh2YWx1ZSk7CisgICAgaW1wLT5zZXRMb25nTG9uZ0F0
dHIoV1RGOjpnZXRQdHIodikpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdEpTT05PYmoudW5zaWduZWRMb25nTG9uZ0F0dHIuX2dldCIpOworICAgIFRl
c3RKU09OT2JqKiBpbXAgPSBWOFRlc3RKU09OT2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KyAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oaW1wLT51bnNp
Z25lZExvbmdMb25nQXR0cigpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVuc2lnbmVkTG9uZ0xvbmdB
dHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdEpTT05PYmoudW5zaWduZWRMb25nTG9uZ0F0dHIuX3NldCIpOworICAgIFRl
c3RKU09OT2JqKiBpbXAgPSBWOFRlc3RKU09OT2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdiA9IHRvSW50NjQodmFsdWUpOworICAgIGltcC0+c2V0
VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGOjpnZXRQdHIodikpOworICAgIHJldHVybjsKK30KKwor
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0SlNPTk9iai5zdHJpbmdBdHRyLl9nZXQiKTsKKyAgICBUZXN0
SlNPTk9iaiogaW1wID0gVjhUZXN0SlNPTk9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Cisg
ICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+c3RyaW5nQXR0cigpKTsKK30KKworc3RhdGljIHZvaWQg
c3RyaW5nQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RKU09OT2JqLnN0cmluZ0F0dHIuX3NldCIpOworICAgIFRlc3RK
U09OT2JqKiBpbXAgPSBWOFRlc3RKU09OT2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAg
ICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLX1ZPSUQoVjhQYXJhbWV0ZXI8
PiwgdiwgdmFsdWUpOworICAgIGltcC0+c2V0U3RyaW5nQXR0cih2KTsKKyAgICByZXR1cm47Cit9
CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGVzdE9iakF0dHJBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQor
eworICAgIElOQ19TVEFUUygiRE9NLlRlc3RKU09OT2JqLnRlc3RPYmpBdHRyLl9nZXQiKTsKKyAg
ICBUZXN0SlNPTk9iaiogaW1wID0gVjhUZXN0SlNPTk9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT50ZXN0T2JqQXR0cigpKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdE9iakF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0SlNPTk9iai50ZXN0T2JqQXR0ci5fc2V0Iik7CisgICAg
VGVzdEpTT05PYmoqIGltcCA9IFY4VGVzdEpTT05PYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OworICAgIFRlc3RPYmoqIHYgPSBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKHZhbHVlKSA/IFY4VGVz
dE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpIDogMDsK
KyAgICBpbXAtPnNldFRlc3RPYmpBdHRyKFdURjo6Z2V0UHRyKHYpKTsKKyAgICByZXR1cm47Cit9
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RKU09OT2JqSW50ZXJuYWwKKworc3RhdGljIGNvbnN0IEJh
dGNoZWRBdHRyaWJ1dGUgVGVzdEpTT05PYmpBdHRyc1tdID0geworICAgIC8vIEF0dHJpYnV0ZSAn
aW50QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsiaW50QXR0ciIs
IFRlc3RKU09OT2JqSW50ZXJuYWw6OmludEF0dHJBdHRyR2V0dGVyLCBUZXN0SlNPTk9iakludGVy
bmFsOjppbnRBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRl
ICdsb25nTG9uZ0F0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7Imxv
bmdMb25nQXR0ciIsIFRlc3RKU09OT2JqSW50ZXJuYWw6OmxvbmdMb25nQXR0ckF0dHJHZXR0ZXIs
IFRlc3RKU09OT2JqSW50ZXJuYWw6OmxvbmdMb25nQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0
YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGlj
X2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2Ug
Ki99LAorICAgIC8vIEF0dHJpYnV0ZSAndW5zaWduZWRMb25nTG9uZ0F0dHInIChUeXBlOiAnYXR0
cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7InVuc2lnbmVkTG9uZ0xvbmdBdHRyIiwgVGVzdEpT
T05PYmpJbnRlcm5hbDo6dW5zaWduZWRMb25nTG9uZ0F0dHJBdHRyR2V0dGVyLCBUZXN0SlNPTk9i
akludGVybmFsOjp1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAq
Lywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nh
c3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99
LAorICAgIC8vIEF0dHJpYnV0ZSAnc3RyaW5nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0
dHI6ICcnKQorICAgIHsic3RyaW5nQXR0ciIsIFRlc3RKU09OT2JqSW50ZXJuYWw6OnN0cmluZ0F0
dHJBdHRyR2V0dGVyLCBUZXN0SlNPTk9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0clNldHRlciwg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd0ZXN0T2JqQXR0cicgKFR5cGU6ICdh
dHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsidGVzdE9iakF0dHIiLCBUZXN0SlNPTk9iaklu
dGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIsIFRlc3RKU09OT2JqSW50ZXJuYWw6OnRlc3RP
YmpBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNz
Q29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+
KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCit9Oworc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RKU09OT2JqVGVtcGxhdGUo
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCit7CisgICAgdjg6Okxv
Y2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShk
ZXNjLCAiVGVzdEpTT05PYmoiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4o
KSwgVjhUZXN0SlNPTk9iajo6aW50ZXJuYWxGaWVsZENvdW50LAorICAgICAgICBUZXN0SlNPTk9i
akF0dHJzLCBzaXplb2YoVGVzdEpTT05PYmpBdHRycykgLyBzaXplb2YoKlRlc3RKU09OT2JqQXR0
cnMpLAorICAgICAgICAwLCAwKTsKKyAgICAKKworICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1w
bGF0ZQorICAgIGRlc2MtPlNldChnZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdUZW1wbGF0
ZSgpKTsKKyAgICByZXR1cm4gZGVzYzsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdEpTT05PYmo6OkdldFJhd1RlbXBsYXRlKCkKK3sKKyAgICBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEpTT05PYmpSYXdDYWNo
ZSA9IGNyZWF0ZVJhd1RlbXBsYXRlKCk7CisgICAgcmV0dXJuIFY4VGVzdEpTT05PYmpSYXdDYWNo
ZTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEpTT05P
Ymo6OkdldFRlbXBsYXRlKCkKK3sKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IFY4VGVzdEpTT05PYmpDYWNoZSA9IENvbmZpZ3VyZVY4VGVzdEpTT05PYmpU
ZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKKyAgICByZXR1cm4gVjhUZXN0SlNPTk9iakNhY2hl
OworfQorCitUZXN0SlNPTk9iaiogVjhUZXN0SlNPTk9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGVzdEpT
T05PYmoqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJP
YmplY3RJbmRleCkpOworfQorCitib29sIFY4VGVzdEpTT05PYmo6Okhhc0luc3RhbmNlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+
SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0
SlNPTk9iajo6d3JhcChUZXN0SlNPTk9iaiogaW1wbCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXI7CisgICAgVjhQcm94eSogcHJveHkgPSAwOworICAgICAgICB3cmFwcGVy
ID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgd3JhcHBlciA9IFY4RE9N
V3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChwcm94eSwgJmluZm8sIGltcGwpOworICAgIGlm
ICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICBpbXBs
LT5yZWYoKTsKKyAgICBnZXRET01PYmplY3RNYXAoKS5zZXQoaW1wbCwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8VGVzdEpTT05PYmogPiBpbXBsKQor
eworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChUZXN0SlNPTk9iaiogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOworICAgIHJldHVybiBWOFRlc3RKU09OT2JqOjp3cmFwKGltcGwpOwor
fQorCit2b2lkIFY4VGVzdEpTT05PYmo6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAg
ICBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+KG9iamVjdCktPmRlcmVmKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEpTT05PYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEpTT05PYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTk2ZmFlNjNkMWM5OTRiNTc5NzNmMzFiNTRm
NGU3N2IxMWU2ZWViCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0SlNPTk9iai5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisqLworCisjaWZuZGVmIFY4VGVzdEpTT05PYmpfaAorI2RlZmluZSBWOFRlc3RKU09OT2JqX2gK
KworI2luY2x1ZGUgIlRlc3RKU09OT2JqLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgi
CisjaW5jbHVkZSAid3RmL3RleHQvU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWOFRl
c3RKU09OT2JqIHsKKworcHVibGljOgorICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOworICAgIHN0YXRpYyB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgVGVz
dEpTT05PYmoqIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEpTT05PYmoqKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXJlZk9iamVjdCh2b2lkKik7CisgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBl
ckludGVybmFsRmllbGRDb3VudCArIDA7Cit9OworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChUZXN0SlNPTk9iaiopOwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjxU
ZXN0SlNPTk9iaiA+KTsKK30KKworI2VuZGlmIC8vIFY4VGVzdEpTT05PYmpfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggYjRhY2Y3NGU5
YmFkMTgwM2E3OTM5MWEyMzNjZDZhYmQ0ZmU5YTYyZi4uZmNjNjYxZDRmODhiY2U2ZTZhMTY0NjZj
MDJkOWQ2MWNlOWMwYmU5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlRlc3RKU09OT2JqLmgiCiAjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAi
VjhCaW5kaW5nU3RhdGUuaCIKQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlICJWOElzb2xhdGVk
Q29udGV4dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFRlc3RDYWxsYmFj
ay5oIgorI2luY2x1ZGUgIlY4VGVzdEpTT05PYmouaCIKICNpbmNsdWRlICJWOGxvZy5oIgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMTAw
Myw2ICsxMDA1LDQ3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1l
dGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bWV0aG9kV2l0aEFsbG93SlNPTkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7
CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RXaXRoQWxsb3dKU09OIik7CisgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBS
ZWZQdHI8VGVzdEpTT05PYmo+IHRlc3RKc29uT2JqOworICAgIGlmICghaXNVbmRlZmluZWRPck51
bGwoYXJnc1swXSkgJiYgYXJnc1swXS0+SXNPYmplY3QoKSAmJiAhVjhUZXN0SlNPTk9iajo6SGFz
SW5zdGFuY2UoYXJnc1swXSkpIHsKKyAgICAgICAgRVhDRVBUSU9OX0JMT0NLKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4sIG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBd
KSk7CisgICAgICAgIHRlc3RKc29uT2JqID0gVGVzdEpTT05PYmo6OmNyZWF0ZSgpOworICAgICAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OEludEF0dHIgPSBvYmplY3QtPkdldCh2ODo6U3RyaW5n
OjpOZXcoImludEF0dHIiKSk7CisgICAgICAgIGlmICghdjhJbnRBdHRyLklzRW1wdHkoKSAmJiAh
aXNVbmRlZmluZWRPck51bGwodjhJbnRBdHRyKSkgeworICAgICAgICAgICAgRVhDRVBUSU9OX0JM
T0NLKGludCwgaW50QXR0ciwgdG9JbnQzMih2OEludEF0dHIpKTsKKyAgICAgICAgICAgIHRlc3RK
c29uT2JqLT5zZXRJbnRBdHRyKGludEF0dHIpOworICAgICAgICB9CisgICAgICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHY4TG9uZ0xvbmdBdHRyID0gb2JqZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3
KCJsb25nTG9uZ0F0dHIiKSk7CisgICAgICAgIGlmICghdjhMb25nTG9uZ0F0dHIuSXNFbXB0eSgp
ICYmICFpc1VuZGVmaW5lZE9yTnVsbCh2OExvbmdMb25nQXR0cikpIHsKKyAgICAgICAgICAgIEVY
Q0VQVElPTl9CTE9DSyhsb25nIGxvbmcsIGxvbmdMb25nQXR0ciwgdG9JbnQ2NCh2OExvbmdMb25n
QXR0cikpOworICAgICAgICAgICAgdGVzdEpzb25PYmotPnNldExvbmdMb25nQXR0cihsb25nTG9u
Z0F0dHIpOworICAgICAgICB9CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VW5zaWdu
ZWRMb25nTG9uZ0F0dHIgPSBvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoInVuc2lnbmVkTG9u
Z0xvbmdBdHRyIikpOworICAgICAgICBpZiAoIXY4VW5zaWduZWRMb25nTG9uZ0F0dHIuSXNFbXB0
eSgpICYmICFpc1VuZGVmaW5lZE9yTnVsbCh2OFVuc2lnbmVkTG9uZ0xvbmdBdHRyKSkgeworICAg
ICAgICAgICAgRVhDRVBUSU9OX0JMT0NLKHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWRMb25n
TG9uZ0F0dHIsIHRvSW50NjQodjhVbnNpZ25lZExvbmdMb25nQXR0cikpOworICAgICAgICAgICAg
dGVzdEpzb25PYmotPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKHVuc2lnbmVkTG9uZ0xvbmdBdHRy
KTsKKyAgICAgICAgfQorICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFN0cmluZ0F0dHIg
PSBvYmplY3QtPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0cmluZ0F0dHIiKSk7CisgICAgICAgIGlm
ICghdjhTdHJpbmdBdHRyLklzRW1wdHkoKSAmJiAhaXNVbmRlZmluZWRPck51bGwodjhTdHJpbmdB
dHRyKSkgeworICAgICAgICAgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9D
SyhWOFBhcmFtZXRlcjw+LCBzdHJpbmdBdHRyLCB2OFN0cmluZ0F0dHIpOworICAgICAgICAgICAg
dGVzdEpzb25PYmotPnNldFN0cmluZ0F0dHIoc3RyaW5nQXR0cik7CisgICAgICAgIH0KKyAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhUZXN0T2JqQXR0ciA9IG9iamVjdC0+R2V0KHY4OjpT
dHJpbmc6Ok5ldygidGVzdE9iakF0dHIiKSk7CisgICAgICAgIGlmICghdjhUZXN0T2JqQXR0ci5J
c0VtcHR5KCkgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKHY4VGVzdE9iakF0dHIpKSB7CisgICAgICAg
ICAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIHRlc3RPYmpBdHRyLCBWOFRlc3RPYmo6Okhh
c0luc3RhbmNlKHY4VGVzdE9iakF0dHIpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KHY4VGVzdE9iakF0dHIpKSA6IDApOworICAgICAgICAgICAgdGVz
dEpzb25PYmotPnNldFRlc3RPYmpBdHRyKHRlc3RPYmpBdHRyKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgRVhDRVBUSU9OX0JMT0NLKFRlc3RKU09OT2JqKiwgdG1wX3Rlc3RKc29u
T2JqLCBWOFRlc3RKU09OT2JqOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4VGVzdEpTT05PYmo6
OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMCk7Cisg
ICAgICAgdGVzdEpzb25PYmogPSBhZG9wdFJlZih0bXBfdGVzdEpzb25PYmopOworICAgIH0KKyAg
ICBpbXAtPm1ldGhvZFdpdGhBbGxvd0pTT04odGVzdEpzb25PYmopOworICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdE9iakludGVybmFs
CiAKIHN0YXRpYyBjb25zdCBCYXRjaGVkQXR0cmlidXRlIFRlc3RPYmpBdHRyc1tdID0gewpAQCAt
MTE3Niw2ICsxMjE5LDEyIEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gQ29uZmlndXJlVjhUZXN0T2JqVGVtcGxhdGUodjg6OlBlcnNpCiAgICAgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkFyZ3ZbY3VzdG9t
QXJnc0FuZEV4Y2VwdGlvbkFyZ2NdID0geyBWOGxvZzo6R2V0UmF3VGVtcGxhdGUoKSB9OwogICAg
IHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gY3VzdG9tQXJnc0FuZEV4Y2VwdGlvblNpZ25hdHVy
ZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBjdXN0b21BcmdzQW5kRXhjZXB0aW9uQXJnYywg
Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkFyZ3YpOwogICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6
TmV3KCJjdXN0b21BcmdzQW5kRXhjZXB0aW9uIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXco
VGVzdE9iakludGVybmFsOjpjdXN0b21BcmdzQW5kRXhjZXB0aW9uQ2FsbGJhY2ssIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpLCBjdXN0b21BcmdzQW5kRXhjZXB0aW9uU2lnbmF0dXJlKSk7CisKKyAg
ICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRob2RXaXRoQWxsb3dKU09OJworICAgIGNvbnN0IGlu
dCBtZXRob2RXaXRoQWxsb3dKU09OQXJnYyA9IDE7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gbWV0aG9kV2l0aEFsbG93SlNPTkFyZ3ZbbWV0aG9kV2l0aEFsbG93SlNPTkFy
Z2NdID0geyBWOFRlc3RKU09OT2JqOjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6OkhhbmRs
ZTx2ODo6U2lnbmF0dXJlPiBtZXRob2RXaXRoQWxsb3dKU09OU2lnbmF0dXJlID0gdjg6OlNpZ25h
dHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhBbGxvd0pTT05BcmdjLCBtZXRob2RXaXRoQWxsb3dK
U09OQXJndik7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFdpdGhBbGxv
d0pTT04iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhv
ZFdpdGhBbGxvd0pTT05DYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG1ldGhvZFdp
dGhBbGxvd0pTT05TaWduYXR1cmUpKTsKICAgICBiYXRjaENvbmZpZ3VyZUNvbnN0YW50cyhkZXNj
LCBwcm90bywgVGVzdE9iakNvbnN0cywgc2l6ZW9mKFRlc3RPYmpDb25zdHMpIC8gc2l6ZW9mKCpU
ZXN0T2JqQ29uc3RzKSk7CiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZmlsZWFwaS9EaXJlY3RvcnlFbnRyeS5pZGwgYi9XZWJDb3JlL2ZpbGVh
cGkvRGlyZWN0b3J5RW50cnkuaWRsCmluZGV4IGFjMzBjN2Y4ODMzN2ViM2Q4NjJjNTVmODQ2ZDky
N2YwMGQ1ZmFhMjQuLjMwOWEwNWMyM2QzMWNkODM5OTQ0ZTRmMGU0NGVkNzQ2MTcwYjQzY2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9EaXJlY3RvcnlFbnRyeS5pZGwKKysrIGIvV2ViQ29y
ZS9maWxlYXBpL0RpcmVjdG9yeUVudHJ5LmlkbApAQCAtMzUsNyArMzUsOSBAQCBtb2R1bGUgc3Rv
cmFnZSB7CiAgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gRGlyZWN0b3J5RW50cnkgOiBFbnRy
eSB7CiAgICAgICAgIERpcmVjdG9yeVJlYWRlciBjcmVhdGVSZWFkZXIoKTsKLSAgICAgICAgdm9p
ZCBnZXRGaWxlKGluIERPTVN0cmluZyBwYXRoLCBpbiBbT3B0aW9uYWxdIEZsYWdzIG9wdGlvbnMs
IGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBp
biBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwotICAg
ICAgICB2b2lkIGdldERpcmVjdG9yeShpbiBET01TdHJpbmcgcGF0aCwgaW4gW09wdGlvbmFsXSBG
bGFncyBvcHRpb25zLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjaywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNh
bGxiYWNrKTsKKworICAgICAgICAvLyBGSVhNRTogQ2hlY2sgd2l0aCB0aGUgc3BlYyB0byBzZWUg
aWYgd2UgY2FuIGF2b2lkIEFsbG93SlNPTiBoZXJlLgorICAgICAgICB2b2lkIGdldEZpbGUoaW4g
RE9NU3RyaW5nIHBhdGgsIGluIFtPcHRpb25hbCwgQWxsb3dKU09OXSBGbGFncyBmbGFncywgaW4g
W09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtP
cHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CisgICAgICAg
IHZvaWQgZ2V0RGlyZWN0b3J5KGluIERPTVN0cmluZyBwYXRoLCBpbiBbT3B0aW9uYWwsIEFsbG93
SlNPTl0gRmxhZ3MgZmxhZ3MsIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVy
cm9yQ2FsbGJhY2spOwogICAgIH07CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67223</attachid>
            <date>2010-09-10 12:38:50 -0700</date>
            <delta_ts>2010-11-03 15:34:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45237-20100910123849.patch</filename>
            <type>text/plain</type>
            <size>88390</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjZkMjUxZTU0MTk2ZThhNDRmZTNiMzZmNTU0MWM4Y2VkODZmMzQ2Yi4uNDVmOGNmMDY5NzUzYTNl
MWM3YjI1ZDRlYTY1YzhlZGI4NDhkY2U0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wOS0wNCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEpTT04gcGFyYW1ldGVyIHN1cHBvcnQgdG8g
SlMvVjggYmluZGluZyBnZW5lcmF0b3Igc2NyaXB0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjM3CisKKyAgICAgICAgQWRkaW5nIGEgbmV3IGV4
dGVuZGVkIGF0dHJpYnV0ZSAiQWxsb3dKU09OIiB0byBzdXBwb3J0IHBhc3NpbmcgcGFyYW1ldGVy
cyBpbiBKU09OIGZvcm1hdC4KKworICAgICAgICBBZGRlZCBhIG5ldyB0ZXN0IG1ldGhvZCBtZXRo
b2RXaXRoQWxsb3dKU09OIGluIFRlc3RPYmouaWRsLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG06CisgICAgICAgICogZmlsZWFwaS9EaXJlY3RvcnlFbnRyeS5pZGw6CisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFsbG93SlNP
Tik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SlNPTk9i
ai5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdEpTT05PYmouaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEpTT05PYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNPTk9iai5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNPTk9i
alByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEpTT05PYmouY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNPTk9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0SlNPTk9iai5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNPTk9iai5tbTogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEpTT05PYmpJbnRlcm5hbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEpTT05PYmouaWRsOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SlNPTk9iai5jcHA6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RKU09OT2JqLmg6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQWxsb3dKU09OQ2Fs
bGJhY2spOgorCiAyMDEwLTA5LTA5ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEdW1pdHJ1IERhbmlsaXVjLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMWExMTRhNDI5N2UxNDkyOTMz
YmFiMjgzZTM2NGY1Y2ExNDc5MmJjZi4uYWIwMTEwMjg3NTE4YmMzNTg0Yjg3OTVmMGE3OTcwYmFh
NGM5MjA1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CkBAIC0yMjcsNiArMjI3LDIwIEBAIHN1YiBHZXRDYWxsYmFja0NsYXNzTmFtZQogICAgIHJldHVy
biAiSlMkY2xhc3NOYW1lIjsKIH0KIAorIyBSZXR1cm5zIHNpZ25hdHVyZXMgb2YgcmVhZC13cml0
ZSBhdHRyaWJ1dGVzIGZvciBhIGdpdmVuIG9iamVjdC4KKyMgVGhpcyBzdWJyb3V0aW5lIGlzIGNh
bGxlZCBmb3IgcGFyYW1ldGVycyB0aGF0IGFyZSBhbm5vdGF0ZWQgd2l0aCAiQWxsb3dKU09OIi4K
K3N1YiBHZXRBdHRyaWJ1dGVzRm9ySlNPTk9iamVjdAoreworICAgIG15ICR0eXBlID0gc2hpZnQ7
CisKKyAgICBteSAkcGFyc2VkID0gJGNvZGVHZW5lcmF0b3ItPlBhcnNlSW50ZXJmYWNlKCR0eXBl
KTsKKyAgICBteSBAYXR0cmlidXRlc0FycmF5ID0gKCk7CisgICAgZm9yZWFjaCBteSAkYXR0cmli
dXRlIChAeyRwYXJzZWQtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIHB1c2goQGF0dHJpYnV0ZXNB
cnJheSwgJGF0dHJpYnV0ZSkgaWYgKCRhdHRyaWJ1dGUtPnR5cGUgIX4gL15yZWFkb25seS8pOwor
ICAgIH0KKyAgICByZXR1cm4gQGF0dHJpYnV0ZXNBcnJheTsKK30KKwogc3ViIEF2b2lkSW5jbHVz
aW9uT2ZUeXBlCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKQEAgLTE5NjgsMTEgKzE5ODIsMTIg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCIgLiAkcGFyYW1ldGVyLT50eXBl
IC4gIj4gJG5hbWUgPSAke2NhbGxiYWNrQ2xhc3NOYW1lfTo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMt
PmFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkYXJnVmFsdWUgPSAiZXhl
Yy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15
ICRhcmdUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJhbWV0ZXItPnR5cGUp
OworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGb3IgZnVuY3Rpb25zIHdpdGggIlN0
cmljdFR5cGVDaGVja2luZyIsIGlmIGFuIGlucHV0IHBhcmFtZXRlcidzIHR5cGUgZG9lcyBub3Qg
bWF0Y2ggdGhlIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgVHlw
ZUVycm9yIGlzIHRocm93biBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gbnVsbC4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJTdHJpY3RUeXBlQ2hlY2tpbmcifSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBteSAkYXJnVmFsdWUgPSAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFJc05hdGl2ZVR5cGUoJGFyZ1R5cGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhJHthcmdWYWx1ZX0uaXNVbmRlZmluZWRPck51
bGwoKSAmJiAhJHthcmdWYWx1ZX0uaW5oZXJpdHMoJkpTJHthcmdUeXBlfTo6c19pbmZvKSlcbiIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CkBAIC0xOTgyLDcg
KzE5OTcsMzEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXROYXRp
dmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAuICIgJG5hbWUgPSAiIC4gSlNWYWx1ZVRv
TmF0aXZlKCRwYXJhbWV0ZXIsICJleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSIpIC4gIjtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRm9yIHBhcmFtZXRlcnMgd2l0aCAiQWxs
b3dKU09OIiwgbG9vayBmb3Igb2JqZWN0IHByb3BlcnRpZXMgYW5kIGR5bmFtaWNhbGx5CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBkZXNpcmVkIHR5cGUgb2YgaW5zdGFu
Y2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc05hdGl2ZVR5cGUoJGFyZ1R5
cGUpICYmICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBbGxvd0pTT04ifSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcGFyYW1ldGVyVHlwZSA9ICRwYXJh
bWV0ZXItPnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IiRwYXJhbWV0ZXJUeXBlLmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkcGFyYW1ldGVyVHlwZT4gJG5hbWU7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKCEkYXJnVmFsdWUuaXNOdWxsKCkgJiYgISRhcmdWYWx1ZS5pc1VuZGVmaW5lZCgp
ICYmICRhcmdWYWx1ZS5pc09iamVjdCgpICYmICEke2FyZ1ZhbHVlfS5pbmhlcml0cygmSlMke2Fy
Z1R5cGV9OjpzX2luZm8pKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSAkYXJnVmFsdWUu
Z2V0T2JqZWN0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgICRuYW1lID0gJHtwYXJhbWV0ZXJUeXBlfTo6Y3JlYXRlKCk7
XG4iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBAYXR0cmlidXRlcyA9
IEdldEF0dHJpYnV0ZXNGb3JKU09OT2JqZWN0KCRwYXJhbWV0ZXJUeXBlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAYXR0cmlidXRlcykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGF0dHJOYW1lID0gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXkgJGpzVmFyTmFtZSA9ICJqcyIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgk
YXR0ck5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNldHRl
ciA9ICJzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJOYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBKU1ZhbHVlICRqc1Zhck5hbWUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IFwiJGF0dHJOYW1lXCIpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmICghJGpzVmFyTmFtZS5pc051bGwoKSAm
JiAhJGpzVmFyTmFtZS5pc1VuZGVmaW5lZCgpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgICRuYW1lLT4kc2V0
dGVyKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkanNWYXJOYW1l
KSAuICIpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfSBlbHNlIHtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgJG5hbWUgPSBhZG9wdFJlZigiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIs
ICRhcmdWYWx1ZSkgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAi
ICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQo
JGFyZ3NJbmRleCkiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlzICJhbiBpbmRl
eCIgYW5kIGl0J3MgbmVnYXRpdmUgaXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJWkVfRVJSIGV4
Y2VwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ1dCB0aGlzIG5lZWRzIHRv
IGJlIGRvbmUgaW4gdGhlIGJpbmRpbmdzLCBiZWNhdXNlIHRoZSB0eXBlIGlzIHVuc2lnbmVkIGFu
ZCB0aGUgZmFjdCB0aGF0IGl0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQppbmRleCAwNmJjZTA0ODA5ZjE5MjJiMGFjYmYzZDc3MzQ0MzUwYzdiMjBmMmQ0Li5l
ZmE2ZDZkNjNmMmZlNTc5N2Q3NDg2ZDgzM2U2MGQ4NjY4MWMyNzdlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTEzMjMsMTEgKzEzMjMsMTEgQEAg
RU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBDb252ZXJ0
VG9WOFBhcmFtZXRlcigkcGFyYW1ldGVyLCAkbmF0aXZlVHlwZSwgJHBhcmFtZXRlck5hbWUsICR2
YWx1ZSkgLiAiXG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IlY4QmluZGluZ01hY3Jvcy5oIn0gPSAxOworICAgICAgICAgICAgbXkgJGFyZ1ZhbHVlID0g
ImFyZ3NbJHBhcmFtSW5kZXhdIjsKKyAgICAgICAgICAgIG15ICRhcmdUeXBlID0gR2V0VHlwZUZy
b21TaWduYXR1cmUoJHBhcmFtZXRlcik7CiAgICAgICAgICAgICAjIEZvciBmdW5jdGlvbnMgd2l0
aCAiU3RyaWN0VHlwZUNoZWNraW5nIiwgaWYgYW4gaW5wdXQgcGFyYW1ldGVyJ3MgdHlwZSBkb2Vz
IG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlLAogICAgICAgICAgICAgIyBhIFR5cGVFcnJvciBpcyB0
aHJvd24gaW5zdGVhZCBvZiBjYXN0aW5nIHRvIG51bGwuCiAgICAgICAgICAgICBpZiAoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTdHJpY3RUeXBlQ2hlY2tpbmci
fSkgewotICAgICAgICAgICAgICAgIG15ICRhcmdWYWx1ZSA9ICJhcmdzWyRwYXJhbUluZGV4XSI7
Ci0gICAgICAgICAgICAgICAgbXkgJGFyZ1R5cGUgPSBHZXRUeXBlRnJvbVNpZ25hdHVyZSgkcGFy
YW1ldGVyKTsKICAgICAgICAgICAgICAgICBpZiAoSXNXcmFwcGVyVHlwZSgkYXJnVHlwZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+ICRwYXJhbUluZGV4ICYmICFpc1VuZGVmaW5lZE9yTnVsbCgkYXJnVmFsdWUp
ICYmICFWOCR7YXJnVHlwZX06Okhhc0luc3RhbmNlKCRhcmdWYWx1ZSkpIHtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBWOFByb3h5Ojp0
aHJvd1R5cGVFcnJvcigpO1xuIik7CkBAIC0xMzQwLDggKzEzNDAsNDQgQEAgRU5ECiAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBFWENFUFRJT05fQkxPQ0soJG5hdGl2ZVR5cGUsICRwYXJhbWV0ZXJOYW1lLCAi
IC4KLSAgICAgICAgICAgICAgICAgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRw
YXJhbUluZGV4XSIsIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gICIk
e3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIik7XG4iKTsKKworICAgICAgICAgICAgIyBG
b3IgcGFyYW1ldGVycyB3aXRoICJBbGxvd0pTT04iLCBsb29rIGZvciBvYmplY3QgcHJvcGVydGll
cyBhbmQgZHluYW1pY2FsbHkKKyAgICAgICAgICAgICMgY3JlYXRlIGEgZGVzaXJlZCB0eXBlIG9m
IGluc3RhbmNlLgorICAgICAgICAgICAgaWYgKElzV3JhcHBlclR5cGUoJGFyZ1R5cGUpICYmICRw
YXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBbGxvd0pTT04ifSkgeworICAgICAgICAg
ICAgICAgIG15ICRwYXJhbWV0ZXJUeXBlID0gJHBhcmFtZXRlci0+dHlwZTsKKyAgICAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyIkcGFyYW1ldGVyVHlwZS5oIn0gPSAxOworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPCRwYXJhbWV0ZXJUeXBlPiAk
cGFyYW1ldGVyTmFtZTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgaWYgKCFpc1VuZGVmaW5lZE9yTnVsbCgkYXJnVmFsdWUpICYmICRhcmdWYWx1ZS0+
SXNPYmplY3QoKSAmJiAhVjgke2FyZ1R5cGV9OjpIYXNJbnN0YW5jZSgkYXJnVmFsdWUpKSB7XG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBFWENF
UFRJT05fQkxPQ0sodjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgb2JqZWN0LCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZ3NbJHBhcmFtSW5kZXhdKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICR7cGFy
YW1ldGVyVHlwZX06OmNyZWF0ZSgpO1xuIik7CisKKyAgICAgICAgICAgICAgICBteSBAYXR0cmli
dXRlcyA9IEdldEF0dHJpYnV0ZXNGb3JKU09OT2JqZWN0KCRwYXJhbWV0ZXJUeXBlKTsKKyAgICAg
ICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEBhdHRyaWJ1dGVzKSB7CisgICAgICAg
ICAgICAgICAgICAgIG15ICRhdHRyTmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsK
KyAgICAgICAgICAgICAgICAgICAgbXkgJHZhck5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNm
aXJzdCgkYXR0ck5hbWUpOworICAgICAgICAgICAgICAgICAgICBteSAkanNWYXJOYW1lID0gInY4
IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyTmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIG15ICRzZXR0ZXIgPSAic2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRh
dHRyTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG15ICR2YXJUeXBlID0gJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT50eXBlOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiAkanNWYXJOYW1lID0gb2JqZWN0LT5H
ZXQodjg6OlN0cmluZzo6TmV3KFwiJGF0dHJOYW1lXCIpKTtcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBpZiAoISRqc1Zhck5hbWUuSXNF
bXB0eSgpICYmICFpc1VuZGVmaW5lZE9yTnVsbCgkanNWYXJOYW1lKSkge1xuIik7CisgICAgICAg
ICAgICAgICAgICAgIG15ICR2YXJOYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1
cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCR2
YXJOYXRpdmVUeXBlID1+IC9eVjhQYXJhbWV0ZXIvKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICAgICAgIiAuIENvbnZlcnRUb1Y4UGFy
YW1ldGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHZhck5hdGl2ZVR5cGUsICR2YXJOYW1lLCBK
U1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkanNWYXJOYW1lKSkgLiAiXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgICAgICBFWENFUFRJT05fQkxPQ0soJHZh
ck5hdGl2ZVR5cGUsICR2YXJOYW1lLCAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgJGpzVmFyTmFtZSkgLiAiKTtcbiIpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgICAgICAk
cGFyYW1ldGVyTmFtZS0+JHNldHRlcigkdmFyTmFtZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgfVxuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfSBlbHNl
IHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAg
RVhDRVBUSU9OX0JMT0NLKCRuYXRpdmVUeXBlLCB0bXBfJHBhcmFtZXRlck5hbWUsICIgLgorICAg
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJhcmdzWyRw
YXJhbUluZGV4XSIsIEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpID8gICIk
e3BhcmFtZXRlck5hbWV9T2siIDogdW5kZWYpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICRwYXJhbWV0ZXJOYW1lID0gYWRvcHRSZWYo
dG1wXyRwYXJhbWV0ZXJOYW1lKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgfVxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgRVhDRVBUSU9OX0JMT0NLKCRuYXRpdmVU
eXBlLCAkcGFyYW1ldGVyTmFtZSwgIiAuCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUb05h
dGl2ZSgkcGFyYW1ldGVyLCAiYXJnc1skcGFyYW1JbmRleF0iLCBCYXNpY1R5cGVDYW5GYWlsQ29u
dmVyc2lvbigkcGFyYW1ldGVyKSA/ICAiJHtwYXJhbWV0ZXJOYW1lfU9rIiA6IHVuZGVmKSAuICIp
O1xuIik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJHBhcmFtZXRl
ci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzSW5kZXgifSkgewpAQCAtMjU1Nyw2ICsyNTkzLDIw
IEBAIHN1YiBJc0FjdGl2ZURvbVR5cGUKICAgICByZXR1cm4gMDsKIH0KIAorIyBSZXR1cm5zIHNp
Z25hdHVyZXMgb2YgcmVhZC13cml0ZSBhdHRyaWJ1dGVzIGZvciBhIGdpdmVuIG9iamVjdC4KKyMg
VGhpcyBzdWJyb3V0aW5lIGlzIGNhbGxlZCBmb3IgcGFyYW1ldGVycyB0aGF0IGFyZSBhbm5vdGF0
ZWQgd2l0aCAiQWxsb3dKU09OIi4KK3N1YiBHZXRBdHRyaWJ1dGVzRm9ySlNPTk9iamVjdAorewor
ICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICBteSAkcGFyc2VkID0gJGNvZGVHZW5lcmF0b3It
PlBhcnNlSW50ZXJmYWNlKCR0eXBlKTsKKyAgICBteSBAYXR0cmlidXRlc0FycmF5ID0gKCk7Cisg
ICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRwYXJzZWQtPmF0dHJpYnV0ZXN9KSB7CisgICAg
ICAgIHB1c2goQGF0dHJpYnV0ZXNBcnJheSwgJGF0dHJpYnV0ZSkgaWYgKCRhdHRyaWJ1dGUtPnR5
cGUgIX4gL15yZWFkb25seS8pOworICAgIH0KKyAgICByZXR1cm4gQGF0dHJpYnV0ZXNBcnJheTsK
K30KKwogc3ViIEdldE5hdGl2ZVR5cGVGb3JDb252ZXJzaW9ucwogewogICAgIG15ICR0eXBlID0g
c2hpZnQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2Vi
RE9NVGVzdEpTT05PYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RKU09OT2JqLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTE4NDZjODVjZjhkN2M0NmUyZDgxMjRi
NDI4MzNkNGJlMDI1ZmVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RKU09OT2JqLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01UZXN0
SlNPTk9iai5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RKU09OT2JqLmgi
CisjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgorI2luY2x1
ZGUgIldlYkRPTVRlc3RPYmouaCIKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCisj
aW5jbHVkZSAid3RmL3RleHQvQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IFdlYkRPTVRlc3RKU09OT2JqOjpX
ZWJET01UZXN0SlNPTk9ialByaXZhdGUgeworICAgIFdlYkRPTVRlc3RKU09OT2JqUHJpdmF0ZShX
ZWJDb3JlOjpUZXN0SlNPTk9iaiogb2JqZWN0ID0gMCkKKyAgICAgICAgOiBpbXBsKG9iamVjdCkK
KyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RKU09OT2JqPiBpbXBsOwor
fTsKKworV2ViRE9NVGVzdEpTT05PYmo6OldlYkRPTVRlc3RKU09OT2JqKCkKKyAgICA6IFdlYkRP
TU9iamVjdCgpCisgICAgLCBtX2ltcGwoMCkKK3sKK30KKworV2ViRE9NVGVzdEpTT05PYmo6Oldl
YkRPTVRlc3RKU09OT2JqKFdlYkNvcmU6OlRlc3RKU09OT2JqKiBpbXBsKQorICAgIDogV2ViRE9N
T2JqZWN0KCkKKyAgICAsIG1faW1wbChuZXcgV2ViRE9NVGVzdEpTT05PYmpQcml2YXRlKGltcGwp
KQoreworfQorCitXZWJET01UZXN0SlNPTk9iajo6V2ViRE9NVGVzdEpTT05PYmooY29uc3QgV2Vi
RE9NVGVzdEpTT05PYmomIGNvcHkpCisgICAgOiBXZWJET01PYmplY3QoKQoreworICAgIG1faW1w
bCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RKU09OT2JqUHJpdmF0ZShjb3B5LmltcGwo
KSkgOiAwOworfQorCitXZWJET01UZXN0SlNPTk9iaiYgV2ViRE9NVGVzdEpTT05PYmo6Om9wZXJh
dG9yPShjb25zdCBXZWJET01UZXN0SlNPTk9iaiYgY29weSkKK3sKKyAgICBkZWxldGUgbV9pbXBs
OworICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RKU09OT2JqUHJpdmF0
ZShjb3B5LmltcGwoKSkgOiAwOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViQ29yZTo6VGVz
dEpTT05PYmoqIFdlYkRPTVRlc3RKU09OT2JqOjppbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbXBsID8gbV9pbXBsLT5pbXBsLmdldCgpIDogMDsKK30KKworV2ViRE9NVGVzdEpTT05PYmo6
On5XZWJET01UZXN0SlNPTk9iaigpCit7CisgICAgZGVsZXRlIG1faW1wbDsKKyAgICBtX2ltcGwg
PSAwOworfQorCitpbnQgV2ViRE9NVGVzdEpTT05PYmo6OmludEF0dHIoKSBjb25zdAoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbXBsKCktPmlu
dEF0dHIoKTsKK30KKwordm9pZCBXZWJET01UZXN0SlNPTk9iajo6c2V0SW50QXR0cihpbnQgbmV3
SW50QXR0cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1w
bCgpLT5zZXRJbnRBdHRyKG5ld0ludEF0dHIpOworfQorCitsb25nIGxvbmcgV2ViRE9NVGVzdEpT
T05PYmo6OmxvbmdMb25nQXR0cigpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIGltcGwoKS0+bG9uZ0xvbmdBdHRyKCk7Cit9CisKK3Zv
aWQgV2ViRE9NVGVzdEpTT05PYmo6OnNldExvbmdMb25nQXR0cihsb25nIGxvbmcgbmV3TG9uZ0xv
bmdBdHRyKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBs
KCktPnNldExvbmdMb25nQXR0cihuZXdMb25nTG9uZ0F0dHIpOworfQorCit1bnNpZ25lZCBsb25n
IGxvbmcgV2ViRE9NVGVzdEpTT05PYmo6OnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkgY29uc3QKK3sK
KyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgp
LT51bnNpZ25lZExvbmdMb25nQXR0cigpOworfQorCit2b2lkIFdlYkRPTVRlc3RKU09OT2JqOjpz
ZXRVbnNpZ25lZExvbmdMb25nQXR0cih1bnNpZ25lZCBsb25nIGxvbmcgbmV3VW5zaWduZWRMb25n
TG9uZ0F0dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlt
cGwoKS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIobmV3VW5zaWduZWRMb25nTG9uZ0F0dHIpOwor
fQorCitXZWJET01TdHJpbmcgV2ViRE9NVGVzdEpTT05PYmo6OnN0cmluZ0F0dHIoKSBjb25zdAor
eworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7CisKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPnN0cmluZ0F0
dHIoKSk7Cit9CisKK3ZvaWQgV2ViRE9NVGVzdEpTT05PYmo6OnNldFN0cmluZ0F0dHIoY29uc3Qg
V2ViRE9NU3RyaW5nJiBuZXdTdHJpbmdBdHRyKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbXBsKCktPnNldFN0cmluZ0F0dHIobmV3U3RyaW5nQXR0cik7Cit9
CisKK1dlYkRPTVRlc3RPYmogV2ViRE9NVGVzdEpTT05PYmo6OnRlc3RPYmpBdHRyKCkgY29uc3QK
K3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsKKwor
ICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPnRlc3RPYmpBdHRyKCkpKTsK
K30KKwordm9pZCBXZWJET01UZXN0SlNPTk9iajo6c2V0VGVzdE9iakF0dHIoY29uc3QgV2ViRE9N
VGVzdE9iaiYgbmV3VGVzdE9iakF0dHIpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGltcGwoKS0+c2V0VGVzdE9iakF0dHIodG9XZWJDb3JlKG5ld1Rlc3RPYmpB
dHRyKSk7Cit9CisKK1dlYkNvcmU6OlRlc3RKU09OT2JqKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9N
VGVzdEpTT05PYmomIHdyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOworfQor
CitXZWJET01UZXN0SlNPTk9iaiB0b1dlYktpdChXZWJDb3JlOjpUZXN0SlNPTk9iaiogdmFsdWUp
Cit7CisgICAgcmV0dXJuIFdlYkRPTVRlc3RKU09OT2JqKHZhbHVlKTsKK30KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SlNPTk9iai5oIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RKU09OT2JqLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzZlYmU4OTAzMGNlNjc3MDUwODM2ZDhkMDA0NjU2ZTM4M2QwMDg1MgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
SlNPTk9iai5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNh
bS53ZWluaWdAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYkRPTVRlc3RKU09O
T2JqX2gKKyNkZWZpbmUgV2ViRE9NVGVzdEpTT05PYmpfaAorCisjaW5jbHVkZSA8V2ViRE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFRlc3RKU09OT2JqOworfTsKKworY2xhc3MgV2ViRE9NVGVzdE9iajsKKworY2xhc3Mg
V2ViRE9NVGVzdEpTT05PYmogOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBX
ZWJET01UZXN0SlNPTk9iaigpOworICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RKU09OT2JqKFdlYkNv
cmU6OlRlc3RKU09OT2JqKik7CisgICAgV2ViRE9NVGVzdEpTT05PYmooY29uc3QgV2ViRE9NVGVz
dEpTT05PYmomKTsKKyAgICBXZWJET01UZXN0SlNPTk9iaiYgb3BlcmF0b3I9KGNvbnN0IFdlYkRP
TVRlc3RKU09OT2JqJik7CisgICAgdmlydHVhbCB+V2ViRE9NVGVzdEpTT05PYmooKTsKKworICAg
IGludCBpbnRBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbnRBdHRyKGludCk7CisgICAgbG9u
ZyBsb25nIGxvbmdMb25nQXR0cigpIGNvbnN0OworICAgIHZvaWQgc2V0TG9uZ0xvbmdBdHRyKGxv
bmcgbG9uZyk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRVbnNpZ25lZExvbmdMb25nQXR0cih1bnNpZ25lZCBsb25nIGxv
bmcpOworICAgIFdlYkRPTVN0cmluZyBzdHJpbmdBdHRyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRT
dHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYpOworICAgIFdlYkRPTVRlc3RPYmogdGVzdE9i
akF0dHIoKSBjb25zdDsKKyAgICB2b2lkIHNldFRlc3RPYmpBdHRyKGNvbnN0IFdlYkRPTVRlc3RP
YmomKTsKKworICAgIFdlYkNvcmU6OlRlc3RKU09OT2JqKiBpbXBsKCkgY29uc3Q7CisKK3Byb3Rl
Y3RlZDoKKyAgICBzdHJ1Y3QgV2ViRE9NVGVzdEpTT05PYmpQcml2YXRlOworICAgIFdlYkRPTVRl
c3RKU09OT2JqUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6VGVzdEpTT05PYmoqIHRv
V2ViQ29yZShjb25zdCBXZWJET01UZXN0SlNPTk9iaiYpOworV2ViRE9NVGVzdEpTT05PYmogdG9X
ZWJLaXQoV2ViQ29yZTo6VGVzdEpTT05PYmoqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RKU09OT2JqLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpT
T05PYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4NGE5YzUzYWFmZjBiOGY2ZGQ1YTk4MzIyZTYyNDc1Yjgy
MjdlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RKU09OT2JqLmNwcApAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIlRlc3RKU09OT2JqLmgiCisjaW5jbHVkZSAiVGVzdE9iai5o
IgorI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJnb2JqZWN0L0NvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdEpTT05PYmou
aCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdEpTT05PYmpQcml2YXRlLmgiCisjaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RPYmouaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0
RE9NVGVzdE9ialByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisjaW5jbHVk
ZSAid2Via2l0cHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK2dwb2ludGVy
IGtpdChXZWJDb3JlOjpUZXN0SlNPTk9iaiogb2JqKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKG9iaiwgMCk7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIERPTU9iamVjdENhY2hl
OjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0SlNPTk9iaihvYmopKTsKK30KKyAgICAKK30gLy8g
bmFtZXNwYWNlIFdlYktpdCAvLworCitnbG9uZword2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dl
dF9pbnRfYXR0cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdEpTT05PYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmludEF0dHIoKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfc2V0X2ludF9hdHRyKFdlYktpdERP
TVRlc3RKU09OT2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpUZXN0SlNPTk9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2V0SW50QXR0cih2YWx1ZSk7Cit9CisKK2dpbnQ2NAord2Via2l0X2RvbV90ZXN0X2pzb25f
b2JqX2dldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6VGVzdEpTT05PYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdpbnQ2NCByZXMgPSBpdGVtLT5sb25nTG9uZ0F0dHIoKTsK
KyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfc2V0
X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmLCBnaW50NjQgdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdEpTT05PYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldExvbmdMb25nQXR0cih2YWx1ZSk7Cit9CisK
K2d1aW50NjQKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25n
X2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OworICAgIFdlYkNvcmU6OlRlc3RKU09OT2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndWludDY0IHJlcyA9IGl0ZW0tPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCk7CisgICAgcmV0
dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX3NldF91bnNpZ25l
ZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZiwgZ3VpbnQ2NCB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodmFs
dWUpOworfQorCitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9nZXRfc3RyaW5nX2F0
dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwor
ICAgIFdlYkNvcmU6OlRlc3RKU09OT2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyKCkpOwor
ICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9zZXRf
c3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK1dlYktpdERP
TVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2Vi
S2l0RE9NVGVzdEpTT05PYmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdl
YkNvcmU6OlRlc3RKU09OT2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9i
akF0dHIoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gc3RhdGljX2Nhc3Q8V2ViS2l0
RE9NVGVzdE9iaio+KFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKSk7CisgICAgcmV0dXJuIHJlczsK
K30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX3NldF90ZXN0X29ial9hdHRyKFdl
YktpdERPTVRlc3RKU09OT2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0SlNPTk9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsK
KyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBpdGVtLT5zZXRU
ZXN0T2JqQXR0cihjb252ZXJ0ZWRfdmFsdWUpOworfQorCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NVGVzdEpTT05PYmosIHdlYmtpdF9kb21fdGVzdF9qc29uX29iaiwgV0VCS0lUX1RZUEVfRE9N
X09CSkVDVCkKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkNvcmU6OlRlc3RKU09OT2JqKiBj
b3JlKFdlYktpdERPTVRlc3RKU09OT2JqKiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViQ29yZTo6VGVzdEpTT05PYmoqIGNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SlNPTk9iaio+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2Jq
ZWN0LCAwKTsKKworICAgIHJldHVybiBjb3JlT2JqZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0lOVF9BVFRSLAorICAgIFBST1Bf
TE9OR19MT05HX0FUVFIsCisgICAgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKKyAgICBQ
Uk9QX1NUUklOR19BVFRSLAorICAgIFBST1BfVEVTVF9PQkpfQVRUUiwKK307CisKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChv
YmplY3QpOworICAgIAorICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CisgICAgICAg
IFdlYkNvcmU6OlRlc3RKU09OT2JqKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
VGVzdEpTT05PYmogKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CisKKyAgICAgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOworICAgICAgICBjb3JlT2JqZWN0
LT5kZXJlZigpOworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOworICAg
IH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9qc29uX29ial9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfanNvbl9vYmpfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYktpdERPTVRlc3RKU09OT2JqKiBz
ZWxmID0gV0VCS0lUX0RPTV9URVNUX0pTT05fT0JKKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVz
dEpTT05PYmoqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJv
cF9pZCkgeworICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxm
LT5zZXRJbnRBdHRyKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSOgorICAgIHsKKyAg
ICAgICAgY29yZVNlbGYtPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKChnX3ZhbHVlX2dldF91aW50
NjQodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSU5H
X0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cihXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9KU09OX09CSihv
YmplY3QpOworICAgIFdlYkNvcmU6OlRlc3RKU09OT2JqKiBjb3JlU2VsZiA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfSU5UX0FUVFI6
CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aW50QXR0
cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9MT05HX0xPTkdfQVRU
UjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2ludDY0KHZhbHVlLCBjb3JlU2VsZi0+bG9u
Z0xvbmdBdHRyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1VOU0lH
TkVEX0xPTkdfTE9OR19BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZh
bHVlLCBjb3JlU2VsZi0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdB
dHRyKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9URVNUX09CSl9B
VFRSOgorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVT
ZWxmLT50ZXN0T2JqQXR0cigpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdl
YktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sK
KworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0ZWQpCisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF9qc29uX29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfY2xhc3NfaW5pdChXZWJLaXRET01U
ZXN0SlNPTk9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzICpnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZmluYWxpemU7CisgICAgZ29i
amVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0
X2pzb25fb2JqX2dldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0g
d2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2NvbnN0cnVjdGVkOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX0lOVF9BVFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImludC1hdHRyIiwgLyogbmFtZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVz
dF9qc29uX29ial9pbnQtYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdy
aXRlICBnbG9uZyBUZXN0SlNPTk9iai5pbnQtYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdp
dGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwor
R19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENs
YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9MT05HX0xPTkdf
QVRUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19p
bnQ2NCgibG9uZy1sb25nLWF0dHIiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X2pzb25fb2JqX2xvbmct
bG9uZy1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdpbnQ2
NCBUZXN0SlNPTk9iai5sb25nLWxvbmctYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGgg
c29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTklOVDY0LCAvKiBtaW4gKi8KK0df
TUFYSU5UNjQsIC8qIG1heCAqLworMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xh
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1VOU0lHTkVEX0xP
TkdfTE9OR19BVFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQ2NCgidW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLCAvKiBuYW1lICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0X2pzb25fb2JqX3Vuc2lnbmVkLWxvbmctbG9uZy1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRp
b24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlYWQtd3JpdGUgIGd1aW50NjQgVGVzdEpTT05PYmoudW5zaWduZWQtbG9uZy1s
b25nLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZm
IGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgLyogbWluICovCitHX01BWFVJTlQ2NCwgLyogbWluICovCiswLCAvKiBk
ZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfU1RSSU5HX0FUVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzdHJpbmctYXR0ciIsIC8qIG5hbWUgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRlc3RfanNvbl9vYmpfc3RyaW5nLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicmVhZC13cml0ZSAgZ2NoYXIqIFRlc3RKU09OT2JqLnN0cmluZy1hdHRyIiwgLyogbG9uZ2Vy
IC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAvKiBk
ZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfVEVTVF9PQkpfQVRUUiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInRlc3Qtb2JqLWF0dHIiLCAvKiBuYW1l
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXN0X2pzb25fb2JqX3Rlc3Qtb2JqLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlv
biAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVhZC13cml0ZSAgV2ViS2l0RE9NVGVzdE9iaiogVGVzdEpTT05PYmoudGVzdC1v
YmotYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYg
aGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfanNvbl9vYmpfaW5pdChXZWJLaXRET01UZXN0SlNPTk9iaiogcmVxdWVzdCkKK3sK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXN0SlNPTk9iaiogd3JhcFRlc3RK
U09OT2JqKFdlYkNvcmU6OlRlc3RKU09OT2JqKiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRo
ZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUg
YSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4g
IFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigp
LgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRf
RE9NX1RFU1RfSlNPTl9PQkooZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0pTT05f
T0JKLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEpTT05PYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEpTT05PYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWRlN2FmNjAxYTE4NjU1MGRkYTE0
MjJlOWM5ZWViMGUwMWQyOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNPTk9iai5oCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0SlNPTk9i
al9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RKU09OT2JqX2gKKworI2luY2x1ZGUgIndlYmtpdC93
ZWJraXRkb21kZWZpbmVzLmgiCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01PYmplY3Qu
aCIKKworCitHX0JFR0lOX0RFQ0xTCisjZGVmaW5lIFdFQktJVF9UWVBFX0RPTV9URVNUX0pTT05f
T0JKICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9qc29uX29ial9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfSlNPTl9PQkoob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfSlNPTl9PQkosIFdl
YktpdERPTVRlc3RKU09OT2JqKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTT05fT0JKX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9U
WVBFX0RPTV9URVNUX0pTT05fT0JKLCBXZWJLaXRET01UZXN0SlNPTk9iakNsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX1RFU1RfSlNPTl9PQkoob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfSlNPTl9PQkopKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfSlNPTl9PQkpfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfSlNPTl9PQkopKQor
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSlNPTl9PQkpfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfSlNPTl9PQkos
IFdlYktpdERPTVRlc3RKU09OT2JqQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RKU09O
T2JqIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01UZXN0SlNPTk9iakNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3RfanNv
bl9vYmpfZ2V0X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3Rl
c3RfanNvbl9vYmpfZ2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmKTsKKwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfc2V0X2ludF9hdHRyKFdl
YktpdERPTVRlc3RKU09OT2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKK1dFQktJVF9BUEkgZ2lu
dDY0Cit3ZWJraXRfZG9tX3Rlc3RfanNvbl9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERP
TVRlc3RKU09OT2JqKiBzZWxmKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
anNvbl9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmLCBn
aW50NjQgdmFsdWUpOworCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fdGVzdF9qc29u
X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNl
bGYpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9qc29uX29ial9zZXRfdW5z
aWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoqIHNlbGYsIGd1aW50NjQg
dmFsdWUpOworCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dl
dF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0SlNPTk9iaiogc2VsZik7CisKK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01U
ZXN0SlNPTk9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworV0VCS0lUX0FQSSBXZWJL
aXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X2pzb25fb2JqX2dldF90ZXN0X29ial9hdHRy
KFdlYktpdERPTVRlc3RKU09OT2JqKiBzZWxmKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX3Rlc3RfanNvbl9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdEpTT05PYmoq
IHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdlYktpdERPTVRlc3RKU09OT2JqX2ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTT05PYmpQcml2YXRlLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RKU09OT2Jq
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkMzM1ZjJkZTM5ZWU4ZDU5NTQ1ODg4OTYyYjUyYmRlYjQx
MjUxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RKU09OT2JqUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBXRUJfS0lUX0RPTV9URVNUX0pTT05fT0JK
X1BSSVZBVEVfSAorI2RlZmluZSBXRUJfS0lUX0RPTV9URVNUX0pTT05fT0JKX1BSSVZBVEVfSAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSAiVGVzdEpTT05PYmouaCIKK25hbWVzcGFjZSBXZWJLaXQgeworICAg
IFdlYktpdERPTVRlc3RKU09OT2JqICoKKyAgICB3cmFwVGVzdEpTT05PYmooV2ViQ29yZTo6VGVz
dEpTT05PYmogKmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6VGVzdEpTT05PYmogKgorICAg
IGNvcmUoV2ViS2l0RE9NVGVzdEpTT05PYmogKnJlcXVlc3QpOworCisgICAgZ3BvaW50ZXIKKyAg
ICBraXQoV2ViQ29yZTo6VGVzdEpTT05PYmoqIG5vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8qIFdFQl9LSVRfRE9NX1RFU1RfSlNPTl9PQkpfUFJJVkFURV9IICovCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU09OT2Jq
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTT05PYmouY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc2NjBiNGU0MmQxZDhjYTkwNjQ1N2JjZjliZjJhNDgyZTJkMjE5NzcKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RK
U09OT2JqLmNwcApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0SlNPTk9iai5oIgorCisjaW5jbHVk
ZSAiSlNUZXN0T2JqLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRlc3RKU09OT2Jq
LmgiCisjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNOdW1iZXJDZWxs
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NF
UlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTVGVzdEpTT05PYmopOworCisvKiBIYXNoIHRhYmxlICov
CisjaWYgRU5BQkxFKEpJVCkKKyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBn
ZW5lcmF0b3IKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5k
aWYKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEpTT05PYmpUYWJsZVZhbHVl
c1s3XSA9Cit7CisgICAgeyAiaW50QXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0SlNPTk9iakludEF0dHIpLCAo
aW50cHRyX3Qpc2V0SlNUZXN0SlNPTk9iakludEF0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCisg
ICAgeyAibG9uZ0xvbmdBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RKU09OT2JqTG9uZ0xvbmdBdHRyKSwgKGlu
dHB0cl90KXNldEpTVGVzdEpTT05PYmpMb25nTG9uZ0F0dHIgVEhVTktfR0VORVJBVE9SKDApIH0s
CisgICAgeyAidW5zaWduZWRMb25nTG9uZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEpTT05PYmpVbnNpZ25l
ZExvbmdMb25nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RKU09OT2JqVW5zaWduZWRMb25nTG9u
Z0F0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAic3RyaW5nQXR0ciIsIERvbnREZWxl
dGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0SlNPTk9ialN0cmluZ0F0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0SlNPTk9ialN0cmluZ0F0
dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAidGVzdE9iakF0dHIiLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dEpTT05PYmpUZXN0T2JqQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RKU09OT2JqVGVzdE9iakF0
dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8
IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdEpTT05PYmpDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAorICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQorfTsKKworI3Vu
ZGVmIFRIVU5LX0dFTkVSQVRPUgorc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxl
IEpTVGVzdEpTT05PYmpUYWJsZSA9IHsgMTYsIDE1LCBKU1Rlc3RKU09OT2JqVGFibGVWYWx1ZXMs
IDAgfTsKKy8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCisjaWYgRU5BQkxFKEpJVCkK
KyNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikgLCBnZW5lcmF0b3IKKyNlbHNlCisj
ZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCisjZW5kaWYKKworc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEpTT05PYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzWzFdID0K
K3sKKyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1bmRlZiBU
SFVOS19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rl
c3RKU09OT2JqQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0SlNPTk9iakNvbnN0cnVj
dG9yVGFibGVWYWx1ZXMsIDAgfTsKK2NsYXNzIEpTVGVzdEpTT05PYmpDb25zdHJ1Y3RvciA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgSlNUZXN0SlNPTk9iakNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpT
Qzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xv
dENvdW50KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Oklt
cGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIlRlc3RKU09OT2JqQ29uc3RydWN0b3IiLCAwLCAmSlNUZXN0SlNPTk9iakNvbnN0cnVj
dG9yVGFibGUsIDAgfTsKKworSlNUZXN0SlNPTk9iakNvbnN0cnVjdG9yOjpKU1Rlc3RKU09OT2Jq
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNUZXN0SlNPTk9iakNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgSlNUZXN0SlNPTk9ialByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCitib29sIEpTVGVzdEpTT05PYmpDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlU2xvdDxKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgJkpTVGVz
dEpTT05PYmpDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQor
Citib29sIEpTVGVzdEpTT05PYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVz
Y3JpcHRvcjxKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgJkpTVGVz
dEpTT05PYmpDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
OworfQorCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKyNpZiBFTkFCTEUoSklUKQor
I2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgorI2Vsc2UKKyNk
ZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0SlNPTk9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzFdID0KK3sK
KyAgICB7IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIH0KK307CisKKyN1bmRlZiBUSFVO
S19HRU5FUkFUT1IKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RK
U09OT2JqUHJvdG90eXBlVGFibGUgPSB7IDEsIDAsIEpTVGVzdEpTT05PYmpQcm90b3R5cGVUYWJs
ZVZhbHVlcywgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEpTT05PYmpQcm90b3R5cGU6OnNf
aW5mbyA9IHsgIlRlc3RKU09OT2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdEpTT05PYmpQcm90b3R5
cGVUYWJsZSwgMCB9OworCitKU09iamVjdCogSlNUZXN0SlNPTk9ialByb3RvdHlwZTo6c2VsZihF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RKU09OT2JqPihleGVjLCBnbG9iYWxPYmplY3QpOwor
fQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0SlNPTk9iajo6c19pbmZvID0geyAiVGVzdEpTT05P
YmoiLCAwLCAmSlNUZXN0SlNPTk9ialRhYmxlLCAwIH07CisKK0pTVGVzdEpTT05PYmo6OkpTVGVz
dEpTT05PYmooTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdEpTT05PYmo+IGltcGwpCisg
ICAgOiBET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkK
KyAgICAsIG1faW1wbChpbXBsKQoreworfQorCitKU1Rlc3RKU09OT2JqOjp+SlNUZXN0SlNPTk9i
aigpCit7CisgICAgZm9yZ2V0RE9NT2JqZWN0KHRoaXMsIGltcGwoKSk7Cit9CisKK0pTT2JqZWN0
KiBKU1Rlc3RKU09OT2JqOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTVGVzdEpT
T05PYmpQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBKU1Rlc3RKU09OT2JqUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitib29s
IEpTVGVzdEpTT05PYmo6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0SlNPTk9iaiwgQmFzZT4oZXhlYywgJkpTVGVz
dEpTT05PYmpUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rl
c3RKU09OT2JqOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9yPEpTVGVzdEpTT05PYmos
IEJhc2U+KGV4ZWMsICZKU1Rlc3RKU09OT2JqVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvcik7Cit9CisKK0pTVmFsdWUganNUZXN0SlNPTk9iakludEF0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RK
U09OT2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KGFzT2JqZWN0
KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RKU09OT2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVjLCBpbXAtPmludEF0dHIoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RKU09OT2JqTG9uZ0xvbmdBdHRyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAg
SlNUZXN0SlNPTk9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEpTT05PYmoqPihh
c09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0SlNP
Tk9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdEpTT05PYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgaW1wLT5sb25nTG9uZ0F0dHIo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBqc1Rlc3RKU09OT2JqVW5zaWdu
ZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJ
ZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RKU09OT2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0SlNPTk9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFRlc3RKU09OT2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihleGVj
LCBpbXAtPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K0pTVmFsdWUganNUZXN0SlNPTk9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RKU09OT2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7
CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RKU09OT2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZyhleGVjLCBpbXAtPnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworSlNWYWx1ZSBqc1Rlc3RKU09OT2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RKU09O
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0SlNPTk9iaio+KGFzT2JqZWN0KHNs
b3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RKU09OT2JqKiBpbXAg
PSBzdGF0aWNfY2FzdDxUZXN0SlNPTk9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihpbXAtPnRlc3RPYmpBdHRyKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitK
U1ZhbHVlIGpzVGVzdEpTT05PYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
c2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdEpTT05PYmoqIGRvbU9i
amVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEpTT05PYmoqPihhc09iamVjdChzbG90QmFzZSkpOwor
ICAgIHJldHVybiBKU1Rlc3RKU09OT2JqOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBkb21PYmplY3Qt
Pmdsb2JhbE9iamVjdCgpKTsKK30KK3ZvaWQgSlNUZXN0SlNPTk9iajo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgbG9va3VwUHV0PEpTVGVzdEpTT05PYmosIEJhc2U+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsICZKU1Rlc3RKU09OT2JqVGFibGUsIHRoaXMsIHNs
b3QpOworfQorCit2b2lkIHNldEpTVGVzdEpTT05PYmpJbnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0SlNPTk9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEpTT05PYmoqPih0aGlzT2JqZWN0KTsK
KyAgICBUZXN0SlNPTk9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdEpTT05PYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOworICAgIGltcC0+c2V0SW50QXR0cih2YWx1ZS50b0ludDMyKGV4ZWMpKTsK
K30KKwordm9pZCBzZXRKU1Rlc3RKU09OT2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0SlNPTk9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEpTT05PYmoqPih0aGlzT2JqZWN0KTsK
KyAgICBUZXN0SlNPTk9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdEpTT05PYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOworICAgIGltcC0+c2V0TG9uZ0xvbmdBdHRyKHN0YXRpY19jYXN0PGxvbmcg
bG9uZz4odmFsdWUudG9JbnRlZ2VyKGV4ZWMpKSk7Cit9CisKK3ZvaWQgc2V0SlNUZXN0SlNPTk9i
alVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0SlNPTk9iaiogY2FzdGVkVGhpcyA9IHN0
YXRpY19jYXN0PEpTVGVzdEpTT05PYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0SlNPTk9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdEpTT05PYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAg
IGltcC0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPih2YWx1ZS50b0ludGVnZXIoZXhlYykpKTsKK30KKwordm9pZCBzZXRKU1Rlc3RKU09OT2Jq
U3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIEpTVGVzdEpTT05PYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RKU09OT2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IHN0YXRp
Y19jYXN0PFRlc3RKU09OT2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpbXAtPnNldFN0
cmluZ0F0dHIodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7Cit9CisKK3Zv
aWQgc2V0SlNUZXN0SlNPTk9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0SlNPTk9iaiogY2FzdGVk
VGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdEpTT05PYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0
SlNPTk9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdEpTT05PYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworICAgIGltcC0+c2V0VGVzdE9iakF0dHIodG9UZXN0T2JqKHZhbHVlKSk7Cit9CisKK0pT
VmFsdWUgSlNUZXN0SlNPTk9iajo6Z2V0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RKU09OT2JqQ29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SlNPTk9i
aiogb2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTVGVzdEpTT05P
Ymo+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKK30KK1Rlc3RKU09OT2JqKiB0b1Rlc3RK
U09OT2JqKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMo
JkpTVGVzdEpTT05PYmo6OnNfaW5mbykgPyBzdGF0aWNfY2FzdDxKU1Rlc3RKU09OT2JqKj4oYXNP
YmplY3QodmFsdWUpKS0+aW1wbCgpIDogMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNPTk9iai5oIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNPTk9iai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4NjUzNmZlZmYy
MmRjNjBiNTllZTdjODI4YzBmOGMwYjc5MzU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU09OT2JqLmgKQEAgLTAsMCArMSw5MyBA
QAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdEpTT05PYmpfaAorI2Rl
ZmluZSBKU1Rlc3RKU09OT2JqX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0
V2l0aEdsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGVzdEpTT05PYmo7CisKK2NsYXNzIEpT
VGVzdEpTT05PYmogOiBwdWJsaWMgRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIgeworICAgIHR5
cGVkZWYgRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIgQmFzZTsKK3B1YmxpYzoKKyAgICBKU1Rl
c3RKU09OT2JqKE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgSlNET01HbG9iYWxP
YmplY3QqLCBQYXNzUmVmUHRyPFRlc3RKU09OT2JqPik7CisgICAgdmlydHVhbCB+SlNUZXN0SlNP
Tk9iaigpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9
CisgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
QW5vbnltb3VzU2xvdENvdW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdl
dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAg
IFRlc3RKU09OT2JqKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CisKK3By
aXZhdGU6CisgICAgUmVmUHRyPFRlc3RKU09OT2JqPiBtX2ltcGw7Citwcm90ZWN0ZWQ6CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0SlNPTk9iaiop
OworVGVzdEpTT05PYmoqIHRvVGVzdEpTT05PYmooSlNDOjpKU1ZhbHVlKTsKKworY2xhc3MgSlNU
ZXN0SlNPTk9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVj
dCB7CisgICAgdHlwZWRlZiBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBCYXNlOworcHVi
bGljOgorICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICBzdGF0aWMgY29uc3QgSlND
OjpDbGFzc0luZm8gc19pbmZvOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJl
PiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKKyAg
ICB9CisgICAgSlNUZXN0SlNPTk9ialByb3RvdHlwZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUpIDog
SlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpIHsg
fQorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkpTVmFs
dWUganNUZXN0SlNPTk9iakludEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RKU09OT2JqSW50QXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVl
IGpzVGVzdEpTT05PYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RKU09OT2JqTG9uZ0xvbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0SlNPTk9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0
SlNPTk9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0SlNPTk9ialN0cmluZ0F0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwor
dm9pZCBzZXRKU1Rlc3RKU09OT2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEpTT05PYmpUZXN0T2Jq
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVy
Jik7Cit2b2lkIHNldEpTVGVzdEpTT05PYmpUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdEpTT05PYmpD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCA2M2JjMzY4NTFk
Y2I1ZjBmNTVmZGQxYjZkMjNkOGRmMzY5YWJmOWRmLi5mYTE2OWQ3MzVlZjRkNGQ1YjkyZGRjZGQ1
MTg3YmJiNzIwM2EyNDJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAKQEAgLTI4LDExICsyOCwxMyBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTVGVzdENhbGxi
YWNrLmgiCisjaW5jbHVkZSAiSlNUZXN0SlNPTk9iai5oIgogI2luY2x1ZGUgIkpTVGVzdE9iai5o
IgogI2luY2x1ZGUgIkpTbG9nLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNjcmlw
dENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1
ZGUgIlRlc3RKU09OT2JqLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTnVtYmVyQ2VsbC5oPgpAQCAtMjI1LDEx
ICsyMjcsMTIgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlw
ZVRhYmxlVmFsdWVzWzQ3XSA9CiAgICAgeyAib3ZlcmxvYWRlZE1ldGhvZCIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QpLCAoaW50cHRyX3QpMiBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKICAgICB7ICJjbGFzc01ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlv
biwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNsYXNzTWV0aG9kKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0s
CiAgICAgeyAiY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24s
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbCksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAorICAgIHsgIm1ldGhvZFdpdGhBbGxvd0pTT04iLCBEb250RGVsZXRlIHwgRnVu
Y3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQWxsb3dKU09OKSwgKGludHB0cl90KTEgVEhVTktfR0VO
RVJBVE9SKDApIH0sCiAgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9CiB9Owog
CiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNo
VGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNSwgMTI3LCBKU1Rlc3RPYmpQcm90
b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRh
YmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzYsIDEyNywgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFi
bGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xNDg1LDYgKzE0ODgsNDIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQWxsb3dKU09OKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBSZWZQdHI8VGVz
dEpTT05PYmo+IHRlc3RKc29uT2JqOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxs
KCkgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgJiYgZXhlYy0+YXJndW1lbnQo
MCkuaXNPYmplY3QoKSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaW5oZXJpdHMoJkpTVGVzdEpTT05P
Ymo6OnNfaW5mbykpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50
KDApLmdldE9iamVjdCgpOworICAgICAgICB0ZXN0SnNvbk9iaiA9IFRlc3RKU09OT2JqOjpjcmVh
dGUoKTsKKyAgICAgICAgSlNWYWx1ZSBqc0ludEF0dHIgPSBvYmplY3QtPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsICJpbnRBdHRyIikpOworICAgICAgICBpZiAoIWpzSW50QXR0ci5pc051bGwo
KSAmJiAhanNJbnRBdHRyLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICB0ZXN0SnNvbk9iai0+
c2V0SW50QXR0cihqc0ludEF0dHIudG9JbnQzMihleGVjKSk7CisgICAgICAgIEpTVmFsdWUganNM
b25nTG9uZ0F0dHIgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsb25nTG9u
Z0F0dHIiKSk7CisgICAgICAgIGlmICghanNMb25nTG9uZ0F0dHIuaXNOdWxsKCkgJiYgIWpzTG9u
Z0xvbmdBdHRyLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICB0ZXN0SnNvbk9iai0+c2V0TG9u
Z0xvbmdBdHRyKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oanNMb25nTG9uZ0F0dHIudG9JbnRlZ2Vy
KGV4ZWMpKSk7CisgICAgICAgIEpTVmFsdWUganNVbnNpZ25lZExvbmdMb25nQXR0ciA9IG9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIikpOwor
ICAgICAgICBpZiAoIWpzVW5zaWduZWRMb25nTG9uZ0F0dHIuaXNOdWxsKCkgJiYgIWpzVW5zaWdu
ZWRMb25nTG9uZ0F0dHIuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHRlc3RKc29uT2JqLT5z
ZXRVbnNpZ25lZExvbmdMb25nQXR0cihzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGpz
VW5zaWduZWRMb25nTG9uZ0F0dHIudG9JbnRlZ2VyKGV4ZWMpKSk7CisgICAgICAgIEpTVmFsdWUg
anNTdHJpbmdBdHRyID0gb2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAic3RyaW5n
QXR0ciIpKTsKKyAgICAgICAgaWYgKCFqc1N0cmluZ0F0dHIuaXNOdWxsKCkgJiYgIWpzU3RyaW5n
QXR0ci5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgdGVzdEpzb25PYmotPnNldFN0cmluZ0F0
dHIodXN0cmluZ1RvU3RyaW5nKGpzU3RyaW5nQXR0ci50b1N0cmluZyhleGVjKSkpOworICAgICAg
ICBKU1ZhbHVlIGpzVGVzdE9iakF0dHIgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4
ZWMsICJ0ZXN0T2JqQXR0ciIpKTsKKyAgICAgICAgaWYgKCFqc1Rlc3RPYmpBdHRyLmlzTnVsbCgp
ICYmICFqc1Rlc3RPYmpBdHRyLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICB0ZXN0SnNvbk9i
ai0+c2V0VGVzdE9iakF0dHIodG9UZXN0T2JqKGpzVGVzdE9iakF0dHIpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICB0ZXN0SnNvbk9iaiA9IGFkb3B0UmVmKHRvVGVzdEpTT05PYmooZXhlYy0+YXJn
dW1lbnQoMCkpKTsKKyAgICB9CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaW1wLT5tZXRo
b2RXaXRoQWxsb3dKU09OKHRlc3RKc29uT2JqKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworfQorCiAvLyBDb25zdGFudCBnZXR0ZXJzCiAKIEpTVmFsdWUganNU
ZXN0T2JqQ09OU1RfVkFMVUVfMChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApp
bmRleCAyMTY4YjNmNDJlOWQ0YjJjMDAwMzgwMjBhY2E2NmQxMzc3ZWFhOGQyLi4xNzZiM2VkYTM3
YWM4OWM5ZTk1ZGVmNWQ4NTg3NTQ1OGE1NWQyMGQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtMTIxLDYgKzEyMSw3IEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0FuCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
bGFzc01ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwo
SlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbGxvd0pTT04oSlNDOjpFeGVjU3RhdGUq
KTsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5SW50QXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RK
U09OT2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RKU09O
T2JqLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2VkZTg5NzIyODA1NzlhNDJhNDJhNDQ2ZTdlZmY5YjI1NTkwMDYz
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdEpTT05PYmouaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vpbmln
QGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworI2lm
IFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAorCitA
Y2xhc3MgRE9NVGVzdE9iajsKK0BjbGFzcyBOU1N0cmluZzsKKworQGludGVyZmFjZSBET01UZXN0
SlNPTk9iaiA6IERPTU9iamVjdAorLSAoaW50KWludEF0dHI7CistICh2b2lkKXNldEludEF0dHI6
KGludCluZXdJbnRBdHRyOworLSAobG9uZyBsb25nKWxvbmdMb25nQXR0cjsKKy0gKHZvaWQpc2V0
TG9uZ0xvbmdBdHRyOihsb25nIGxvbmcpbmV3TG9uZ0xvbmdBdHRyOworLSAodW5zaWduZWQgbG9u
ZyBsb25nKXVuc2lnbmVkTG9uZ0xvbmdBdHRyOworLSAodm9pZClzZXRVbnNpZ25lZExvbmdMb25n
QXR0cjoodW5zaWduZWQgbG9uZyBsb25nKW5ld1Vuc2lnbmVkTG9uZ0xvbmdBdHRyOworLSAoTlNT
dHJpbmcgKilzdHJpbmdBdHRyOworLSAodm9pZClzZXRTdHJpbmdBdHRyOihOU1N0cmluZyAqKW5l
d1N0cmluZ0F0dHI7CistIChET01UZXN0T2JqICopdGVzdE9iakF0dHI7CistICh2b2lkKXNldFRl
c3RPYmpBdHRyOihET01UZXN0T2JqICopbmV3VGVzdE9iakF0dHI7CitAZW5kCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNP
Tk9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEpTT05P
YmoubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2FmYjI0ZmY4ZDYwNGU5MGQxYTdjMTI5MDcxMzE3MjYxNDljY2I1
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdEpTT05PYmoubW0KQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkRPTUludGVybmFsLmgiCisKKyNp
bXBvcnQgIkRPTVRlc3RKU09OT2JqLmgiCisKKyNpbXBvcnQgIkRPTUJsb2JJbnRlcm5hbC5oIgor
I2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCisjaW1wb3J0ICJET01DU1NWYWx1ZUludGVy
bmFsLmgiCisjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJET01Ob2RlSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9N
VGVzdEpTT05PYmpJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NVGVzdE9iakludGVybmFsLmgiCisj
aW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgorI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmgiCisjaW1wb3J0ICJLVVJMLmgiCisjaW1wb3J0ICJUZXN0SlNPTk9iai5oIgorI2ltcG9y
dCAiVGVzdE9iai5oIgorI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQgIldlYkNvcmVP
YmpDRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDx3dGYvR2V0UHRyLmg+CisKKyNkZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PFdlYkNvcmU6
OlRlc3RKU09OT2JqKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVzdEpTT05P
YmoKKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFs
bG9jYXRlT25NYWluVGhyZWFkKFtET01UZXN0SlNPTk9iaiBjbGFzc10sIHNlbGYpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoX2ludGVybmFsKQorICAgICAgICBJTVBMLT5kZXJlZigpOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6ZQoreworICAgIGlmIChf
aW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGZpbmFsaXplXTsK
K30KKworLSAoaW50KWludEF0dHIKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPmludEF0dHIoKTsKK30KKworLSAodm9pZClzZXRJ
bnRBdHRyOihpbnQpbmV3SW50QXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRJbnRBdHRyKG5ld0ludEF0dHIpOworfQorCistIChs
b25nIGxvbmcpbG9uZ0xvbmdBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5sb25nTG9uZ0F0dHIoKTsKK30KKworLSAodm9p
ZClzZXRMb25nTG9uZ0F0dHI6KGxvbmcgbG9uZyluZXdMb25nTG9uZ0F0dHIKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2V0TG9uZ0xvbmdB
dHRyKG5ld0xvbmdMb25nQXR0cik7Cit9CisKKy0gKHVuc2lnbmVkIGxvbmcgbG9uZyl1bnNpZ25l
ZExvbmdMb25nQXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICByZXR1cm4gSU1QTC0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKTsKK30KKworLSAodm9p
ZClzZXRVbnNpZ25lZExvbmdMb25nQXR0cjoodW5zaWduZWQgbG9uZyBsb25nKW5ld1Vuc2lnbmVk
TG9uZ0xvbmdBdHRyCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIElNUEwtPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKG5ld1Vuc2lnbmVkTG9uZ0xvbmdB
dHRyKTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmdBdHRyCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5zdHJpbmdBdHRyKCk7
Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nQXR0cjooTlNTdHJpbmcgKiluZXdTdHJpbmdBdHRyCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPnNl
dFN0cmluZ0F0dHIobmV3U3RyaW5nQXR0cik7Cit9CisKKy0gKERPTVRlc3RPYmogKil0ZXN0T2Jq
QXR0cgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBy
ZXR1cm4ga2l0KFdURjo6Z2V0UHRyKElNUEwtPnRlc3RPYmpBdHRyKCkpKTsKK30KKworLSAodm9p
ZClzZXRUZXN0T2JqQXR0cjooRE9NVGVzdE9iaiAqKW5ld1Rlc3RPYmpBdHRyCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIEFTU0VSVChuZXdUZXN0T2Jq
QXR0cik7CisKKyAgICBJTVBMLT5zZXRUZXN0T2JqQXR0cihjb3JlKG5ld1Rlc3RPYmpBdHRyKSk7
Cit9CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdEpTT05PYmoqIGNvcmUoRE9NVGVzdEpTT05PYmog
KndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNv
cmU6OlRlc3RKU09OT2JqKj4od3JhcHBlci0+X2ludGVybmFsKSA6IDA7Cit9CisKK0RPTVRlc3RK
U09OT2JqICpraXQoV2ViQ29yZTo6VGVzdEpTT05PYmoqIHZhbHVlKQoreworICAgIHsgRE9NX0FT
U0VSVF9NQUlOX1RIUkVBRCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgp
OyB9OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKERPTVRl
c3RKU09OT2JqICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdEpTT05PYmogKndy
YXBwZXIgPSBbW0RPTVRlc3RKU09OT2JqIGFsbG9jXSBfaW5pdF07CisgICAgd3JhcHBlci0+X2lu
dGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KHZhbHVlKTsKKyAg
ICB2YWx1ZS0+cmVmKCk7CisgICAgYWRkRE9NV3JhcHBlcih3cmFwcGVyLCB2YWx1ZSk7CisgICAg
cmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEpTT05PYmpJbnRlcm5hbC5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SlNPTk9iakludGVybmFsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDdlZDQxNDk1MzIxMTQwYTFkNGUyMzRhZWE1MTgyOGQ5ZDgyOTc1YwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEpT
T05PYmpJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RKU09OT2JqLmg+CisKKyNpZiBXRUJLSVRfVkVS
U0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIGNsYXNzIFRlc3RKU09OT2JqOworfQorCitXZWJDb3JlOjpUZXN0SlNPTk9i
aiogY29yZShET01UZXN0SlNPTk9iaiAqKTsKK0RPTVRlc3RKU09OT2JqICpraXQoV2ViQ29yZTo6
VGVzdEpTT05PYmoqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0SlNPTk9iai5pZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0SlNPTk9iai5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUzYTdjNjM0NzVjOTZlMGE1MTAyNzI3MWJl
MmI5NWNlMzI2NTVhNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RKU09OT2JqLmlkbApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRo
aXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIHdp
dGggYW4gaW50ZXJmYWNlCisvLyB0aGF0IGhhcyB0aGUgIkFsbG93SlNPTiIgYXR0cmlidXRlIGFu
ZCBmb3IgdHJhY2tpbmcgY2hhbmdlcyBpbiBpdHMgb3VwdXQuCittb2R1bGUgdGVzdCB7CisgICAg
aW50ZXJmYWNlIFRlc3RKU09OT2JqIHsKKyAgICAgICAgLy8gQXR0cmlidXRlcworICAgICAgICBh
dHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAgICAgIGludEF0dHI7CisgICAgICAgIGF0dHJp
YnV0ZSBsb25nIGxvbmcgICAgICAgICAgICAgICAgbG9uZ0xvbmdBdHRyOworICAgICAgICBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nICAgICAgIHVuc2lnbmVkTG9uZ0xvbmdBdHRyOworICAg
ICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICAgICAgICAgIHN0cmluZ0F0dHI7CisgICAg
ICAgIGF0dHJpYnV0ZSBUZXN0T2JqICAgICAgICAgICAgICAgICAgdGVzdE9iakF0dHI7CisgICAg
fTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggODlk
ZmRmNzdlNDZiZGIzMDAyZjlkOTgyMjlkNDAxOWUzY2ExMTMyOS4uY2Q0MWUxYTAxOGMxNTNjZGIw
ZGYwM2VhYWNhZGEwYzg5YTg0YThkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGwKQEAgLTE0Miw2ICsxNDIsMTEgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICBb
Q2xhc3NNZXRob2RdIHZvaWQgY2xhc3NNZXRob2QoKTsKICAgICAgICAgW0NsYXNzTWV0aG9kXSBs
b25nIGNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGluIFtPcHRpb25hbF0gbG9uZyBhcmcpOwogCisj
aWYgZGVmaW5lZChURVNUSU5HX1Y4KSB8fCBkZWZpbmVkKFRFU1RJTkdfSlMpCisgICAgICAgIC8v
IEFsbG93SlNPTgorICAgICAgICB2b2lkICAgIG1ldGhvZFdpdGhBbGxvd0pTT04oaW4gW0FsbG93
SlNPTl0gVGVzdEpTT05PYmogdGVzdEpzb25PYmopOworI2VuZGlmCisKICAgICAgICAgLy8gT2Jq
ZWN0aXZlQyByZXNlcnZlZCB3b3Jkcy4KICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcg
ICAgICBkZXNjcmlwdGlvbjsKICAgICAgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICBp
ZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEpT
T05PYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SlNPTk9i
ai5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWFjNzBmYWI4YTE4YzllMDMzYjgwMDQ3YzI1NDcxMzM3ZDg1NmYz
YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEpTT05PYmouY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4VGVzdEpTT05PYmouaCIKKworI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNp
bmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgor
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0Lmgi
CisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4VGVzdE9iai5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhU
ZXN0SlNPTk9iajo6aW5mbyA9IHsgVjhUZXN0SlNPTk9iajo6R2V0VGVtcGxhdGUsIFY4VGVzdEpT
T05PYmo6OmRlcmVmT2JqZWN0LCAwIH07CisKK25hbWVzcGFjZSBUZXN0SlNPTk9iakludGVybmFs
IHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQorCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGludEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFU
UygiRE9NLlRlc3RKU09OT2JqLmludEF0dHIuX2dldCIpOworICAgIFRlc3RKU09OT2JqKiBpbXAg
PSBWOFRlc3RKU09OT2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjg6
OkludGVnZXI6Ok5ldyhpbXAtPmludEF0dHIoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGludEF0dHJB
dHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0SlNPTk9iai5pbnRBdHRyLl9zZXQiKTsKKyAgICBUZXN0SlNPTk9iaiogaW1wID0g
VjhUZXN0SlNPTk9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgaW50IHYgPSB0b0lu
dDMyKHZhbHVlKTsKKyAgICBpbXAtPnNldEludEF0dHIodik7CisgICAgcmV0dXJuOworfQorCitz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdMb25nQXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdEpTT05PYmoubG9uZ0xvbmdBdHRyLl9nZXQiKTsKKyAgICBU
ZXN0SlNPTk9iaiogaW1wID0gVjhUZXN0SlNPTk9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhzdGF0aWNfY2FzdDxkb3VibGU+KGltcC0+bG9u
Z0xvbmdBdHRyKCkpKTsKK30KKworc3RhdGljIHZvaWQgbG9uZ0xvbmdBdHRyQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdEpT
T05PYmoubG9uZ0xvbmdBdHRyLl9zZXQiKTsKKyAgICBUZXN0SlNPTk9iaiogaW1wID0gVjhUZXN0
SlNPTk9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgbG9uZyBsb25nIHYgPSB0b0lu
dDY0KHZhbHVlKTsKKyAgICBpbXAtPnNldExvbmdMb25nQXR0cihXVEY6OmdldFB0cih2KSk7Cisg
ICAgcmV0dXJuOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuc2lnbmVkTG9u
Z0xvbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0SlNPTk9iai51
bnNpZ25lZExvbmdMb25nQXR0ci5fZ2V0Iik7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IFY4VGVz
dEpTT05PYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2ODo6TnVtYmVy
OjpOZXcoc3RhdGljX2Nhc3Q8ZG91YmxlPihpbXAtPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpKTsK
K30KKworc3RhdGljIHZvaWQgdW5zaWduZWRMb25nTG9uZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0SlNPTk9iai51
bnNpZ25lZExvbmdMb25nQXR0ci5fc2V0Iik7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IFY4VGVz
dEpTT05PYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyB2ID0gdG9JbnQ2NCh2YWx1ZSk7CisgICAgaW1wLT5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihX
VEY6OmdldFB0cih2KSk7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RK
U09OT2JqLnN0cmluZ0F0dHIuX2dldCIpOworICAgIFRlc3RKU09OT2JqKiBpbXAgPSBWOFRlc3RK
U09OT2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1w
LT5zdHJpbmdBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCBzdHJpbmdBdHRyQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdEpT
T05PYmouc3RyaW5nQXR0ci5fc2V0Iik7CisgICAgVGVzdEpTT05PYmoqIGltcCA9IFY4VGVzdEpT
T05PYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFNUUklOR19UT19WOFBBUkFNRVRF
Ul9FWENFUFRJT05fQkxPQ0tfVk9JRChWOFBhcmFtZXRlcjw+LCB2LCB2YWx1ZSk7CisgICAgaW1w
LT5zZXRTdHJpbmdBdHRyKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00u
VGVzdEpTT05PYmoudGVzdE9iakF0dHIuX2dldCIpOworICAgIFRlc3RKU09OT2JqKiBpbXAgPSBW
OFRlc3RKU09OT2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdG9WOChp
bXAtPnRlc3RPYmpBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0T2JqQXR0ckF0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRl
c3RKU09OT2JqLnRlc3RPYmpBdHRyLl9zZXQiKTsKKyAgICBUZXN0SlNPTk9iaiogaW1wID0gVjhU
ZXN0SlNPTk9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgVGVzdE9iaiogdiA9IFY4
VGVzdE9iajo6SGFzSW5zdGFuY2UodmFsdWUpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkgOiAwOworICAgIGltcC0+c2V0VGVzdE9iakF0
dHIoV1RGOjpnZXRQdHIodikpOworICAgIHJldHVybjsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dEpTT05PYmpJbnRlcm5hbAorCitzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0SlNP
Tk9iakF0dHJzW10gPSB7CisgICAgLy8gQXR0cmlidXRlICdpbnRBdHRyJyAoVHlwZTogJ2F0dHJp
YnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJpbnRBdHRyIiwgVGVzdEpTT05PYmpJbnRlcm5hbDo6
aW50QXR0ckF0dHJHZXR0ZXIsIFRlc3RKU09OT2JqSW50ZXJuYWw6OmludEF0dHJBdHRyU2V0dGVy
LCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVG
QVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8q
IG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ2xvbmdMb25nQXR0cicgKFR5cGU6
ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsibG9uZ0xvbmdBdHRyIiwgVGVzdEpTT05P
YmpJbnRlcm5hbDo6bG9uZ0xvbmdBdHRyQXR0ckdldHRlciwgVGVzdEpTT05PYmpJbnRlcm5hbDo6
bG9uZ0xvbmdBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRl
ICd1bnNpZ25lZExvbmdMb25nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQor
ICAgIHsidW5zaWduZWRMb25nTG9uZ0F0dHIiLCBUZXN0SlNPTk9iakludGVybmFsOjp1bnNpZ25l
ZExvbmdMb25nQXR0ckF0dHJHZXR0ZXIsIFRlc3RKU09OT2JqSW50ZXJuYWw6OnVuc2lnbmVkTG9u
Z0xvbmdBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNj
ZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1
dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdz
dHJpbmdBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJzdHJpbmdB
dHRyIiwgVGVzdEpTT05PYmpJbnRlcm5hbDo6c3RyaW5nQXR0ckF0dHJHZXR0ZXIsIFRlc3RKU09O
T2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRp
Y19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQ
cm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAv
LyBBdHRyaWJ1dGUgJ3Rlc3RPYmpBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycp
CisgICAgeyJ0ZXN0T2JqQXR0ciIsIFRlc3RKU09OT2JqSW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0
ckdldHRlciwgVGVzdEpTT05PYmpJbnRlcm5hbDo6dGVzdE9iakF0dHJBdHRyU2V0dGVyLCAwIC8q
IG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCks
IHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGlu
c3RhbmNlICovfSwKK307CitzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IENvbmZpZ3VyZVY4VGVzdEpTT05PYmpUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZGVzYykKK3sKKyAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gZGVm
YXVsdFNpZ25hdHVyZSA9IGNvbmZpZ3VyZVRlbXBsYXRlKGRlc2MsICJUZXN0SlNPTk9iaiIsIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RKU09OT2JqOjppbnRl
cm5hbEZpZWxkQ291bnQsCisgICAgICAgIFRlc3RKU09OT2JqQXR0cnMsIHNpemVvZihUZXN0SlNP
Tk9iakF0dHJzKSAvIHNpemVvZigqVGVzdEpTT05PYmpBdHRycyksCisgICAgICAgIDAsIDApOwor
ICAgIAorCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCisgICAgZGVzYy0+U2V0KGdl
dFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOworICAgIHJldHVybiBkZXNj
OworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SlNPTk9i
ajo6R2V0UmF3VGVtcGxhdGUoKQoreworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0SlNPTk9ialJhd0NhY2hlID0gY3JlYXRlUmF3VGVtcGxhdGUo
KTsKKyAgICByZXR1cm4gVjhUZXN0SlNPTk9ialJhd0NhY2hlOworfQorCit2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SlNPTk9iajo6R2V0VGVtcGxhdGUoKQorewor
ICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SlNP
Tk9iakNhY2hlID0gQ29uZmlndXJlVjhUZXN0SlNPTk9ialRlbXBsYXRlKEdldFJhd1RlbXBsYXRl
KCkpOworICAgIHJldHVybiBWOFRlc3RKU09OT2JqQ2FjaGU7Cit9CisKK1Rlc3RKU09OT2JqKiBW
OFRlc3RKU09OT2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0SlNPTk9iaio+KG9iamVjdC0+R2V0UG9p
bnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7Cit9CisKK2Jv
b2wgVjhUZXN0SlNPTk9iajo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
KQoreworICAgIHJldHVybiBHZXRSYXdUZW1wbGF0ZSgpLT5IYXNJbnN0YW5jZSh2YWx1ZSk7Cit9
CisKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RKU09OT2JqOjp3cmFwKFRlc3RKU09O
T2JqKiBpbXBsKQoreworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKKyAgICBW
OFByb3h5KiBwcm94eSA9IDA7CisgICAgICAgIHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5n
ZXQoaW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4
T2JqZWN0KHByb3h5LCAmaW5mbywgaW1wbCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKKworICAgIGltcGwtPnJlZigpOworICAgIGdldERPTU9i
amVjdE1hcCgpLnNldChpbXBsLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBw
ZXIpKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoUGFzc1JlZlB0cjxUZXN0SlNPTk9iaiA+IGltcGwpCit7CisgICAgcmV0dXJuIHRvVjgoaW1w
bC5nZXQoKSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RKU09OT2JqKiBp
bXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAg
cmV0dXJuIFY4VGVzdEpTT05PYmo6OndyYXAoaW1wbCk7Cit9CisKK3ZvaWQgVjhUZXN0SlNPTk9i
ajo6ZGVyZWZPYmplY3Qodm9pZCogb2JqZWN0KQoreworICAgIHN0YXRpY19jYXN0PFRlc3RKU09O
T2JqKj4ob2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SlNPTk9iai5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SlNPTk9iai5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA5OTZmYWU2M2QxYzk5NGI1Nzk3M2YzMWI1NGY0ZTc3YjExZTZlZWIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RKU09OT2Jq
LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpZm5kZWYgVjhUZXN0
SlNPTk9ial9oCisjZGVmaW5lIFY4VGVzdEpTT05PYmpfaAorCisjaW5jbHVkZSAiVGVzdEpTT05P
YmouaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKKyNpbmNsdWRlICJ3dGYvdGV4dC9T
dHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFY4VGVzdEpTT05PYmogeworCitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
KTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJh
d1RlbXBsYXRlKCk7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyBUZXN0SlNPTk9iaiogdG9OYXRpdmUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcChUZXN0SlNPTk9iaiopOworICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsK
KyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CisgICAgc3RhdGljIGNvbnN0IGludCBp
bnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsg
MDsKK307CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RKU09OT2JqKik7Cit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPFRlc3RKU09OT2JqID4pOworfQorCisj
ZW5kaWYgLy8gVjhUZXN0SlNPTk9ial9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCA4ZjgyNGQ5Njk5NDU2MDAxOTRhMTAwMjhiOTZkOWVj
OWE2NTFlYjRiLi5hODBlNmVhM2UzZjdhMDcyYjY0NTM5NWQxZjk5YTM4OGVmNDE2MWQ1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSAiVGVzdEpTT05PYmouaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgpAQCAt
MzUsNiArMzYsNyBAQAogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAi
VjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VGVzdENhbGxiYWNrLmgiCisjaW5jbHVkZSAiVjhUZXN0
SlNPTk9iai5oIgogI2luY2x1ZGUgIlY4bG9nLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0xMDIwLDYgKzEwMjIsNDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzc01ldGhvZFdpdGhPcHRpb25hbENhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMKICAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhUZXN0T2JqOjpj
bGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBtZXRob2RXaXRoQWxsb3dKU09OQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhBbGxvd0pTT04i
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OworICAgIFJlZlB0cjxUZXN0SlNPTk9iaj4gdGVzdEpzb25PYmo7CisgICAgaWYgKCFpc1VuZGVm
aW5lZE9yTnVsbChhcmdzWzBdKSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpICYmICFWOFRlc3RKU09O
T2JqOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkgeworICAgICAgICBFWENFUFRJT05fQkxPQ0sodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Piwgb2JqZWN0LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KGFyZ3NbMF0pKTsKKyAgICAgICAgdGVzdEpzb25PYmogPSBUZXN0SlNPTk9iajo6Y3JlYXRlKCk7
CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4SW50QXR0ciA9IG9iamVjdC0+R2V0KHY4
OjpTdHJpbmc6Ok5ldygiaW50QXR0ciIpKTsKKyAgICAgICAgaWYgKCF2OEludEF0dHIuSXNFbXB0
eSgpICYmICFpc1VuZGVmaW5lZE9yTnVsbCh2OEludEF0dHIpKSB7CisgICAgICAgICAgICBFWENF
UFRJT05fQkxPQ0soaW50LCBpbnRBdHRyLCB0b0ludDMyKHY4SW50QXR0cikpOworICAgICAgICAg
ICAgdGVzdEpzb25PYmotPnNldEludEF0dHIoaW50QXR0cik7CisgICAgICAgIH0KKyAgICAgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhMb25nTG9uZ0F0dHIgPSBvYmplY3QtPkdldCh2ODo6U3Ry
aW5nOjpOZXcoImxvbmdMb25nQXR0ciIpKTsKKyAgICAgICAgaWYgKCF2OExvbmdMb25nQXR0ci5J
c0VtcHR5KCkgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKHY4TG9uZ0xvbmdBdHRyKSkgeworICAgICAg
ICAgICAgRVhDRVBUSU9OX0JMT0NLKGxvbmcgbG9uZywgbG9uZ0xvbmdBdHRyLCB0b0ludDY0KHY4
TG9uZ0xvbmdBdHRyKSk7CisgICAgICAgICAgICB0ZXN0SnNvbk9iai0+c2V0TG9uZ0xvbmdBdHRy
KGxvbmdMb25nQXR0cik7CisgICAgICAgIH0KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
djhVbnNpZ25lZExvbmdMb25nQXR0ciA9IG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygidW5z
aWduZWRMb25nTG9uZ0F0dHIiKSk7CisgICAgICAgIGlmICghdjhVbnNpZ25lZExvbmdMb25nQXR0
ci5Jc0VtcHR5KCkgJiYgIWlzVW5kZWZpbmVkT3JOdWxsKHY4VW5zaWduZWRMb25nTG9uZ0F0dHIp
KSB7CisgICAgICAgICAgICBFWENFUFRJT05fQkxPQ0sodW5zaWduZWQgbG9uZyBsb25nLCB1bnNp
Z25lZExvbmdMb25nQXR0ciwgdG9JbnQ2NCh2OFVuc2lnbmVkTG9uZ0xvbmdBdHRyKSk7CisgICAg
ICAgICAgICB0ZXN0SnNvbk9iai0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodW5zaWduZWRMb25n
TG9uZ0F0dHIpOworICAgICAgICB9CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4U3Ry
aW5nQXR0ciA9IG9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygic3RyaW5nQXR0ciIpKTsKKyAg
ICAgICAgaWYgKCF2OFN0cmluZ0F0dHIuSXNFbXB0eSgpICYmICFpc1VuZGVmaW5lZE9yTnVsbCh2
OFN0cmluZ0F0dHIpKSB7CisgICAgICAgICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBU
SU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0cmluZ0F0dHIsIHY4U3RyaW5nQXR0cik7CisgICAg
ICAgICAgICB0ZXN0SnNvbk9iai0+c2V0U3RyaW5nQXR0cihzdHJpbmdBdHRyKTsKKyAgICAgICAg
fQorICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFRlc3RPYmpBdHRyID0gb2JqZWN0LT5H
ZXQodjg6OlN0cmluZzo6TmV3KCJ0ZXN0T2JqQXR0ciIpKTsKKyAgICAgICAgaWYgKCF2OFRlc3RP
YmpBdHRyLklzRW1wdHkoKSAmJiAhaXNVbmRlZmluZWRPck51bGwodjhUZXN0T2JqQXR0cikpIHsK
KyAgICAgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgdGVzdE9iakF0dHIsIFY4VGVz
dE9iajo6SGFzSW5zdGFuY2UodjhUZXN0T2JqQXR0cikgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhUZXN0T2JqQXR0cikpIDogMCk7CisgICAgICAg
ICAgICB0ZXN0SnNvbk9iai0+c2V0VGVzdE9iakF0dHIodGVzdE9iakF0dHIpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICBFWENFUFRJT05fQkxPQ0soVGVzdEpTT05PYmoqLCB0bXBf
dGVzdEpzb25PYmosIFY4VGVzdEpTT05PYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhUZXN0
SlNPTk9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkg
OiAwKTsKKyAgICAgICB0ZXN0SnNvbk9iaiA9IGFkb3B0UmVmKHRtcF90ZXN0SnNvbk9iaik7Cisg
ICAgfQorICAgIGltcC0+bWV0aG9kV2l0aEFsbG93SlNPTih0ZXN0SnNvbk9iaik7CisgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0T2Jq
SW50ZXJuYWwKIAogc3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdE9iakF0dHJzW10g
PSB7CkBAIC0xMTk1LDYgKzEyMzgsMTIgQEAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RPYmpUZW1wbGF0ZSh2ODo6UGVyc2kKICAgICBw
cm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbiIpLCB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6Y3VzdG9tQXJnc0FuZEV4Y2Vw
dGlvbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgY3VzdG9tQXJnc0FuZEV4Y2Vw
dGlvblNpZ25hdHVyZSkpOwogICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNsYXNzTWV0
aG9kIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9iakludGVybmFsOjpjbGFzc01l
dGhvZENhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OkxvY2FsPHY4OjpTaWdu
YXR1cmU+KCkpKTsKICAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjbGFzc01ldGhvZFdp
dGhPcHRpb25hbCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6
Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWxDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCks
IHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpKSk7CisKKyAgICAvLyBDdXN0b20gU2lnbmF0dXJl
ICdtZXRob2RXaXRoQWxsb3dKU09OJworICAgIGNvbnN0IGludCBtZXRob2RXaXRoQWxsb3dKU09O
QXJnYyA9IDE7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbWV0aG9kV2l0
aEFsbG93SlNPTkFyZ3ZbbWV0aG9kV2l0aEFsbG93SlNPTkFyZ2NdID0geyBWOFRlc3RKU09OT2Jq
OjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRo
b2RXaXRoQWxsb3dKU09OU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhv
ZFdpdGhBbGxvd0pTT05BcmdjLCBtZXRob2RXaXRoQWxsb3dKU09OQXJndik7CisgICAgcHJvdG8t
PlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFdpdGhBbGxvd0pTT04iKSwgdjg6OkZ1bmN0aW9u
VGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhBbGxvd0pTT05DYWxsYmFj
aywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG1ldGhvZFdpdGhBbGxvd0pTT05TaWduYXR1cmUp
KTsKICAgICBiYXRjaENvbmZpZ3VyZUNvbnN0YW50cyhkZXNjLCBwcm90bywgVGVzdE9iakNvbnN0
cywgc2l6ZW9mKFRlc3RPYmpDb25zdHMpIC8gc2l6ZW9mKCpUZXN0T2JqQ29uc3RzKSk7CiAKICAg
ICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFw
aS9EaXJlY3RvcnlFbnRyeS5pZGwgYi9XZWJDb3JlL2ZpbGVhcGkvRGlyZWN0b3J5RW50cnkuaWRs
CmluZGV4IGFjMzBjN2Y4ODMzN2ViM2Q4NjJjNTVmODQ2ZDkyN2YwMGQ1ZmFhMjQuLjE4ODYzZDNl
ZWZhY2IzMWRjMGJhODMwMmM2ZDljNzZlZDdkNjg5YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmls
ZWFwaS9EaXJlY3RvcnlFbnRyeS5pZGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeUVu
dHJ5LmlkbApAQCAtMzUsNyArMzUsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIEdlbmVy
YXRlVG9KUwogICAgIF0gRGlyZWN0b3J5RW50cnkgOiBFbnRyeSB7CiAgICAgICAgIERpcmVjdG9y
eVJlYWRlciBjcmVhdGVSZWFkZXIoKTsKLSAgICAgICAgdm9pZCBnZXRGaWxlKGluIERPTVN0cmlu
ZyBwYXRoLCBpbiBbT3B0aW9uYWxdIEZsYWdzIG9wdGlvbnMsIGluIFtPcHRpb25hbCwgQ2FsbGJh
Y2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNr
XSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwotICAgICAgICB2b2lkIGdldERpcmVjdG9y
eShpbiBET01TdHJpbmcgcGF0aCwgaW4gW09wdGlvbmFsXSBGbGFncyBvcHRpb25zLCBpbiBbT3B0
aW9uYWwsIENhbGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09wdGlv
bmFsLCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKworICAgICAgICB2
b2lkIGdldEZpbGUoaW4gRE9NU3RyaW5nIHBhdGgsIGluIFtPcHRpb25hbCwgQWxsb3dKU09OXSBG
bGFncyBmbGFncywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxs
YmFjayk7CisgICAgICAgIHZvaWQgZ2V0RGlyZWN0b3J5KGluIERPTVN0cmluZyBwYXRoLCBpbiBb
T3B0aW9uYWwsIEFsbG93SlNPTl0gRmxhZ3MgZmxhZ3MsIGluIFtPcHRpb25hbCwgQ2FsbGJhY2td
IEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBF
cnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgIH07CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>