<?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>217390</bug_id>
          
          <creation_ts>2020-10-06 09:44:39 -0700</creation_ts>
          <short_desc>Refactor TestOptions code in WebKitTestRunner to make it easier to rationalize and extend</short_desc>
          <delta_ts>2020-10-08 17:45:34 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=217435</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=217425</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>217297</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
    
    <cc>rackler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1695184</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-06 09:44:39 -0700</bug_when>
    <thetext>Refactor TestOptions code in WebKitTestRunner to make it easier to rationalize and extend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695187</commentid>
    <comment_count>1</comment_count>
      <attachid>410649</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-06 09:52:05 -0700</bug_when>
    <thetext>Created attachment 410649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695423</commentid>
    <comment_count>2</comment_count>
      <attachid>410649</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-06 18:09:21 -0700</bug_when>
    <thetext>Comment on attachment 410649
Patch

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

I approve the idea of using the standard library in our test tools. However I don’t know what specifically motivates doing more of that here while still having so much code using WTF.

&gt; Tools/WebKitTestRunner/Options.cpp:116
&gt; +static bool parseFeature(String featureString, std::unordered_map&lt;std::string, bool&gt;&amp; features)

Funny that this takes String, not StringView or const String&amp;

&gt; Tools/WebKitTestRunner/TestOptions.cpp:101
&gt; +enum class KeyType {

Perhaps : uint8_t?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695450</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-06 20:40:59 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 410649 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=410649&amp;action=review
&gt; 
&gt; I approve the idea of using the standard library in our test tools. However
&gt; I don’t know what specifically motivates doing more of that here while still
&gt; having so much code using WTF.

I&apos;m mostly trying to ween WebKitTestRunner off of WTF where there are stdlib equivalents we can use, but I haven&apos;t been super consistent. Going to do another pass where I do just that.

&gt; 
&gt; &gt; Tools/WebKitTestRunner/Options.cpp:116
&gt; &gt; +static bool parseFeature(String featureString, std::unordered_map&lt;std::string, bool&gt;&amp; features)
&gt; 
&gt; Funny that this takes String, not StringView or const String&amp;

I made it take std::string_view :).

&gt; 
&gt; &gt; Tools/WebKitTestRunner/TestOptions.cpp:101
&gt; &gt; +enum class KeyType {
&gt; 
&gt; Perhaps : uint8_t?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695451</commentid>
    <comment_count>4</comment_count>
      <attachid>410730</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-06 20:41:11 -0700</bug_when>
    <thetext>Created attachment 410730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695455</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-06 21:20:24 -0700</bug_when>
    <thetext>Committed r268115: &lt;https://trac.webkit.org/changeset/268115&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410730.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695456</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-06 21:21:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/70031230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695642</commentid>
    <comment_count>7</comment_count>
    <who name="Karl Rackler">rackler</who>
    <bug_when>2020-10-07 13:10:31 -0700</bug_when>
    <thetext>Reverted r268115 for reason:

This reverts commit r268115 while investigating ews test failure.

Committed r268143: &lt;https://trac.webkit.org/changeset/268143&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695709</commentid>
    <comment_count>8</comment_count>
      <attachid>410790</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-07 15:17:28 -0700</bug_when>
    <thetext>Created attachment 410790
Path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695915</commentid>
    <comment_count>9</comment_count>
      <attachid>410848</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-08 09:04:04 -0700</bug_when>
    <thetext>Created attachment 410848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695960</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-08 10:54:45 -0700</bug_when>
    <thetext>I do not understand this iOS-WebKit2 failure. What in my change is affecting anti-aliasing results?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695998</commentid>
    <comment_count>11</comment_count>
      <attachid>410872</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-08 12:40:21 -0700</bug_when>
    <thetext>Created attachment 410872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696053</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-08 15:35:38 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 410872 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696073</commentid>
    <comment_count>13</comment_count>
      <attachid>410896</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-08 17:05:21 -0700</bug_when>
    <thetext>Created attachment 410896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696087</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-08 17:45:34 -0700</bug_when>
    <thetext>Committed r268238: &lt;https://trac.webkit.org/changeset/268238&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410896.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410649</attachid>
            <date>2020-10-06 09:52:05 -0700</date>
            <delta_ts>2020-10-06 20:41:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217390-20201006095204.patch</filename>
            <type>text/plain</type>
            <size>100957</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODA1MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1OSBAQAorMjAyMC0xMC0wNiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgVGVzdE9wdGlvbnMgY29kZSBpbiBXZWJLaXRUZXN0UnVubmVyIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHJhdGlvbmFsaXplIGFuZCBleHRlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzM5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9ycyBUZXN0T3B0aW9ucyBj
b2RlIGluIFdlYktpdFRlc3RSdW5uZXIgdG8gbWFrZSBpdCBjbGVhciBob3cgb3B0aW9ucyBjb21p
bmcgaW4gYXQgCisgICAgICAgIGRpZmZlcmVudCBsZXZlbHMgYXJlIHRyZWF0ZWQgYW5kIHdoYXQg
cHJlY2VkZW5jZSBlYWNoIGhhcy4gVGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgor
ICAgICAgICAKKyAgICAgICAgLSBHbG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RS
dW5uZXIgdmlhIHRoZSBjb21tYW5kIGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAg
IC0gSGFyZGNvZGVkIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5n
IHJ1biAoaG9wZWZ1bGx5IHdlIGNhbiByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNv
ZGVkIHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1h
Y09TIGZvciB1c2VUaHJlYWRlZFNjcm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSB0
aGUgdGVzdCBoZWFkZXJzIHdpdGhpbiB0aGUgdGVzdCBpdHNlbGYuCisgICAgICAgIC0gRmluYWxs
eSwgYSBzZWNvbmQgY2hhbmNlIGZvciBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChj
dXJyZW5seSBvbmx5IHVzZWQgdGhlIENvY29hIHBvcnRzCisgICAgICAgICAgZm9yIHNldHRpbmcg
ZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gYW5kIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5k
b3dPcGVuIGJhc2VkIG9uIE5TVXNlckRlZmF1bHRzLikKKworICAgICAgICBUbyBtYWtlIHRoaXMg
Y2hhbmdlIHdvcmssIGFuZCBwYXZlIHRoZSB3YXkgZm9yIGZ1dHVyZSBhdXRvZ2VuZXJhdGlvbiBv
ZiBzb21lIG9mIHRoZXNlIHRlc3Qgb3B0aW9ucywKKyAgICAgICAgdGhlIFRlc3RPcHRpb25zIHN0
cnVjdCAobm93IGNsYXNzKSB3YXMgb3ZlcmhhdWxlZC4gSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBz
dGF0ZSBpdHNlbGYsIFRlc3RPcHRpb25zCisgICAgICAgIGlzIG5vdyBhbiBpbW11dGFibGUgb3du
ZXIgb2YgYSBUZXN0RmVhdHVyZXMgb2JqZWN0LiBUZXN0RmVhdHVyZXMgaXMgYSBzaW1wbGUgc3Ry
dWN0IHRoYXQgY29udGFpbnMgbWFwcyAKKyAgICAgICAgb2Ygb3B0aW9uIGtleXMgdG8gdmFsdWVz
IGFuZCBjYW4gYmUgbWVyZ2VkIHdpdGggb3RoZXIgVGVzdEZlYXR1cmVzIG9iamVjdHMuIFRlc3RP
cHRpb25zIHRha2VzIGEgCisgICAgICAgIFRlc3RGZWF0dXJlcyBhdCBjb25zdHJ1Y3Rpb24sIGFu
ZCBleHBvc2VzIGdldHRlcnMgZm9yIGFsbCBrZXlzLCBhcyB3ZWxsIGFzIGRlZmF1bHRzIGZvciB3
aGVuIHRoZXkgYXJlCisgICAgICAgIG5vdCBpbiB0aGUgbWFwcy4gSW4gZnV0dXJlIGNoYW5nZXMs
IEkgd291bGQgbGlrZSB0byByZW1vdmUgbWFueSBvZiB0aGVzZSAodGhlIG9uZXMgdGhhdCBjb3Jy
ZXNwb25kCisgICAgICAgIHdpdGggV2ViS2l0IHByZWZlcmVuY2VzIGFueXdheSkgYW5kIGhhdmUg
dGhlIGtleXMgYW5kIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGRlYWx0IHdpdGggYnkgV0tQcmVmZXJl
bmNlcy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHA6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmg6CisgICAgICAgIFN3aXRjaCB0byBzdGQ6OnVu
b3JkZXJlZF9tYXAgZm9yIGNvbnNpc3RlbmN5IGFuZCBlYXNlIG9mIGNvbnZlcnNpb24uCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoV1RS
OjpQbGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMgY29uc3QpOgorICAgICAgICBV
cGRhdGUgdG8gY2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6dG9XSyk6Cisg
ICAgICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAgQWRkIGNvbnZlcnNpb25zIGZvciBz
dGQ6OnN0cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICBSZXBsYWNlIHNv
bWUgYm9vbHMgd2l0aCBhIG5ldyBnbG9iYWwgVGVzdEZlYXR1cmVzIGluc3RhbmNlIHRoYXQgZm9y
bXMgdGhlIGJhc2Ugb2YKKyAgICAgICAgYWxsIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAg
IAorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJh
dGlvbiBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VD
b25maWd1cmF0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZp
ZXdXaXRoT3B0aW9ucyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3
U3VwcG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpy
ZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICBVcGRhdGUg
dG8gY2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwpOgorICAgICAgICBFeHBvc2UgYXMgYSBz
dGF0aWMgbWVtYmVyIGZ1bmN0aW9uIG9uIFRlc3RDb250cm9sbGVyIGZvciB1c2UgaW4gb3RoZXIg
ZmlsZXMuCisgICAgICAgIAorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlv
bnNGb3JUZXN0IGNvbnN0KToKKyAgICAgICAgUmV3b3JrIHRvIGJlIGEgc2VxdWVuY2Ugb2YgVGVz
dEZlYXR1cmVzIG1lcmdlcy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
Ojp1cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3
IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmNyZWF0ZVRl
c3RVUkwpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFz
UmVsYXRpdmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVh
ZGVyVmFsdWVBc1VSTCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnVwZGF0ZVRlc3RPcHRpb25z
RnJvbVRlc3RIZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1BZGRUZXN0T3B0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmVkIFRl
c3RPcHRpb25zIHBhcnNpbmcgdG8gVGVzdE9wdGlvbnMuY3BwCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRp
b246OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOgorICAgICAgICBVcGRhdGUgdG8gY2Fs
bCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0T3B0aW9ucy5oOgorICAgICAgICBSZXdvcmtzIFRlc3RPcHRpb25zIHRvIGJlIGFuIGlt
bXV0YWJsZSBvd25lciBvZiBhIFRlc3RGZWF0dXJlcyBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2V0Cisg
ICAgICAgIG9mIG1hcHMgdGhhdCBtYXAgZmVhdHVyZSBzdHJpbmcga2V5cywgdG8gdmFsdWVzIG9m
IHR5cGUgYm9vbCwgZG91YmxlLCBzdHJpbmcgb3Igc3RyaW5nIHZlY3Rvci4KKworICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjptZXJnZSk6
CisgICAgICAgIE1lcmdlcyB0d28gVGVzdEZlYXR1cmVzIG9iamVjdHMuIElmIGJvdGggY29udGFp
biB0aGUgc2FtZSBrZXksIHRoZSAnYWRkaXRpb25hbCcKKyAgICAgICAgVGVzdEZlYXR1cmVzIG92
ZXJyaWRlcyB0aGUgJ2Jhc2UnIFRlc3RGZWF0dXJlcy4KKworICAgICAgICAoV1RSOjpkdW1wRmVh
dHVyZXMpOgorICAgICAgICBIZWxwZXIgdG8gZHVtcCBmZWF0dXJlcyB0byBzdGRlcnIsIHVzZWZ1
bCBmb3IgZGVidWdnaW5nLgorCisgICAgICAgIChXVFI6OmtleVR5cGUpOgorICAgICAgICBIZWxw
ZXIgZm9yIHBhcnNlciB0byBrbm93IHdoaWNoIHZhbHVlIHBhcnNlciB0byB1c2UuCisKKyAgICAg
ICAgKFdUUjo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKToKKyAgICAgICAgKFdUUjo6cGFy
c2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6CisgICAgICAgIChXVFI6OnBh
cnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOgorICAgICAgICBWYWx1ZSBwYXJzZXJzIG1v
dmVkIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwCisKKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVh
ZGVyKToKKyAgICAgICAgSGVhZGVyIHBhcnNlciBtb3ZlZCBmcm9tIFRlc3RDb250cm9sbGVyLmNw
cC4gVXBkYXRlIHRvIG5vdyByZXR1cm4KKyAgICAgICAgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGFu
ZCB1c2Uga2V5VHlwZSB0byBwaWNrIHZhbHVlIHBhcnNlciByYXRoZXIKKyAgICAgICAgdGhhbiBp
bmxpbmluZyB0aGUgaWYgc3RhdGVtZW50cy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmhhcmRj
b2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KToKKyAgICAgICAgTW92ZWQgZnJvbSB0aGUg
VGVzdE9wdGlvbnMgY29udHJ1Y3RvciBhbmQgcmV3b3JrZWQgdG8gcmV0dXJuIGEgVGVzdEZlYXR1
cmVzCisgICAgICAgIG9iamVjdCB0byBiZSBtZXJnZWQgYnkgdGhlIGNhbGxlci4KKworICAgICAg
ICAoV1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBD
cmVhdGVzIGEgVGVzdEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50
IHRlc3QuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVy
Q29jb2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmlj
RmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2Vk
IHRvIG5vdyByZXR1cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQs
IHJhdGhlciB0aGFuIHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJs
ZUluQXBwQnJvd3NlclByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxs
UnVuVGVzdAorICAgICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
Zmllcik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0Nv
bnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVw
ZGF0ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToK
KyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVy
ZURlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgTW92ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQg
aXMgbW9yZSBhcHByb3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5n
IGFzIHRoYXQgaXMgZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAg
IChXVFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRl
IHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RP
cHRpb25zRm9yVGVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VS
ZW1vdGVMYXllclRyZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRv
bmUgZ2xvYmFsbHksCisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9s
bGluZyB0byB1c2UgYm9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93
aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9y
VGVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUu
CisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRh
dGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgVXBkYXRlZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0
aW9uc0ZvclRlc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2ln
bmF0dXJlLgorCiAyMDIwLTEwLTA2ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjY3Mzk5KTogW1dQRV0gQnVpbGQgYnJv
a2VuIHdpdGggRU5BQkxFX0FDQ0VTU0lCSUxJVFk9T0ZGCkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
T3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2ODAyMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgYm9v
bCBoYW5kbGVPcHRpb25BbGxvd2VkSG9zdChPcHRpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0cmluZywgSGFzaE1hcDxTdHJp
bmcsIGJvb2w+JiBmZWF0dXJlcykKK3N0YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVh
dHVyZVN0cmluZywgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVy
ZXMpCiB7CiAgICAgYXV0byBzdHJpbmdzID0gZmVhdHVyZVN0cmluZy5zcGxpdCgnPScpOwogICAg
IGlmIChzdHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJpbmdzLnNpemUoKSA+IDIpCkBAIC0xMjIsNyAr
MTIyLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlUwogICAgIGF1
dG8gZmVhdHVyZU5hbWUgPSBzdHJpbmdzWzBdOwogICAgIGJvb2wgZW5hYmxlZCA9IHN0cmluZ3Mu
c2l6ZSgpID09IDEgfHwgc3RyaW5nc1sxXSA9PSAidHJ1ZSI7CiAKLSAgICBmZWF0dXJlcy5zZXQo
ZmVhdHVyZU5hbWUsIGVuYWJsZWQpOworICAgIGZlYXR1cmVzLmluc2VydCh7IGZlYXR1cmVOYW1l
LnV0ZjgoKS5kYXRhKCksIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyNjgwMjEpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAog
I2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNp
bmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1
Nyw4IEBAIHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiBwYXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwotICAg
IEhhc2hNYXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKIH07CiAKIGNsYXNz
IE9wdGlvbiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJ
KHJldmlzaW9uIDI2ODAyMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZW1vdmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBhZGRUb1dpbmRvdygpOwogCi0gICAgYm9v
bCB2aWV3U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7
IHJldHVybiAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXph
dGlvbk9wdGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29u
c3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmds
eSgpICYmIG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9
CiAKICAgICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBzaG90SW1hZ2UoKTsKICAgICBjb25zdCBU
ZXN0T3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCShyZXZpc2lvbiAyNjgwMjEp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5o
PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rv
cj4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CkBAIC01OSw2ICs2MCwxMSBAQCBpbmxp
bmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uCiAgICAgcmV0dXJuIGFkb3B0V0so
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7CiB9CiAKK2lubGluZSBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQorewor
ICAgIHJldHVybiB0b1dLKHN0cmluZy5jX3N0cigpKTsKK30KKwogaW5saW5lIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0
dXJuIHRvV0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTE0LDYgKzEyMCwxMSBAQCBpbmxp
bmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgSlNSCiAgICAgcmV0dXJuIHRvV1RGU3Ry
aW5nKHN0cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhj
b25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJv
bVVURjgoc3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7
CiAgICAgcmV0dXJuIHRvV0soY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsK
QEAgLTEyNSw0ICsxMzYsMjQgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29u
dGV4dAogICAgIHJldHVybiB0b1dURlN0cmluZyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1
ZSkpOwogfQogCitpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNwbGl0KGNvbnN0IHN0
ZDo6c3RyaW5nJiBzdHJpbmcsIGNoYXIgZGVsaW1pdGVyKQoreworICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiByZXN1bHQ7CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBz
dHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IHN0cmluZy5maW5kX2Zp
cnN0X29mKGRlbGltaXRlciwgaSk7CisKKyAgICAgICAgaWYgKGZvdW5kSW5kZXggIT0gaSkKKyAg
ICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soc3RyaW5nLnN1YnN0cihpLCBmb3VuZEluZGV4IC0g
aSkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ID09IHN0ZDo6c3RyaW5nX3ZpZXc6Om5wb3Mp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpID0gZm91bmRJbmRleCArIDE7CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjY4MDIx
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSwxMiArMTA5LDYgQEAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHBhdGhTZXBh
cmF0b3IgPSAnXAogc3RhdGljIGNvbnN0ZXhwciBhdXRvIHBhdGhTZXBhcmF0b3IgPSAnLyc7CiAj
ZW5kaWYKIAotY29uc3QgdW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCA9IDgwMDsK
LWNvbnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0ID0gNjAwOwotCi1jb25z
dCB1bnNpZ25lZCBUZXN0Q29udHJvbGxlcjo6dzNjU1ZHVmlld1dpZHRoID0gNDgwOwotY29uc3Qg
dW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnczY1NWR1ZpZXdIZWlnaHQgPSAzNjA7Ci0KIGNvbnN0
IFdURjo6U2Vjb25kcyBUZXN0Q29udHJvbGxlcjo6ZGVmYXVsdFNob3J0VGltZW91dCA9IDVfczsK
IGNvbnN0IFdURjo6U2Vjb25kcyBUZXN0Q29udHJvbGxlcjo6bm9UaW1lb3V0ID0gLTFfczsKIApA
QCAtNDY5LDE1ICs0NjMsMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQg
YXJnYwogICAgIG1fc2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gb3B0aW9ucy5zaG91bGRE
dW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAgICAgbV9mb3JjZUNvbXBsZXhUZXh0ID0gb3B0aW9ucy5m
b3JjZUNvbXBsZXhUZXh0OwogICAgIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nID0gb3B0
aW9ucy5zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmc7Ci0gICAgbV9zaG91bGRVc2VSZW1vdGVM
YXllclRyZWUgPSBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVyVHJlZTsKICAgICBtX3BhdGhz
ID0gb3B0aW9ucy5wYXRoczsKICAgICBtX2FsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxsb3dlZEhv
c3RzOwotICAgIG1fc2hvdWxkU2hvd1dlYlZpZXcgPSBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3
OwotICAgIG1fc2hvdWxkU2hvd1RvdWNoZXMgPSBvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzOwog
ICAgIG1fY2hlY2tGb3JXb3JsZExlYWtzID0gb3B0aW9ucy5jaGVja0ZvcldvcmxkTGVha3M7CiAg
ICAgbV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFs
bG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0czsKLSAgICBtX2ludGVybmFsRmVh
dHVyZXMgPSBvcHRpb25zLmludGVybmFsRmVhdHVyZXM7Ci0gICAgbV9leHBlcmltZW50YWxGZWF0
dXJlcyA9IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgCisgICAgbV9nbG9iYWxG
ZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgPSBvcHRpb25zLmludGVybmFsRmVhdHVyZXM7
CisgICAgbV9nbG9iYWxGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyA9IG9wdGlvbnMuZXhw
ZXJpbWVudGFsRmVhdHVyZXM7CisgICAgbV9nbG9iYWxGZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5z
ZXJ0KHsgInVzZVJlbW90ZUxheWVyVHJlZSIsIG9wdGlvbnMuc2hvdWxkVXNlUmVtb3RlTGF5ZXJU
cmVlIH0pOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91
bGRTaG93V2ViVmlldyIsIG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgfSk7CisgICAgbV9nbG9i
YWxGZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInNob3VsZFNob3dUb3VjaGVzIiwgb3B0
aW9ucy5zaG91bGRTaG93VG91Y2hlcyB9KTsKKwogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpCiAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9IG9wdGlv
bnMuYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGU7CiAjZW5kaWYKQEAgLTQ5OSw3ICs0OTUs
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9ldmVu
dFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNlbmRlclByb3h5Pih0aGlzKTsKIH0KIAot
V0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gVGVzdENvbnRyb2xsZXI6Omdl
bmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnM6OkNvbnRleHRPcHRp
b25zJiBvcHRpb25zKSBjb25zdAorV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJl
Zj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3QgQ29u
dGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CiB7CiAgICAgYXV0byBjb25maWd1cmF0aW9uID0g
YWRvcHRXSyhXS0NvbnRleHRDb25maWd1cmF0aW9uQ3JlYXRlKCkpOwogICAgIFdLQ29udGV4dENv
bmZpZ3VyYXRpb25TZXRJbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSwgaW5q
ZWN0ZWRCdW5kbGVQYXRoKCkpOwpAQCAtNTYyLDEwICs1NTgsMTEgQEAgV0tXZWJzaXRlRGF0YVN0
b3JlUmVmIFRlc3RDb250cm9sbGVyOjp3ZQogCiBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0
aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbihjb25zdCBU
ZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9jb250ZXh0
T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRleHRPcHRp
b25zKSkgewotICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0gZ2VuZXJhdGVDb250
ZXh0Q29uZmlndXJhdGlvbihvcHRpb25zLmNvbnRleHRPcHRpb25zKTsKKyAgICBhdXRvIGNvbnRl
eHRPcHRpb25zID0gb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpOworICAgIGlmICghbV9jb250ZXh0
IHx8ICFtX2NvbnRleHRPcHRpb25zLT5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnRl
eHRPcHRpb25zKSkgeworICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0gZ2VuZXJh
dGVDb250ZXh0Q29uZmlndXJhdGlvbihjb250ZXh0T3B0aW9ucyk7CiAgICAgICAgIG1fY29udGV4
dCA9IHBsYXRmb3JtQWRqdXN0Q29udGV4dChhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdpdGhDb25m
aWd1cmF0aW9uKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpKSkuZ2V0KCksIGNvbnRleHRDb25m
aWd1cmF0aW9uLmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0T3B0aW9ucyA9IG9wdGlvbnMuY29u
dGV4dE9wdGlvbnM7CisgICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBjb250ZXh0T3B0aW9uczsK
IAogICAgICAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBtYWtlVW5pcXVlPEdlb2xvY2F0aW9u
UHJvdmlkZXJNb2NrPihtX2NvbnRleHQuZ2V0KCkpOwogCkBAIC02MjcsNyArNjI0LDcgQEAgV0tS
ZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogICAgIFdLUGFnZUNvbmZpZ3Vy
YXRpb25TZXRDb250ZXh0KHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkp
OwogICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRQYWdlR3JvdXAocGFnZUNvbmZpZ3VyYXRpb24u
Z2V0KCksIG1fcGFnZUdyb3VwLmdldCgpKTsKICAgICAKLSAgICBpZiAob3B0aW9ucy51c2VFcGhl
bWVyYWxTZXNzaW9uKSB7CisgICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbigpKSB7
CiAgICAgICAgIGF1dG8gZXBoZW1lcmFsRGF0YVN0b3JlID0gYWRvcHRXSyhXS1dlYnNpdGVEYXRh
U3RvcmVDcmVhdGVOb25QZXJzaXN0ZW50RGF0YVN0b3JlKCkpOwogICAgICAgICBXS1BhZ2VDb25m
aWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgZXBo
ZW1lcmFsRGF0YVN0b3JlLmdldCgpKTsKICAgICB9CkBAIC02MzksMTEgKzYzNiwxMiBAQCBXS1Jl
dGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBUZXN0CiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmNyZWF0ZVdlYlZpZXdXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykK
IHsKKyAgICBhdXRvIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG9wdGlvbnMuYXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFv
cHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAgICBpZiAo
IWFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoZSBi
dW5kbGUgaWRlbnRpZmllciBjYW4gb25seSBiZSBzZXQgb25jZSBwZXIgdGVzdCwgYW5kIGlzIGNs
ZWFyZWQgYmV0d2VlbiB0ZXN0cy4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzU2V0QXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKLSAgICAgICAgc2V0QXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKG9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAgICAgICAg
c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cik7CiAgICAgICAgIG1faGFzU2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gdHJ1ZTsK
ICAgICB9CiAjZW5kaWYKQEAgLTY4Niw3ICs2ODQsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpj
cmVhdGVXZWJWaWV3V2l0aE9wCiAgICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAgMCwgLy8g
cGFnZURpZFNjcm9sbAogICAgICAgICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEsCi0gICAg
ICAgIG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsID8gcnVuT3BlblBhbmVsIDogMCwK
KyAgICAgICAgb3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwoKSA/IHJ1bk9wZW5QYW5l
bCA6IDAsCiAgICAgICAgIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QsCiAgICAgICAgIDAsIC8vIGhlYWRlckhlaWdodAogICAgICAgICAwLCAvLyBmb290ZXJIZWln
aHQKQEAgLTc5NSw5ICs3OTMsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3
V2l0aE9wCiAgICAgLy8gc29tZXRoaW5nIGVsc2UgZm9yIHNwZWNpZmljIHRlc3RzIHRoYXQgbmVl
ZCB0byBydW4gYXQgYSBkaWZmZXJlbnQgd2luZG93IHNjYWxlLgogICAgIG1fbWFpbldlYlZpZXct
PmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQoMSk7CiAgICAgCi0gICAgaWYgKCFvcHRpb25zLmFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIHJlaW5pdGlhbGl6ZUFwcEJv
dW5kRG9tYWlucygpOwotICAgICAgICB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJv
Y2VzcyhvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAgIHVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
Zmllcik7CiAgICAgfQogfQogCkBAIC04MDksNyArODA3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6ZW5zdXJlVmlld1N1cHBvcnRzTwogICAgICAgICAvLyBIYXZpbmcgY3JlYXRlZCBhbm90aGVy
IHBhZ2UgKHZpYSB3aW5kb3cub3BlbigpKSBwcmV2ZW50cyBwcm9jZXNzIHN3YXBwaW5nIG9uIG5h
dmlnYXRpb24gYW5kIGl0IG1heSB0aGVyZWZvcmUKICAgICAgICAgLy8gY2F1c2UgZmxha2luZXNz
IHRvIHJldXNlIHRoZSB2aWV3LiBXZSBzaG91bGQgYWxzbyBhbHdheXMgbWFrZSBhIG5ldyB2aWV3
IGlmIHRoZSB0ZXN0IGlzIG1hcmtlZCBhcyBhcHAtYm91bmQsIGJlY2F1c2UKICAgICAgICAgLy8g
dGhlIHZpZXcgY29uZmlndXJhdGlvbiBtdXN0IGNoYW5nZS4KLSAgICAgICAgaWYgKCFtX2NyZWF0
ZWRPdGhlclBhZ2UgJiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhvcHRpb25z
KSAmJiAhb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAgaWYgKCFtX2NyZWF0ZWRP
dGhlclBhZ2UgJiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhvcHRpb25zKSAm
JiAhb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldygpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIHdpbGxEZXN0cm95V2ViVmlldygpOwpAQCAtODM2LDggKzgzNCw4IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzUmVzZXRU
ZXN0UnVubmVyT3ZlcnJpZGVzKHByZWZlcmVuY2VzKTsKIAogICAgIFdLUHJlZmVyZW5jZXNFbmFi
bGVBbGxFeHBlcmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBleHBlcmltZW50YWxGZWF0dXJlIDogb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcykK
LSAgICAgICAgV0tQcmVmZXJlbmNlc1NldEV4cGVyaW1lbnRhbEZlYXR1cmVGb3JLZXkocHJlZmVy
ZW5jZXMsIGV4cGVyaW1lbnRhbEZlYXR1cmUudmFsdWUsIHRvV0soZXhwZXJpbWVudGFsRmVhdHVy
ZS5rZXkpLmdldCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZhbHVlXSA6IG9wdGlv
bnMuZXhwZXJpbWVudGFsRmVhdHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEV4cGVy
aW1lbnRhbEZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSkuZ2V0KCkp
OwogCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKHByZWZl
cmVuY2VzKTsKIApAQCAtODYyLDE3ICs4NjAsMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVy
ZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlV2Vla0VuYWJsZWQiKS5n
ZXQoKSk7CiAjZW5kaWYKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmUgOiBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAgICAgICAgV0tQcmVmZXJlbmNl
c1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBpbnRlcm5hbERlYnVn
RmVhdHVyZS52YWx1ZSwgdG9XSyhpbnRlcm5hbERlYnVnRmVhdHVyZS5rZXkpLmdldCgpKTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZhbHVlXSAgOiBvcHRpb25zLmludGVybmFsRGVidWdG
ZWF0dXJlcygpKQorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVG
b3JLZXkocHJlZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSkuZ2V0KCkpOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQcm9jZXNzRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2Vzcyk7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzKTsKLSAgICBX
S1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2Vz
LCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzKTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MpOworICAgIFdLUHJlZmVyZW5jZXNTZXRD
YXB0dXJlVmlkZW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVW
aWRlb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVy
ZVZpZGVvSW5HUFVQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9J
blVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlv
SW5VSVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luR1BVUHJv
Y2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQ
cm9jZXNzKCkpOwogI2VuZGlmCi0gICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5zaG91bGRF
bmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UGFn
ZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9w
dGlvbnMuZW5hYmxlQXBwTmFwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmNvbnRleHRPcHRpb25zKCkuc2hv
dWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dFBhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZlcmVuY2Vz
LCBvcHRpb25zLmVuYWJsZUFwcE5hcCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZl
cmVuY2VzU2V0U3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQocHJlZmVyZW5jZXMs
IGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0WFNTQXVkaXRvckVuYWJsZWQocHJlZmVyZW5j
ZXMsIGZhbHNlKTsKQEAgLTg4MywxMCArODgxLDEwIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJl
c2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdFJ1bnRpbWVG
bGFncyhwcmVmZXJlbmNlcywga1dLSmF2YVNjcmlwdFJ1bnRpbWVGbGFnc0FsbEVuYWJsZWQpOwog
ICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5
KHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdENhbkFj
Y2Vzc0NsaXBib2FyZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldERP
TVBhc3RlQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRET01QYXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9t
UGFzdGVBbGxvd2VkKCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRVbml2ZXJzYWxBY2Nlc3NGcm9t
RmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0
RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyk7CisgICAgV0tQcmVmZXJlbmNl
c1NldFRvcE5hdmlnYXRpb25Ub0RhdGFVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5h
bGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICAgICBXS1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQocHJlZmVyZW5jZXMsIHRy
dWUpOwogI2VuZGlmCkBAIC04OTksMTggKzg5NywxOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEN1c3RvbVBhc3RlYm9hcmRE
YXRhRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldERpYWxv
Z0VsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKIAotICAgIFdLUHJlZmVyZW5jZXNT
ZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9s
bGJhcnMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhwcmVm
ZXJlbmNlcywgb3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFi
bGVBdHRhY2htZW50RWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVu
dEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlS2V5Z2VuRWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24pOwotICAgIFdLUHJlZmVy
ZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvckVuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3Ip
OwotICAgIFdLUHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVz
b3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENvbG9yRmls
dGVyRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcik7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUocHJlZmVy
ZW5jZXMsIG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSk7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5h
YmxlQmFja0ZvcndhcmRDYWNoZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vY2tTY3JvbGxiYXJz
RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycygpKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJlZmVyZW5jZXMsIG9wdGlv
bnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEF0dGFj
aG1lbnRFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBdHRhY2htZW50
RWxlbWVudCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQoKSk7CisgICAgV0tQcmVm
ZXJlbmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJs
ZUtleWdlbkVsZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMo
KSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uRW5hYmxlZChwcmVmZXJl
bmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbigpKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHByZWZlcmVu
Y2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKCkp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVz
b3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q29sb3JG
aWx0ZXJFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKCkpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXREZWZh
dWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTktMSIpLmdldCgp
KTsKIApAQCAtOTMyLDcgKzkzMCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVy
ZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SGlkZGVu
UGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAK
LSAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChwcmVmZXJlbmNl
cywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51c2VBY2NlbGVyYXRl
ZERyYXdpbmcpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVk
KHByZWZlcmVuY2VzLCBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyB8fCBvcHRpb25zLnVz
ZUFjY2VsZXJhdGVkRHJhd2luZygpKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIHRlc3Rp
bmcgdGhlIGRlZmF1bHQuCiAgICAgV0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VCbG9ja2luZ1BvbGlj
eShwcmVmZXJlbmNlcywga1dLQWxsb3dBbGxTdG9yYWdlKTsKIApAQCAtOTUzLDcgKzk1MSw3IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICAKICAgICBXS1By
ZWZlcmVuY2VzU2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKHByZWZlcmVuY2VzLCBm
YWxzZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25z
LmVuYWJsZUluc3BlY3RvckFkZGl0aW9ucygpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9y
YWdlQWNjZXNzQVBJRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgCkBAIC05NzIsNyAr
OTcwLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdL
UHJlZmVyZW5jZXNTZXRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShwcmVmZXJlbmNl
cywgZmFsc2UpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktl
eShwcmVmZXJlbmNlcywgZmFsc2UsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTcGVh
a2VyU2VsZWN0aW9uUmVxdWlyZXNVc2VyR2VzdHVyZSIpKTsKIAotICAgIFdLUHJlZmVyZW5jZXNT
ZXRTaG91bGRVc2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZlcmVuY2VzLCBvcHRpb25z
LmNvbnRleHRPcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRTaG91bGRVc2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZlcmVuY2Vz
LCBvcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKSk7CiAKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRJc0FjY2Vz
c2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKHByZWZlcmVuY2VzLCBhY2Nlc3NpYmlsaXR5SXNv
bGF0ZWRUcmVlTW9kZSgpKTsKQEAgLTEwMDYsMTEgKzEwMDQsMTIgQEAgYm9vbCBUZXN0Q29udHJv
bGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAogICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHks
ICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIiwgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
TW9kZSk7CiAjZW5kaWYKIAotICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpCi0g
ICAgICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwgb3B0aW9ucy5q
c2NPcHRpb25zLmNfc3RyKCkpOworICAgIGF1dG8ganNjT3B0aW9ucyA9IG9wdGlvbnMuanNjT3B0
aW9ucygpOworICAgIGlmICghanNjT3B0aW9ucy5lbXB0eSgpKQorICAgICAgICBzZXRWYWx1ZShy
ZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIGpzY09wdGlvbnMuY19zdHIoKSk7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzLmNfc3RyKCkpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25h
bFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRl
ZEltYWdlVHlwZXMoKS5jX3N0cigpKTsKICNlbmRpZgogCiAgICAgV0tQYWdlUG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wYWdlKCksIHRvV0soIlJlc2V0IikuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOwpA
QCAtMTExOCw3ICsxMTE3LDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29u
c2lzdAogCiAgICAgc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChmYWxzZSk7CiAgICAgCi0g
ICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRT
Y2FsZUxpbWl0cyk7CisgICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5p
Z25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpKTsKIAogICAgIG1fb3BlblBhbmVsRmlsZVVSTHMg
PSBudWxscHRyOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzE4LDcgKzEzMTcsNyBA
QCBzdGF0aWMgc3RkOjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYgdXJsCiAgICAgcmV0dXJuIHN0
ZDo6c3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXS1VSTFJlZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNo
YXIqIHBhdGhPclVSTCkKK1dLVVJMUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKGNv
bnN0IGNoYXIqIHBhdGhPclVSTCkKIHsKICAgICBpZiAoc3Ryc3RyKHBhdGhPclVSTCwgImh0dHA6
Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiaHR0cHM6Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJM
LCAiZmlsZTovLyIpKQogICAgICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmco
cGF0aE9yVVJMKTsKQEAgLTEzNTYsMjIxICsxMzU1LDI1IEBAIHN0YXRpYyBXS1VSTFJlZiBjcmVh
dGVUZXN0VVJMKGNvbnN0IGNoYXIKICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcoYnVmZmVyLmdldCgpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInRy
dWUiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gImZhbHNlIikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVkIHZh
bHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJy4i
LCB2YWx1ZS5jX3N0cigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0
cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6
c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICBhdXRv
IGJhc2VVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAg
ICBhdXRvIHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VV
UkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VS
TENvcHlQYXRoKHJlbGF0aXZlVVJMLmdldCgpKSkpOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcg
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGNyZWF0ZVRlc3RV
UkwodmFsdWUuY19zdHIoKSkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZVRlc3RPcHRpb25z
RnJvbVRlc3RIZWFkZXIoVGVzdE9wdGlvbnMmIHRlc3RPcHRpb25zLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1dGVQYXRoKQotewotICAgIHN0
ZDo6c3RyaW5nIGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwotICAgIGlmIChmaWxlbmFtZS5lbXB0
eSgpKSB7Ci0gICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9ucyBiZXR3
ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICBmaWxlbmFtZSA9IHRl
c3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKLSAgICBzdGQ6Omlmc3RyZWFtIHRlc3RGaWxlKGZpbGVu
YW1lLmRhdGEoKSk7Ci0gICAgaWYgKCF0ZXN0RmlsZS5nb29kKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBnZXRsaW5lKHRlc3RGaWxlLCBvcHRpb25zKTsKLSAgICBzdGQ6OnN0cmluZyBiZWdpblN0
cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAgc3RkOjpzdHJpbmcgZW5kU3RyaW5n
KCIgXSIpOwotICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5kKGJlZ2luU3Ry
aW5nKTsKLSAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAg
ICAgcmV0dXJuOwotICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChlbmRTdHJp
bmcsIGJlZ2luTG9jYXRpb24pOwotICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6
bnBvcykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0ZXN0IGhl
YWRlciBpbiAlcyIsIGZpbGVuYW1lLmNfc3RyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxvY2F0aW9u
ICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9uICsgYmVn
aW5TdHJpbmcuc2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7Ci0gICAgd2hpbGUg
KHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAgICAgIHNpemVfdCBwYWlyRW5k
ID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKHBhaXJFbmQg
PT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0cmluZy5z
aXplKCk7Ci0gICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcuZmluZCgi
PSIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9uIGluIHRl
c3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIGZpbGVuYW1l
LmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBr
ZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0gcGFpclN0
YXJ0KTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFsc0xvY2F0
aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKLQotICAgICAgICBpZiAo
IWtleS5yZmluZCgiZXhwZXJpbWVudGFsOiIpKSB7Ci0gICAgICAgICAgICBrZXkgPSBrZXkuc3Vi
c3RyKDEzKTsKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmFk
ZChTdHJpbmcoa2V5LmNfc3RyKCkpLCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgha2V5LnJmaW5kKCJpbnRlcm5hbDoiKSkgewot
ICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cig5KTsKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LmludGVybmFsRGVidWdGZWF0dXJlcy5hZGQoU3RyaW5nKGtleS5jX3N0cigpKSwgcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2V5
ID09ICJsYW5ndWFnZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5v
dmVycmlkZUxhbmd1YWdlcyA9IFN0cmluZyh2YWx1ZS5jX3N0cigpKS5zcGxpdCgnLCcpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInVzZVRocmVhZGVkU2Nyb2xsaW5nIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VBY2NlbGVyYXRlZERy
YXdpbmciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUZs
ZXhpYmxlVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInVzZURhdGFEZXRlY3Rpb24iKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMudXNlRGF0YURldGVjdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlTW9ja1Njcm9sbGJhcnMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gIm5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQ2hhcmFjdGVy
U2VsZWN0aW9uR3JhbnVsYXJpdHkiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlQ2hhcmFj
dGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50ID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFi
bGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRXBoZW1lcmFsU2Vzc2lvbiIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNZW51
SXRlbUVsZW1lbnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVt
ZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJlbmFibGVLZXlnZW5FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LmVuYWJsZUtleWdlbkVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlUG9pbnRlckxvY2siKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlUG9pbnRl
ckxvY2sgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVXZWJBdXRoZW50aWNh
dGlvbkxvY2FsQXV0aGVudGljYXRvciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVX
ZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW5zcGVjdG9y
QWRkaXRpb25zIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUluc3BlY3RvckFkZGl0
aW9ucyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRpb25NYW5pZmVz
dCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0ID0gcGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJMKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZG9tUGFzdGVBbGxvd2VkIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmRvbVBhc3RlQWxsb3dlZCA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9w
dGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVByb2Nlc3NT
d2FwT25XaW5kb3dPcGVuIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25z
LmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VTZXJ2aWNlV29ya2VyU2hv
cnRUaW1lb3V0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLnVzZVNl
cnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKLSAgICAg
ICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJwdW5jaE91dFdoaXRl
QmFja2dyb3VuZHNJbkRhcmtNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnB1bmNoT3V0
V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImpzY09wdGlvbnMiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMuanNjT3B0aW9ucyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzID0gdmFsdWU7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAicnVuU2luZ2x5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnJ1blNpbmds
eSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3BlbGxDaGVja2luZ0RvdHMiKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
U2VydmljZUNvbnRyb2xzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJlZGl0YWJsZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5lZGl0YWJsZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKGtleSA9PSAic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic2hvdWxkUHJlc2Vu
dFBvcG92ZXJzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVy
cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiY29udGVudEluc2V0LnRvcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250
ZW50SW5zZXRUb3AgPSBzdGQ6OnN0b2QodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
Imlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiKQotICAgICAgICAgICAgdGVzdE9w
dGlvbnMuY29udGV4dE9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAiY29udGVudE1vZGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGVudE1vZGUg
PSB7IHZhbHVlLmNfc3RyKCkgfTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyID0geyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAiZW5hYmxlQXBwTmFwIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUFwcE5h
cCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5lbmFibGVCYWNrRm9yd2FyZENhY2hlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd3NMaW5rUHJldmlldyIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVy
ZVZpZGVvSW5VSVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVy
ZVZpZGVvSW5VSVByb2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3Mg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJl
QXVkaW9JbkdQVVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVy
ZUF1ZGlvSW5HUFVQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
ZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TCA9IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImlzQXBwQm91bmRXZWJWaWV3IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LmlzQXBwQm91bmRXZWJWaWV3ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQotfQotCiBUZXN0T3B0aW9u
cyBUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBj
b21tYW5kKSBjb25zdAogewotICAgIFRlc3RPcHRpb25zIG9wdGlvbnMoY29tbWFuZC5wYXRoT3JV
UkwpOwotCi0gICAgb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUgPSBtX3Nob3VsZFVzZVJlbW90
ZUxheWVyVHJlZTsKLSAgICBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gbV9zaG91bGRTaG93
V2ViVmlldzsKLQotICAgIGZvciAoYXV0byYgZmVhdHVyZSA6IG1faW50ZXJuYWxGZWF0dXJlcykK
LSAgICAgICAgb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKGZlYXR1cmUua2V5LCBm
ZWF0dXJlLnZhbHVlKTsKLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2V4cGVyaW1lbnRhbEZl
YXR1cmVzKQotICAgICAgICBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmFkZChmZWF0dXJl
LmtleSwgZmVhdHVyZS52YWx1ZSk7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzID0gbV9nbG9i
YWxGZWF0dXJlczsKKyAgICBtZXJnZShmZWF0dXJlcywgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9u
UGF0aEZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNp
ZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVhdHVyZXMs
IGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVy
Z2UoZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JU
ZXN0KGNvbW1hbmQpKTsKIAotICAgIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0Zv
clRlc3Qob3B0aW9ucywgY29tbWFuZC5wYXRoT3JVUkwpOwotICAgIHVwZGF0ZVRlc3RPcHRpb25z
RnJvbVRlc3RIZWFkZXIob3B0aW9ucywgY29tbWFuZC5wYXRoT3JVUkwsIGNvbW1hbmQuYWJzb2x1
dGVQYXRoKTsKLSAgICBwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKG9wdGlvbnMpOwotCi0gICAgcmV0
dXJuIG9wdGlvbnM7CisgICAgcmV0dXJuIFRlc3RPcHRpb25zIHsgZmVhdHVyZXMgfTsKIH0KIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KGNvbnN0IFRlc3RJ
bnZvY2F0aW9uJiB0ZXN0KQogewotICAgIHVuc2lnbmVkIHdpZHRoID0gdmlld1dpZHRoOwotICAg
IHVuc2lnbmVkIGhlaWdodCA9IHZpZXdIZWlnaHQ7Ci0gICAgaWYgKHRlc3Qub3B0aW9ucygpLmlz
U1ZHVGVzdCkgewotICAgICAgICB3aWR0aCA9IHczY1NWR1ZpZXdXaWR0aDsKLSAgICAgICAgaGVp
Z2h0ID0gdzNjU1ZHVmlld0hlaWdodDsKLSAgICB9Ci0KLSAgICBtYWluV2ViVmlldygpLT5yZXNp
emVUbyh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtYWluV2ViVmlldygpLT5yZXNpemVUbyh0ZXN0Lm9w
dGlvbnMoKS52aWV3V2lkdGgoKSwgdGVzdC5vcHRpb25zKCkudmlld0hlaWdodCgpKTsKIH0KIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KFBsYXRmb3JtV2Vi
VmlldyogdmlldywgY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7Ci0gICAgdmlldy0+Y2hh
bmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMoKS5kZXZpY2VTY2FsZUZhY3Rvcik7
CisgICAgdmlldy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlVmll
d0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCkBAIC0xNzY2LDYgKzE1NjksMTIg
QEAgc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IAogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKICAgICB9CisgICAgCisgICAgaWYgKHJlc3Vs
dC5hYnNvbHV0ZVBhdGguZW1wdHkoKSkgeworICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1
Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KKyAg
ICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKGFkb3B0V0soVGVzdENvbnRyb2xs
ZXI6OmNyZWF0ZVRlc3RVUkwocmVzdWx0LnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkpOworICAg
IH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE3ODgsNyArMTU5Nyw3IEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhcioKICAgICBpZiAoY29tbWFuZC50aW1l
b3V0ID4gMF9zKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRDdXN0b21UaW1lb3V0
KGNvbW1hbmQudGltZW91dCk7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXREdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0
aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIG1fY3VycmVudEludm9jYXRpb24t
PnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0
ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpKTsKIAogICAgIHBsYXRm
b3JtV2lsbFJ1blRlc3QoKm1fY3VycmVudEludm9jYXRpb24pOwogCkBAIC0zMDAzLDcgKzI4MTIs
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0CiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25maWd1cmF0
aW9uUmVmIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAg
IGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQorICAgIGlmICghb3B0aW9ucy51c2VF
cGhlbWVyYWxTZXNzaW9uKCkpCiAgICAgICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRXZWJzaXRl
RGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24sIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogCiAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tQYWdlQ29uZmlndXJhdGlvbkdldFdlYnNpdGVEYXRh
U3RvcmUoY29uZmlndXJhdGlvbik7CkBAIC0zODE4LDcgKzM2MjcsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpyZWluaXRpYWxpemVBcHBCb3VuCiAgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVpbml0
aWFsaXplQXBwQm91bmREb21haW5zKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCkp
OwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBzdGQ6
OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2YWN5Q2Fs
bGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRl
RGF0YVN0b3JlKCksIHRvV0soYnVuZGxlSWRlbnRpZmllcikuZ2V0KCksICZjb250ZXh0LCBpbkFw
cEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNrKTsKQEAgLTM4MzMsOCArMzY0Miw5IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyQnVuZGxlSWRlbnRpZmkKIH0KIAogI2lmICFQTEFU
Rk9STShDT0NPQSkKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMo
VGVzdE9wdGlvbnMmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYpIGNvbnN0CiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
aW5qZWN0VXNlclNjcmlwdChXS1N0cmluZ1JlZikKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDI2ODAyMSkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRl
IDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAg
LTUwLDEyICs1MSwxMiBAQCBPQkpDX0NMQVNTIFdLV2ViVmlld0NvbmZpZ3VyYXRpb247CiAKIG5h
bWVzcGFjZSBXVFIgewogCi1jbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNzIEV2ZW50U2VuZGVy
UHJveHk7CiBjbGFzcyBPcmlnaW5TZXR0aW5nczsKIGNsYXNzIFBsYXRmb3JtV2ViVmlldzsKLWNs
YXNzIEV2ZW50U2VuZGVyUHJveHk7CitjbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNzIFRlc3RP
cHRpb25zOwogc3RydWN0IFRlc3RDb21tYW5kOwotc3RydWN0IFRlc3RPcHRpb25zOwogCiBjbGFz
cyBBc3luY1Rhc2sgewogcHVibGljOgpAQCAtOTEsMTEgKzkyLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGNvbmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVUZW1wb3JhcnlEaXJlY3RvcmllcyhX
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uUmVmKTsKICAgICBzdGF0aWMgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmlld1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2aWV3SGVp
Z2h0OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHczY1NWR1ZpZXdXaWR0aDsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdzNjU1ZHVmlld0hlaWdodDsKKyAgICBzdGF0aWMgV0tVUkxS
ZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpOwogCiAgICAgc3RhdGljIGNv
bnN0IFdURjo6U2Vjb25kcyBkZWZhdWx0U2hvcnRUaW1lb3V0OwogICAgIHN0YXRpYyBjb25zdCBX
VEY6OlNlY29uZHMgbm9UaW1lb3V0OwpAQCAtMTE1LDIwICsxMTIsMTUgQEAgcHVibGljOgogICAg
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3JlKCk7CiAKICAgICBFdmVudFNl
bmRlclByb3h5KiBldmVudFNlbmRlclByb3h5KCkgeyByZXR1cm4gbV9ldmVudFNlbmRlclByb3h5
LmdldCgpOyB9Ci0KLSAgICBib29sIHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOyB9CiAgICAgCiAgICAgLy8gUnVucyB0
aGUgcnVuIGxvb3AgdW50aWwgYGRvbmVgIGlzIHRydWUgb3IgdGhlIHRpbWVvdXQgZWxhcHNlcy4K
ICAgICBib29sIHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgeyByZXR1cm4gbV91c2VXYWl0
VG9EdW1wV2F0Y2hkb2dUaW1lcjsgfQogICAgIHZvaWQgcnVuVW50aWwoYm9vbCYgZG9uZSwgV1RG
OjpTZWNvbmRzIHRpbWVvdXQpOwogICAgIHZvaWQgbm90aWZ5RG9uZSgpOwogCi0gICAgYm9vbCBz
aG91bGRTaG93V2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd1dlYlZpZXc7IH0K
ICAgICBib29sIHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdTZXJ2ZXJN
b2RlOyB9CiAgICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlv
biYpOwotICAgIAotICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFNob3dUb3VjaGVzOyB9Ci0gICAgCisKICAgICBib29sIGJlZm9yZVVubG9hZFJldHVy
blZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZTsgfQogICAg
IHZvaWQgc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkgeyBtX2JlZm9yZVVu
bG9hZFJldHVyblZhbHVlID0gdmFsdWU7IH0KIApAQCAtMjc1LDcgKzI2Nyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNsZWFyTG9hZGVkU3VicmVzb3VyY2VEb21haW5zKCk7CiAgICAgdm9pZCBjbGVh
ckFwcEJvdW5kU2Vzc2lvbigpOwogICAgIHZvaWQgcmVpbml0aWFsaXplQXBwQm91bmREb21haW5z
KCk7Ci0gICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25z
dCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOworICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIp
OwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcygpOwogCiAg
ICAgV0tBcnJheVJlZiBvcGVuUGFuZWxGaWxlVVJMcygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlblBh
bmVsRmlsZVVSTHMuZ2V0KCk7IH0KQEAgLTM2Miw3ICszNTQsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVQYWdl
Q29uZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9ucyYpOwotICAgIFdLUmV0YWluUHRyPFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3Qg
VGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zJikgY29uc3Q7CisgICAgV0tSZXRhaW5QdHI8V0tD
b250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb25z
dCBDb250ZXh0T3B0aW9ucyYpIGNvbnN0OwogICAgIHZvaWQgaW5pdGlhbGl6ZShpbnQgYXJnYywg
Y29uc3QgY2hhciogYXJndltdKTsKICAgICB2b2lkIGNyZWF0ZVdlYlZpZXdXaXRoT3B0aW9ucyhj
b25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHZvaWQgcnVuKCk7CkBAIC0zODAsNyArMzcyLDYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogICAgIFdLQ29udGV4dFJlZiBw
bGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmLCBXS0NvbnRleHRDb25maWd1cmF0aW9u
UmVmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKTsKLSAgICB2b2lkIHBs
YXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmKSBjb25zdDsKICAgICB2b2lkIHBsYXRm
b3JtQ3JlYXRlV2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0T3B0aW9u
cyYpOwogICAgIHN0YXRpYyBQbGF0Zm9ybVdlYlZpZXcqIHBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdl
KFBsYXRmb3JtV2ViVmlldyogcGFyZW50VmlldywgV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29u
c3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHBsYXRmb3JtUmVzZXRQcmVmZXJlbmNlc1RvQ29u
c2lzdGVudFZhbHVlcygpOwpAQCAtMzg5LDcgKzM4MCw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCBjb2NvYVBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogICAgIHZvaWQg
Y29jb2FSZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJik7Ci0g
ICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qgc3RkOjpzdHJpbmcm
KTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyVGVzdGluZ092ZXJy
aWRlKCk7CiAjZW5kaWYKICAgICB2b2lkIHBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mKTsKQEAgLTQwMyw3ICszOTQsOSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBlbnN1cmVWaWV3U3VwcG9ydHNPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlv
biYpOwogICAgIFRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9y
VGVzdChUZXN0T3B0aW9ucyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpIGNvbnN0Owor
ICAgIFRlc3RGZWF0dXJlcyBnbG9iYWxGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RD
b21tYW5kJikgY29uc3Q7CisgICAgVGVzdEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJl
RGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVzdEZlYXR1
cmVzIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXdTaXplRm9yVGVz
dChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlV2luZG93U2NhbGVGb3JU
ZXN0KFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CkBAIC01MzgsOCAr
NTMxLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NyZWF0ZWRPdGhlclBhZ2UgeyBmYWxzZSB9
OwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3BhdGhzOwogICAgIHN0ZDo6c2V0PHN0
ZDo6c3RyaW5nPiBtX2FsbG93ZWRIb3N0czsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gbV9p
bnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBtX2V4cGVyaW1lbnRh
bEZlYXR1cmVzOworICAgIFRlc3RGZWF0dXJlcyBtX2dsb2JhbEZlYXR1cmVzOworCisgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2ludGVybmFsRmVhdHVyZXM7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2V4cGVyaW1lbnRhbEZl
YXR1cmVzOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1faW5qZWN0ZWRCdW5kbGVQ
YXRoOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX3Rlc3RQbHVnaW5EaXJlY3Rvcnk7
CkBAIC01NDgsNyArNTQzLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0
Zm9ybVdlYlZpZXc+IG1fbWFpbldlYlZpZXc7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVm
PiBtX2NvbnRleHQ7Ci0gICAgT3B0aW9uYWw8VGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zPiBt
X2NvbnRleHRPcHRpb25zOworICAgIE9wdGlvbmFsPENvbnRleHRPcHRpb25zPiBtX2NvbnRleHRP
cHRpb25zOwogICAgIFdLUmV0YWluUHRyPFdLUGFnZUdyb3VwUmVmPiBtX3BhZ2VHcm91cDsKICAg
ICBXS1JldGFpblB0cjxXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZj4gbV91c2VyQ29udGVudENv
bnRyb2xsZXI7CiAKQEAgLTYwNSwxNCArNjAwLDEwIEBAIHByaXZhdGU6CiAKICAgICBib29sIG1f
Zm9yY2VDb21wbGV4VGV4dCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZFVzZUFjY2VsZXJh
dGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJl
ZSB7IGZhbHNlIH07Ci0KKyAgICAKICAgICBib29sIG1fc2hvdWxkTG9nQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZExvZ0Rv
d25sb2FkQ2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9nSGlzdG9yeUNs
aWVudENhbGxiYWNrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFNob3dXZWJWaWV3IHsg
ZmFsc2UgfTsKLSAgICAKLSAgICBib29sIG1fc2hvdWxkU2hvd1RvdWNoZXMgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9jaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwogCiAgICAgYm9vbCBtX2Fs
bG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyB7IGZhbHNlIH07CkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjY4MDIx
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNob3VsZExv
Z0hpc3RvcnlDbGkKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRlc3RJbnZv
Y2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKICAgICBhdXRvIGJlZ2lu
VGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwot
ICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3cG9ydCIs
IG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RN
ZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVW
aWV3cG9ydCgpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBQaXhl
bHMiLCBtX2R1bXBQaXhlbHMpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAi
VGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkp
KTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKLSAgICBzZXRWYWx1ZShiZWdp
blRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgb3B0aW9u
cygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIHNldFZhbHVl
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBv
cHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsKICAgICBy
ZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgwMjEpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzQgKzI2LDI2OSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25zLmgiCiAKKyNpbmNs
dWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNkZWZpbmUgRFVNUF9GRUFUVVJF
UyAwCisKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qg
c3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQorI2lmIERVTVBf
RkVBVFVSRVMKK3N0YXRpYyB2b2lkIGR1bXBGZWF0dXJlcyhjb25zdCBUZXN0RmVhdHVyZXMmIGZl
YXR1cmVzKQogewotICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5jX3N0cigpKTsKLSAgICByZXR1
cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWluc2Vuc2l0aXZlLgorICAgIGlm
IChmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5lbXB0eSgp
ICYmIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nRmVh
dHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0eSgpKSB7
CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBbRU1QVFldXG4iOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmICghZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHko
KSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgRXhwZXJpbWVudGFsIEZlYXR1cmVzOiBcbiI7
CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5leHBlcmltZW50YWxG
ZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIg
PDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5pbnRlcm5hbERlYnVn
RmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgSW50ZXJuYWwgRmVh
dHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmlu
dGVybmFsRGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwg
a2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5i
b29sRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgQm9vbCBGZWF0
dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuYm9v
bEZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjog
IiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLmRvdWJsZUZlYXR1
cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIERvdWJsZSBGZWF0dXJlczog
XG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZG91YmxlRmVh
dHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8
IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMu
ZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIEZlYXR1cmVzOiBcbiI7
CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdGZWF0dXJl
cykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFs
dWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJl
cy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgVmVjdG9yIEZlYXR1
cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJp
bmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5
IDw8ICI6IE51bWJlciBvZiBzdHJpbmdzICIgPDwgdmFsdWUuc2l6ZSgpIDw8ICdcbic7CisgICAg
fQogfQorI2VuZGlmCiAKLXN0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFz
ZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpCiB7Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3Vh
bC12aWV3cG9ydC8iKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHN0ZDo6dW5vcmRl
cmVkX21hcDo6bWVyZ2Ugd2hlbiBpdCBpcyBhdmFpbGFibGUgZm9yIGFsbCBwb3J0cy4KKworICAg
IGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZlYXR1cmVz
KQorICAgICAgICBiYXNlLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5
LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuaW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVzKQorICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNl
cnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBh
ZGRpdGlvbmFsLmJvb2xGZWF0dXJlcykKKyAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMuaW5zZXJ0
X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRk
aXRpb25hbC5kb3VibGVGZWF0dXJlcykKKyAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJlcy5pbnNl
cnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBh
ZGRpdGlvbmFsLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1cmVzLmlu
c2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6
IGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3RyaW5nVmVj
dG9yRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKK30KKworZW51bSBjbGFz
cyBLZXlUeXBlIHsKKyAgICBCb29sLAorICAgIERvdWJsZSwKKyAgICBTdHJpbmcsCisgICAgU3Ry
aW5nUmVsYXRpdmVQYXRoLAorICAgIFN0cmluZ1VSTCwKKyAgICBTdHJpbmdWZWN0b3IsCisgICAg
VW5rbm93bgorfTsKKworc3RhdGljIEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCit7
CisgICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgS2V5VHlwZT4ga2V5
VHlwZU1hcCB7CisgICAgICAgIHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJ1c2VBY2NlbGVyYXRlZERyYXdpbmciLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgInVzZVJlbW90ZUxheWVyVHJlZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAic2hvdWxkU2hvd1dlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVz
ZUZsZXhpYmxlVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZURhdGFE
ZXRlY3Rpb24iLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJz
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51
bGFyaXR5IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVBdHRhY2htZW50RWxl
bWVudCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24i
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlUG9pbnRlckxvY2siLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93VG91Y2hlcyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZG9tUGFzdGVBbGxvd2VkIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDb2xvckZpbHRlciIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAicnVuU2luZ2x5IiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJjaGVja0ZvcldvcmxkTGVha3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAic3BlbGxDaGVja2luZ0RvdHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVu
YWJsZVNlcnZpY2VDb250cm9scyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZWRpdGFi
bGUiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5l
bCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkUHJlc2VudFBvcG92ZXJzIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVBcHBOYXAiLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImFsbG93c0xpbmtQcmV2aWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJpc0FwcEJvdW5kV2ViVmlldyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24i
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dP
cGVuIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VTZXJ2aWNlV29ya2VyU2hvcnRU
aW1lb3V0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgIAorICAgICAgICB7ICJjb250ZW50SW5zZXQu
dG9wIiwgS2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgImRldmljZVNjYWxlRmFjdG9yIiwg
S2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgInZpZXdXaWR0aCIsIEtleVR5cGU6OkRvdWJs
ZSB9LAorICAgICAgICB7ICJ2aWV3SGVpZ2h0IiwgS2V5VHlwZTo6RG91YmxlIH0sCisKKyAgICAg
ICAgeyAianNjT3B0aW9ucyIsIEtleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIEtleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJj
b250ZW50TW9kZSIsIEtleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRp
b25NYW5pZmVzdCIsIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aCB9LAorICAgICAgICB7ICJz
dGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwiLCBLZXlUeXBlOjpTdHJpbmdVUkwgfSwKKworICAg
ICAgICB7ICJsYW5ndWFnZSIsIEtleVR5cGU6OlN0cmluZ1ZlY3RvciB9LAorICAgIH07CisgICAg
CisgICAgYXV0byBpdCA9IGtleVR5cGVNYXAuZmluZChrZXkpOworICAgIGlmIChpdCA9PSBrZXlU
eXBlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gS2V5VHlwZTo6VW5rbm93bjsKKyAgICByZXR1
cm4gaXQtPnNlY29uZDsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkVXNlRml4ZWRMYXlvdXQoY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCiB7Ci0jaWYgRU5BQkxFKENTU19E
RVZJQ0VfQURBUFRBVElPTikKLSAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImRldmlj
ZS1hZGFwdC8iKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiZGV2aWNlLWFkYXB0XFwiKSkK
KyAgICBpZiAodmFsdWUgPT0gInRydWUiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgor
ICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBM
T0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24u
IEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNTVkdUZXN0UGF0aChjb25zdCBzdGQ6OnN0cmlu
ZyYgcGF0aE9yVVJMKQorc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZh
bHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKQoreworICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0V0soVGVzdENvbnRy
b2xsZXI6OmNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKKyAgICBhdXRvIHJlbGF0
aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCksIHZh
bHVlLmNfc3RyKCkpKTsKKyAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRoKHJl
bGF0aXZlVVJMLmdldCgpKSkpOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdU
ZXN0SGVhZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpOworICAgIHJldHVybiB0b1NURChh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTCh2YWx1
ZS5jX3N0cigpKSkpKTsKK30KKworc3RhdGljIFRlc3RGZWF0dXJlcyBwYXJzZVRlc3RIZWFkZXIo
c3RkOjpmaWxlc3lzdGVtOjpwYXRoIHBhdGgsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwp
Cit7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmICghc3RkOjpmaWxlc3lzdGVt
OjpleGlzdHMocGF0aCkpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKworICAgIHN0ZDo6aWZz
dHJlYW0gZmlsZShwYXRoKTsKKyAgICBpZiAoIWZpbGUuZ29vZCgpKSB7CisgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IG9wZW4gZmlsZSB0byBpbnNwZWN0IHRlc3QgaGVhZGVycyBpbiAlcyIs
IHBhdGguY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBz
dGQ6OnN0cmluZyBvcHRpb25zOworICAgIGdldGxpbmUoZmlsZSwgb3B0aW9ucyk7CisgICAgc3Rk
OjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOworICAgIHN0ZDo6
c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKKyAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlv
bnMuZmluZChiZWdpblN0cmluZyk7CisgICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJp
bmc6Om5wb3MpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICBzaXplX3QgZW5kTG9jYXRp
b24gPSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKKyAgICBpZiAoZW5k
TG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAg
ICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcg
PSBvcHRpb25zLnN1YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRM
b2NhdGlvbiAtIChiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7CisgICAgc2l6
ZV90IHBhaXJTdGFydCA9IDA7CisgICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6
ZSgpKSB7CisgICAgICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFp
clN0YXJ0KTsKKyAgICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAg
ICAgICAgICBwYWlyRW5kID0gcGFpclN0cmluZy5zaXplKCk7CisgICAgICAgIHNpemVfdCBlcXVh
bHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJTdGFydCk7CisgICAgICAgIGlm
IChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAn
PScgY2hhcmFjdGVyKSBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFy
dCwgZXF1YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOworICAgICAgICBhdXRvIHZhbHVlID0gcGFp
clN0cmluZy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0
aW9uICsgMSkpOworCisgICAgICAgIGlmIChrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSA9PSAw
KSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDEzKTsKKyAgICAgICAgICAgIGZlYXR1
cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkucmZpbmQoImludGVy
bmFsOiIpID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7CisgICAgICAg
ICAgICBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9CisKKyAgICAgICAgc3dp
dGNoIChrZXlUeXBlKGtleSkpIHsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpCb29sOgorICAgICAg
ICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEtleVR5cGU6OkRvdWJsZToKKyAgICAgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmlu
c2VydCh7IGtleSwgc3RkOjpzdG9kKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0Zl
YXR1cmVzLmluc2VydCh7IGtleSwgdmFsdWUgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAgICAgICBmZWF0dXJl
cy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVl
QXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCkgfSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgICAgICBmZWF0dXJlcy5z
dHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNV
UkwodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6
U3RyaW5nVmVjdG9yOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMu
aW5zZXJ0KHsga2V5LCBzcGxpdCh2YWx1ZSwgJywnKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEtleVR5cGU6OlVua25vd246CisgICAgICAgICAgICBMT0dfRVJST1IoIlVu
a25vd24ga2V5LCAnJXMsIGluIHRlc3QgaGVhZGVyIGluICVzIiwga2V5LmNfc3RyKCksIHBhdGgu
Y19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBhaXJT
dGFydCA9IHBhaXJFbmQgKyAxOworICAgIH0KKworICAgIHJldHVybiBmZWF0dXJlczsKK30KKwor
c3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNv
bnN0IGNoYXIqIHN1YnN0cmluZykKK3sKKyAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIo
KSk7CisgICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNp
dGl2ZS4KK30KKworc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29uc3Qg
c3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInZpZXdwb3J0LyIpICYmICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlzdWFsLXZp
ZXdwb3J0LyIpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCkBAIC02MSwxMyArMjk2LDIwIEBAIHN0YXRpYyBi
b29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY28KICAgICByZXR1cm4gcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7CiB9CiAK
LXN0YXRpYyBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcm
IHBhdGhPclVSTCkKK3N0YXRpYyBPcHRpb25hbDxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiBv
dmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCkKK3sKKyAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0MtU1ZHLTEu
MSIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdcXFczQy1TVkctMS4xIikpCisgICAg
ICAgIHJldHVybiB7IHsgNDgwLCAzNjAgfSB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JU
ZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICIvaGlkcGktM3gtIikpCiAgICAgICAgIHJldHVybiAzOwogICAgIGlmIChw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLSIpKQogICAgICAgICByZXR1cm4gMjsKLSAg
ICByZXR1cm4gMTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBzdGF0aWMgYm9vbCBz
aG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCkKQEAgLTgzLDE0ICszMjUsMzggQEAgc3RhdGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxv
Z0luU3RkRQogICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4
MDAvd2Vic29ja2V0cyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0
My93ZWJzb2NrZXRzIik7CiB9CiAKLVRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQotICAgIDogdXNlRmxleGlibGVWaWV3cG9ydChzaG91bGRNYWtl
Vmlld3BvcnRGbGV4aWJsZShwYXRoT3JVUkwpKQotICAgICwgdXNlRml4ZWRMYXlvdXQoc2hvdWxk
VXNlRml4ZWRMYXlvdXQocGF0aE9yVVJMKSkKLSAgICAsIGlzU1ZHVGVzdChpc1NWR1Rlc3RQYXRo
KHBhdGhPclVSTCkpCi0gICAgLCB1c2VFcGhlbWVyYWxTZXNzaW9uKHNob3VsZFVzZUVwaGVtZXJh
bFNlc3Npb24ocGF0aE9yVVJMKSkKLSAgICAsIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihzaG91
bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIocGF0aE9yVVJMKSkKLSAgICAsIGRldmljZVNjYWxl
RmFjdG9yKGRldmljZVNjYWxlRmFjdG9yRm9yVGVzdChwYXRoT3JVUkwpKQorVGVzdEZlYXR1cmVz
IGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBj
b21tYW5kKQogeworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKworICAgIGlmIChzaG91bGRN
YWtlVmlld3BvcnRGbGV4aWJsZShjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZlYXR1cmVz
LmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIHRydWUgfSk7Cisg
ICAgaWYgKHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29tbWFuZC5wYXRoT3JVUkwpKQorICAg
ICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUVwaGVtZXJhbFNlc3Npb24i
LCB0cnVlIH0pOworICAgIGlmIChzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFu
ZC5wYXRoT3JVUkwpKQorICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIHRydWUgfSk7CisgICAgaWYgKGF1dG8gZGV2aWNlU2Nh
bGVGYWN0b3IgPSBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb21tYW5kLnBhdGhP
clVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IFdURjo6bnVsbG9wdCkKKyAgICAgICAgZmVhdHVy
ZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmljZVNjYWxlRmFjdG9yIiwgZGV2aWNlU2Nh
bGVGYWN0b3IudmFsdWUoKSB9KTsKKyAgICBpZiAoYXV0byB2aWV3V2lkdGhBbmRIZWlnaHQgPSBv
dmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwpOyB2aWV3
V2lkdGhBbmRIZWlnaHQgIT0gV1RGOjpudWxsb3B0KSB7CisgICAgICAgIGZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3V2lkdGgiLCB2aWV3V2lkdGhBbmRIZWlnaHQtPmZpcnN0
IH0pOworICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAidmlld0hlaWdo
dCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+c2Vjb25kIH0pOworICAgIH0KKworICAgIHJldHVybiBm
ZWF0dXJlczsKK30KKworVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVy
Rm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkKK3sKKyAgICByZXR1cm4gcGFyc2VU
ZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRoLCBjb21tYW5kLnBhdGhPclVSTCk7Cit9CisK
K1Rlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMgZmVhdHVyZXMpCisgICAgOiBt
X2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQoreworI2lmIERVTVBfRkVBVFVSRVMKKyAgICBzdGQ6OmNl
cnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7CisgICAgZHVtcEZlYXR1cmVzKG1fZmVhdHVyZXMp
OworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJ
KHJldmlzaW9uIDI2ODAyMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTY1ICsyNSwxNzYgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVu
b3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3Ry
dWN0IFRlc3RPcHRpb25zIHsKLSAgICBzdHJ1Y3QgQ29udGV4dE9wdGlvbnMgewotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKLSAgICAgICAgYm9vbCBpZ25vcmVTeW5j
aHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBlbmFibGVQ
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB7IHRydWUgfTsKLSAgICAgICAgYm9vbCBlbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgdXNlU2VydmljZVdv
cmtlclNob3J0VGltZW91dCB7IGZhbHNlIH07Ci0KLSAgICAgICAgYm9vbCBoYXNTYW1lSW5pdGlh
bGl6YXRpb25PcHRpb25zKGNvbnN0IENvbnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0
cyAhPSBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMKLSAgICAgICAg
ICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdlcyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2Vz
Ci0gICAgICAgICAgICAgICAgfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gIT0gb3B0
aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbgotICAgICAgICAgICAgICAgIHx8IGVu
YWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuICE9IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBP
bldpbmRvd09wZW4KLSAgICAgICAgICAgICAgICB8fCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1l
b3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGJvb2wgc2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgYm9vbCB1c2VUaHJlYWRlZFNjcm9sbGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1
c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNlUmVtb3RlTGF5ZXJU
cmVlIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dXZWJWaWV3IHsgZmFsc2UgfTsKLSAg
ICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNlRml4ZWRM
YXlvdXQgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNTVkdUZXN0IHsgZmFsc2UgfTsKLSAgICBib29s
IHVzZURhdGFEZXRlY3Rpb24geyBmYWxzZSB9OwotICAgIGJvb2wgdXNlTW9ja1Njcm9sbGJhcnMg
eyB0cnVlIH07Ci0gICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1
c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFi
bGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rp
b25PYnNlcnZlciB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFs
c2UgfTsKLSAgICBib29sIGVuYWJsZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZU1vZGVybk1l
ZGlhQ29udHJvbHMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVQb2ludGVyTG9jayB7IGZhbHNl
IH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbiB7IHRydWUgfTsKLSAgICBib29s
IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIHsgdHJ1ZSB9OwotICAg
IGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3Vs
ZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKLSAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tG
b3JDcmVkZW50aWFscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBkb21QYXN0ZUFsbG93ZWQgeyB0cnVl
IH07Ci0gICAgYm9vbCBlbmFibGVDb2xvckZpbHRlciB7IGZhbHNlIH07Ci0gICAgYm9vbCBwdW5j
aE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIHsgZmFsc2UgfTsKLSAgICBib29sIHJ1blNp
bmdseSB7IGZhbHNlIH07Ci0gICAgYm9vbCBjaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9Owot
ICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IHsgZmFsc2UgfTsKLSAgICBib29sIHNo
b3VsZFNob3dTcGVsbENoZWNraW5nRG90cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZXJ2
aWNlQ29udHJvbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZWRpdGFibGUgeyBmYWxzZSB9OwotICAg
IGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIHsgdHJ1ZSB9OwotICAgIGJvb2wgc2hvdWxk
UHJlc2VudFBvcG92ZXJzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlQXBwTmFwIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgeyBmYWxzZSB9OwotICAgIGJvb2wg
YWxsb3dzTGlua1ByZXZpZXcgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9J
blVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVBy
b2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3Mg
eyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIHsgZmFs
c2UgfTsKLSAgICBib29sIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgeyB0cnVlIH07Ci0g
ICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IHsgZmFsc2UgfTsKLSAgICBib29sIGlz
QXBwQm91bmRXZWJWaWV3IHsgZmFsc2UgfTsKLQotICAgIGRvdWJsZSBjb250ZW50SW5zZXRUb3Ag
eyAwIH07Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciB7IDEgfTsKLSAgICBzdGQ6OnN0
cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0OwotICAgIHN0ZDo6c3RyaW5nIGpzY09wdGlvbnM7Ci0g
ICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXM7Ci0gICAgc3RkOjpz
dHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMOwotICAgIEhhc2hNYXA8U3RyaW5nLCBi
b29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzOwotICAgIFN0cmluZyBjb250ZW50TW9kZTsKLSAgICBTdHJpbmcg
YXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOwotICAgIAotICAgIENvbnRleHRPcHRpb25zIGNv
bnRleHRPcHRpb25zOwotCi0gICAgVGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCk7Ci0KLSAgICAvLyBBZGQgaGVyZSBvcHRpb25zIHRoYXQgY2FuIG9ubHkgYmUgc2V0IHVw
b24gUGxhdGZvcm1XZWJWaWV3Ci0gICAgLy8gaW5pdGlhbGl6YXRpb24gYW5kIG1ha2Ugc3VyZSBp
dCdzIHVwIHRvIGRhdGUgd2hlbiBhZGRpbmcgbmV3Ci0gICAgLy8gb3B0aW9ucyB0byB0aGlzIHN0
cnVjdC4gT3RoZXJ3aXNlLCB0ZXN0cyB1c2luZyB0aG9zZSBvcHRpb25zCi0gICAgLy8gbWlnaHQg
ZmFpbCBpZiBXVFIgaXMgcmV1c2luZyBhbiBleGlzdGluZyBQbGF0Zm9ybVdlYlZpZXcuCi0gICAg
Ym9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zKSBjb25zdAorc3RydWN0IFRlc3RDb21tYW5kOworCitzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZl
YXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9v
bD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91
YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7
Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0
aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRl
c3QoY29uc3QgVGVzdENvbW1hbmQmKTsKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9t
VGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKKworc3RydWN0IENvbnRleHRP
cHRpb25zIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7
CisgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzOworICAgIGJvb2wg
ZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb247CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dh
cE9uV2luZG93T3BlbjsKKyAgICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQ7CisK
KyAgICBib29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlv
bnMmIG9wdGlvbnMpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxp
bmcgIT0gb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNj
ZWxlcmF0ZWREcmF3aW5nICE9IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAg
ICAgICB8fCB1c2VNb2NrU2Nyb2xsYmFycyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0g
ICAgICAgICAgICB8fCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzCi0gICAgICAgICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFu
dWxhcml0eSAhPSBvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAg
ICAgICAgICB8fCBlbmFibGVBdHRhY2htZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFj
aG1lbnRFbGVtZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAh
PSBvcHRpb25zLmVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VF
cGhlbWVyYWxTZXNzaW9uICE9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAg
ICAgfHwgZW5hYmxlTWVudUl0ZW1FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVt
ZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxl
S2V5Z2VuRWxlbWVudAotICAgICAgICAgICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAh
PSBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJs
ZVBvaW50ZXJMb2NrICE9IG9wdGlvbnMuZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8
IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRp
b24KLSAgICAgICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNh
dG9yICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IK
LSAgICAgICAgICAgIHx8IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJs
ZUluc3BlY3RvckFkZGl0aW9ucwotICAgICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyICE9IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBh
cHBsaWNhdGlvbk1hbmlmZXN0ICE9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAg
ICAgICAgfHwgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMg
IT0gb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFs
cwotICAgICAgICAgICAgfHwgZG9tUGFzdGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxv
d2VkCi0gICAgICAgICAgICB8fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNv
bG9yRmlsdGVyCi0gICAgICAgICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlICE9IG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAg
ICAgICAgfHwganNjT3B0aW9ucyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8
IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBv
cnRlZEltYWdlVHlwZXMKLSAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNp
bmdseQotICAgICAgICAgICAgfHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tG
b3JXb3JsZExlYWtzCi0gICAgICAgICAgICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMg
IT0gb3B0aW9ucy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVu
YWJsZVNlcnZpY2VDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAg
ICAgICAgICAgfHwgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdu
b3JlTWV0YVZpZXdwb3J0Ci0gICAgICAgICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRh
YmxlCi0gICAgICAgICAgICB8fCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5z
aG91bGRIYW5kbGVSdW5PcGVuUGFuZWwKLSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3Bv
dmVycyAhPSBvcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29u
dGVudEluc2V0VG9wICE9IG9wdGlvbnMuY29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBj
b250ZW50TW9kZSAhPSBvcHRpb25zLmNvbnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIKLSAgICAgICAgICAgIHx8IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAot
ICAgICAgICAgICAgfHwgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJh
Y2tGb3J3YXJkQ2FjaGUKLSAgICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlv
bnMuYWxsb3dzTGlua1ByZXZpZXcKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0lu
VUlQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAg
ICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJs
ZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1
ZGlvSW5VSVByb2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcwot
ICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMu
ZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5h
dmlnYXRpb25Ub0RhdGFVUkxzICE9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJM
cwotICAgICAgICAgICAgfHwgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVu
YWJsZUluQXBwQnJvd3NlclByaXZhY3kKLSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBs
aWNhdGlvblVSTCAhPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAg
ICAgICAgfHwgaXNBcHBCb3VuZFdlYlZpZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykK
KyAgICAgICAgaWYgKGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9u
cy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVy
cmlkZUxhbmd1YWdlcyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8
fCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAg
ICB8fCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdv
cmtlclNob3J0VGltZW91dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQogCi0gICAgICAgIGlmICghY29udGV4dE9wdGlvbnMuaGFzU2FtZUlu
aXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRleHRPcHRpb25zKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbiB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICB9Cit9OwogCi0g
ICAgICAgIGlmIChleHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZl
YXR1cmVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworY2xhc3MgVGVzdE9wdGlvbnMgewor
cHVibGljOgorICAgIGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAKLSAgICAg
ICAgaWYgKGludGVybmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLmludGVybmFsRGVidWdGZWF0
dXJlcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250ZXh0T3B0aW9ucyBjb250
ZXh0T3B0aW9ucygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
b3ZlcnJpZGVMYW5ndWFnZXMoKSwKKyAgICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2Fn
aW5nVGltZW91dHMoKSwKKyAgICAgICAgICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
KCksCisgICAgICAgICAgICBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAg
ICAgICAgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQor
CisgICAgYm9vbCB1c2VUaHJlYWRlZFNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VB
Y2NlbGVyYXRlZERyYXdpbmcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VB
Y2NlbGVyYXRlZERyYXdpbmciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVJlbW90ZUxheWVyVHJl
ZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVJlbW90ZUxheWVyVHJlZSIs
IGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93V2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wg
dXNlRmxleGlibGVWaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVz
ZUZsZXhpYmxlVmlld3BvcnQiLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZURhdGFEZXRlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VEYXRhRGV0ZWN0aW9uIiwgZmFs
c2UpOyB9CisgICAgYm9vbCB1c2VNb2NrU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoInVzZU1vY2tTY3JvbGxiYXJzIiwgdHJ1ZSk7IH0KKyAgICBib29sIG5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgibmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGlnbm9yZXNWaWV3cG9y
dFNjYWxlTGltaXRzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaWdub3Jlc1Zp
ZXdwb3J0U2NhbGVMaW1pdHMiLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUNoYXJhY3RlclNlbGVj
dGlvbkdyYW51bGFyaXR5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUF0
dGFjaG1lbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUludGVyc2VjdGlv
bk9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIiLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24o
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwg
ZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVNZW51SXRlbUVsZW1lbnQiLCBmYWxzZSk7IH0KKyAg
ICBib29sIGVuYWJsZUtleWdlbkVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVLZXlnZW5FbGVtZW50IiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVNb2Rl
cm5NZWRpYUNvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
TW9kZXJuTWVkaWFDb250cm9scyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVQb2ludGVyTG9j
aygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVBvaW50ZXJMb2NrIiwg
ZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgdHJ1ZSk7IH0K
KyAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2Nh
bEF1dGhlbnRpY2F0b3IiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRp
b25zKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5zcGVjdG9yQWRk
aXRpb25zIiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcygpIGNvbnN0IHsg
cmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFNob3dUb3VjaGVzIiwgZmFsc2UpOyB9Cisg
ICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSBjb25zdCB7IHJldHVybiBib29sRmVh
dHVyZVZhbHVlKCJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBmYWxzZSk7IH0KKyAgICBib29s
IGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1Rv
QXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGRvbVBhc3RlQWxsb3dlZCgp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImRvbVBhc3RlQWxsb3dlZCIsIHRydWUp
OyB9CisgICAgYm9vbCBlbmFibGVDb2xvckZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZUNvbG9yRmlsdGVyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBwdW5jaE91
dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIsIGZhbHNlKTsgfQorICAg
IGJvb2wgcnVuU2luZ2x5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgicnVuU2lu
Z2x5IiwgZmFsc2UpOyB9CisgICAgYm9vbCBjaGVja0ZvcldvcmxkTGVha3MoKSBjb25zdCB7IHJl
dHVybiBib29sRmVhdHVyZVZhbHVlKCJjaGVja0ZvcldvcmxkTGVha3MiLCBmYWxzZSk7IH0KKyAg
ICBib29sIHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIsIGZhbHNlKTsgfQorICAgIGJvb2wg
c2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgic3BlbGxDaGVja2luZ0RvdHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVNlcnZp
Y2VDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVNlcnZp
Y2VDb250cm9scyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZWRpdGFibGUoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJlZGl0YWJsZSIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxk
SGFuZGxlUnVuT3BlblBhbmVsKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hv
dWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgdHJ1ZSk7IH0KKyAgICBib29sIHNob3VsZFByZXNlbnRQ
b3BvdmVycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFByZXNlbnRQ
b3BvdmVycyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVBcHBOYXAoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVBcHBOYXAiLCBmYWxzZSk7IH0KKyAgICBib29sIGVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJl
bmFibGVCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UpOyB9CisgICAgYm9vbCBhbGxvd3NMaW5rUHJl
dmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImFsbG93c0xpbmtQcmV2aWV3
IiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nl
c3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRlb0luR1BV
UHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nl
c3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDYXB0dXJlQXVkaW9J
blVJUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQ
cm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZUF1
ZGlvSW5HUFVQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25U
b0RhdGFVUkxzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQ
cml2YWN5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5BcHBCcm93
c2VyUHJpdmFjeSIsIGZhbHNlKTsgfQorICAgIGJvb2wgaXNBcHBCb3VuZFdlYlZpZXcoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpc0FwcEJvdW5kV2ViVmlldyIsIGZhbHNlKTsg
fQorICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cygpIGNvbnN0IHsg
cmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91
dHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24iLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4o
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9jZXNzU3dhcE9uV2lu
ZG93T3BlbiIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91
dCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVNlcnZpY2VXb3JrZXJTaG9y
dFRpbWVvdXQiLCBmYWxzZSk7IH0KKyAgICBkb3VibGUgY29udGVudEluc2V0VG9wKCkgY29uc3Qg
eyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJjb250ZW50SW5zZXQudG9wIiwgMCk7IH0KKyAg
ICBkb3VibGUgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJl
VmFsdWUoImRldmljZVNjYWxlRmFjdG9yIiwgMSk7IH0KKyAgICBkb3VibGUgdmlld1dpZHRoKCkg
Y29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJ2aWV3V2lkdGgiLCA4MDApOyB9Cisg
ICAgZG91YmxlIHZpZXdIZWlnaHQoKSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUo
InZpZXdIZWlnaHQiLCA2MDApOyB9CisgICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVz
dCgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25NYW5pZmVz
dCIsIHsgfSk7IH0KKyAgICBzdGQ6OnN0cmluZyBqc2NPcHRpb25zKCkgY29uc3QgeyByZXR1cm4g
c3RyaW5nRmVhdHVyZVZhbHVlKCJqc2NPcHRpb25zIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5n
IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVh
dHVyZVZhbHVlKCJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHsgfSk7IH0KKyAgICBz
dGQ6OnN0cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwoKSBjb25zdCB7IHJldHVybiBz
dHJpbmdGZWF0dXJlVmFsdWUoInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIHsgfSk7IH0K
KyAgICBzdGQ6OnN0cmluZyBjb250ZW50TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1
cmVWYWx1ZSgiY29udGVudE1vZGUiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJh
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiLCB7IH0pOyB9CisgICAgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVmVjdG9y
RmVhdHVyZVZhbHVlKCJsYW5ndWFnZSIsIHsgfSk7IH0KIAorICAgIGNvbnN0IHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGV4cGVyaW1lbnRhbEZlYXR1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGludGVybmFsRGVidWdGZWF0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOyB9CisK
KyAgICBib29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mZWF0dXJlcy5leHBlcmltZW50
YWxGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVz
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5ib29s
RmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmJvb2xGZWF0dXJlcykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMgIT0g
b3B0aW9ucy5tX2ZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcyAhPSBvcHRpb25zLm1f
ZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0
dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCBmZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBUIGRlZmF1bHRWYWx1
ZSwgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUPiYgbWFwKSBjb25zdAor
ICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7CisgICAgICAgIGlmIChpdCAh
PSBtYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHRWYWx1ZTsKKyAgICB9CisKKyAgICBib29sIGJvb2xGZWF0dXJlVmFsdWUoc3Rk
OjpzdHJpbmcga2V5LCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuYm9vbEZlYXR1
cmVzKTsKKyAgICB9CisgICAgZG91YmxlIGRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBr
ZXksIGRvdWJsZSBkZWZhdWx0VmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmVh
dHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2ZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKTsK
KyAgICB9CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtl
eSwgc3RkOjpzdHJpbmcgZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJl
cyk7CisgICAgfQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJpbmdWZWN0b3JGZWF0
dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVmYXVs
dFZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRl
ZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcyk7CisgICAgfQorCisg
ICAgVGVzdEZlYXR1cmVzIG1fZmVhdHVyZXM7CiB9OwogCiB9CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCShyZXZpc2lv
biAyNjgwMjEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVy
Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCwyNyArMTE0LDI4IEBAIFdLUHJlZmVyZW5j
ZXNSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3IKICAgICByZXR1cm4gKF9fYnJpZGdlIFdLUHJl
ZmVyZW5jZXNSZWYpZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXM7CiB9CiAK
LXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMm
IG9wdGlvbnMpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3Bl
Y2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikg
Y29uc3QKIHsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisKICAgICBpZiAoW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkVuYWJsZVByb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uIl0pCi0gICAgICAgIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gPSB0cnVlOworICAgICAgICBmZWF0dXJlcy5ib29sRmVh
dHVyZXMuaW5zZXJ0KHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgdHJ1ZSB9KTsK
ICAgICBpZiAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktl
eTpAIkVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuIl0pCi0gICAgICAgIG9wdGlvbnMuY29u
dGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gPSB0cnVlOworICAgICAg
ICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZVByb2Nlc3NTd2FwT25XaW5k
b3dPcGVuIiwgdHJ1ZSB9KTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG9w
dGlvbnMuZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSkKLSAgICAgICAgW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0Qm9vbDpZRVMgZm9yS2V5OkAiV2ViS2l0RGVidWdJ
c0luQXBwQnJvd3NlclByaXZhY3lFbmFibGVkIl07Ci0jZW5kaWYKKyAgICByZXR1cm4gZmVhdHVy
ZXM7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9y
ZShXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uIHx8IG9wdGlvbnMuc3RhbmRhbG9u
ZVdlYkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKSB7Ci0gICAgICAgIGF1dG8gd2Vic2l0ZURhdGFT
dG9yZUNvbmZpZyA9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA/IFtbW19XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0Tm9uUGVyc2lzdGVudENvbmZpZ3VyYXRp
b25dIGF1dG9yZWxlYXNlXSA6IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVy
YWxTZXNzaW9uKQorICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiA9IG9wdGlvbnMudXNlRXBo
ZW1lcmFsU2Vzc2lvbigpOworICAgIGF1dG8gc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMID0g
b3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwoKTsKKyAgICBpZiAodXNlRXBoZW1l
cmFsU2Vzc2lvbiB8fCBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkpIHsKKyAg
ICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnID0gdXNlRXBoZW1lcmFsU2Vzc2lvbiA/
IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0Tm9uUGVyc2lz
dGVudENvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSA6IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmICghdXNl
RXBoZW1lcmFsU2Vzc2lvbikKICAgICAgICAgICAgIGNvbmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVU
ZW1wb3JhcnlEaXJlY3RvcmllcygoV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblJlZil3
ZWJzaXRlRGF0YVN0b3JlQ29uZmlnKTsKLSAgICAgICAgaWYgKG9wdGlvbnMuc3RhbmRhbG9uZVdl
YkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKQotICAgICAgICAgICAgW3dlYnNpdGVEYXRhU3RvcmVD
b25maWcgc2V0U3RhbmRhbG9uZUFwcGxpY2F0aW9uVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltO
U1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNh
dGlvblVSTC5jX3N0cigpXV1dOworICAgICAgICBpZiAoc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMLmxlbmd0aCgpKQorICAgICAgICAgICAgW3dlYnNpdGVEYXRhU3RvcmVDb25maWcgc2V0U3Rh
bmRhbG9uZUFwcGxpY2F0aW9uVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzpzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1dXTsK
ICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gKF9fYnJpZGdlIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZilbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246
d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ10gYXV0b3JlbGVhc2VdOwogICAgIH0gZWxzZQogICAgICAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUgPSAoX19icmlkZ2UgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKWds
b2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmU7CkBAIC0xNDUsMzIgKzE0
NiwzMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZVdlYlZpCiAgICAgYXV0
byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRp
b24gY29weV0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAob3B0aW9ucy51
c2VEYXRhRGV0ZWN0aW9uKQorICAgIGlmIChvcHRpb25zLnVzZURhdGFEZXRlY3Rpb24oKSkKICAg
ICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0RGF0YURldGVjdG9yVHlwZXM6V0tEYXRhRGV0
ZWN0b3JUeXBlQWxsXTsKLSAgICBpZiAob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cykKKyAgICBpZiAob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpKQogICAgICAg
ICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0czpZRVNd
OwotICAgIGlmIChvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5KQorICAg
IGlmIChvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5KCkpCiAgICAgICAg
IFtjb3BpZWRDb25maWd1cmF0aW9uIHNldFNlbGVjdGlvbkdyYW51bGFyaXR5OldLU2VsZWN0aW9u
R3JhbnVsYXJpdHlDaGFyYWN0ZXJdOwotICAgIGlmIChvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3
KQorICAgIGlmIChvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KCkpCiAgICAgICAgIFtjb3BpZWRD
b25maWd1cmF0aW9uIHNldExpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnM6WUVTXTsK
ICNlbHNlCi0gICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldFNlcnZpY2VDb250cm9sc0VuYWJs
ZWQ6b3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHNdOworICAgIFtjb3BpZWRDb25maWd1cmF0
aW9uIF9zZXRTZXJ2aWNlQ29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxlU2VydmljZUNvbnRy
b2xzKCldOwogI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVu
dCkKKyAgICBpZiAob3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCgpKQogICAgICAgICBb
Y29waWVkQ29uZmlndXJhdGlvbiBfc2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVkOllFU107CiAK
LSAgICBpZiAob3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcikKKyAgICBpZiAob3B0aW9ucy5lbmFi
bGVDb2xvckZpbHRlcigpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0Q29sb3JG
aWx0ZXJFbmFibGVkOllFU107CiAKICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRXZWJzaXRl
RGF0YVN0b3JlOihXS1dlYnNpdGVEYXRhU3RvcmUgKil3ZWJzaXRlRGF0YVN0b3JlKCldOwogCi0g
ICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6
b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzXTsKKyAgICBbY29waWVkQ29uZmln
dXJhdGlvbiBfc2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMczpvcHRpb25zLmFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMoKV07CiAKICAgICBjb25maWd1cmVDb250ZW50TW9kZShjb3Bp
ZWRDb25maWd1cmF0aW9uLmdldCgpLCBvcHRpb25zKTsKIAotICAgIGlmIChvcHRpb25zLmFwcGxp
Y2F0aW9uTWFuaWZlc3QubGVuZ3RoKCkpIHsKLSAgICAgICAgYXV0byBtYW5pZmVzdFBhdGggPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6b3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0
LmNfc3RyKCldOworICAgIGF1dG8gYXBwbGljYXRpb25NYW5pZmVzdCA9IG9wdGlvbnMuYXBwbGlj
YXRpb25NYW5pZmVzdCgpOworICAgIGlmIChhcHBsaWNhdGlvbk1hbmlmZXN0Lmxlbmd0aCgpKSB7
CisgICAgICAgIGF1dG8gbWFuaWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOmFwcGxpY2F0aW9uTWFuaWZlc3QuY19zdHIoKV07CiAgICAgICAgIE5TU3RyaW5nICp0ZXh0
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTptYW5pZmVzdFBhdGggdXNlZEVu
Y29kaW5nOm51bGxwdHIgZXJyb3I6bnVsbHB0cl07CiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0
aW9uIF9zZXRBcHBsaWNhdGlvbk1hbmlmZXN0OltfV0tBcHBsaWNhdGlvbk1hbmlmZXN0IGFwcGxp
Y2F0aW9uTWFuaWZlc3RGcm9tSlNPTjp0ZXh0IG1hbmlmZXN0VVJMOm5pbCBkb2N1bWVudFVSTDpu
aWxdXTsKICAgICB9CkBAIC0xNzgsMTMgKzE4MCwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybUNyZWF0ZVdlYlZpCiAgICAgbV9tYWluV2ViVmlldyA9IG1ha2VVbmlxdWU8UGxhdGZv
cm1XZWJWaWV3Pihjb3BpZWRDb25maWd1cmF0aW9uLmdldCgpLCBvcHRpb25zKTsKICAgICBmaW5p
c2hDcmVhdGluZ1BsYXRmb3JtV2ViVmlldyhtX21haW5XZWJWaWV3LmdldCgpLCBvcHRpb25zKTsK
IAotICAgIGlmIChvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpCisg
ICAgaWYgKG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSgpKQogICAg
ICAgICBtX21haW5XZWJWaWV3LT5zZXREcmF3c0JhY2tncm91bmQoZmFsc2UpOwogCi0gICAgaWYg
KG9wdGlvbnMuZWRpdGFibGUpCisgICAgaWYgKG9wdGlvbnMuZWRpdGFibGUoKSkKICAgICAgICAg
bV9tYWluV2ViVmlldy0+c2V0RWRpdGFibGUodHJ1ZSk7CiAKLSAgICBtX21haW5XZWJWaWV3LT5w
bGF0Zm9ybVZpZXcoKS5hbGxvd3NMaW5rUHJldmlldyA9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZp
ZXc7CisgICAgbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxsb3dzTGlua1ByZXZpZXcg
PSBvcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3KCk7CiAgICAgW21fbWFpbldlYlZpZXctPnBsYXRm
b3JtVmlldygpIF9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlv
bkZvclRlc3Rpbmc6WUVTXTsKIH0KIApAQCAtMjAzLDcgKzIwNSw3IEBAIFBsYXRmb3JtV2ViVmll
dyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3IKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmZpbmlzaENy
ZWF0aW5nUGxhdGZvcm1XZWJWaWV3KFBsYXRmb3JtV2ViVmlldyogdmlldywgY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChvcHRpb25zLnNo
b3VsZFNob3dXZWJWaWV3KQorICAgIGlmIChvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KCkpCiAg
ICAgICAgIFt2aWV3LT5wbGF0Zm9ybVdpbmRvdygpIG9yZGVyRnJvbnQ6bmlsXTsKICAgICBlbHNl
CiAgICAgICAgIFt2aWV3LT5wbGF0Zm9ybVdpbmRvdygpIG9yZGVyQmFjazpuaWxdOwpAQCAtMjYz
LDEyICsyNjUsMTIgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaQog
ICAgIH0KIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBzdGQ6OnN0cmluZyYgYnVu
ZGxlSWRlbnRpZmllcikKIHsKLSAgICBpZiAoYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpCisg
ICAgaWYgKGJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIFtUZXN0UnVubmVyV0tXZWJWaWV3IF9zZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI6
KE5TU3RyaW5nICopYnVuZGxlSWRlbnRpZmllci5jcmVhdGVDRlN0cmluZygpLmdldCgpXTsKKyAg
ICBbVGVzdFJ1bm5lcldLV2ViVmlldyBfc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOihO
U1N0cmluZyAqKXRvV1RGU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIpLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCldOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllclRlc3RpbmdPdmVycmlkZSgpCkBAIC0yODYsNyArMjg4LDcgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6Y29jb2FSZXNldFN0YXRlVG9DbwogICAgICAgICBUZXN0UnVubmVyV0tXZWJW
aWV3ICpwbGF0Zm9ybVZpZXcgPSB3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKTsKICAgICAgICAgcGxh
dGZvcm1WaWV3Ll92aWV3U2NhbGUgPSAxOwogICAgICAgICBwbGF0Zm9ybVZpZXcuX21pbmltdW1F
ZmZlY3RpdmVEZXZpY2VXaWR0aCA9IDA7Ci0gICAgICAgIFtwbGF0Zm9ybVZpZXcgX3NldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6b3B0aW9ucy5zaG91bGRTaG93U3Bl
bGxDaGVja2luZ0RvdHNdOworICAgICAgICBbcGxhdGZvcm1WaWV3IF9zZXRDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tp
bmdEb3RzKCldOwogICAgICAgICBbcGxhdGZvcm1WaWV3IHJlc2V0SW50ZXJhY3Rpb25DYWxsYmFj
a3NdOwogICAgICAgICBbcGxhdGZvcm1WaWV3IF9yZXNldE5hdmlnYXRpb25HZXN0dXJlU3RhdGVG
b3JUZXN0aW5nXTsKICAgICB9CkBAIC0yOTcsNiArMjk5LDExIEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmNvY29hUmVzZXRTdGF0ZVRvQ28KIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2ls
bFJ1blRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3RJbnZvY2F0aW9uKQogewogICAgIHNl
dENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0luZm9ybWF0aW9uVG9VUkwodGVzdEludm9j
YXRpb24udXJsKCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAodGVzdElu
dm9jYXRpb24ub3B0aW9ucygpLmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3koKSkKKyAgICAgICAg
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0Qm9vbDpZRVMgZm9yS2V5
OkAiV2ViS2l0RGVidWdJc0luQXBwQnJvd3NlclByaXZhY3lFbmFibGVkIl07CisjZW5kaWYKIH0K
IAogc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGUgPSBAIkFwcGxl
IFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7CkBAIC00ODcsMTIgKzQ5NCwxMSBAQCBib29s
IFRlc3RDb250cm9sbGVyOjppc0RvaW5nTWVkaWFDYXB0dXJlCiAKIHN0YXRpYyBXS0NvbnRlbnRN
b2RlIGNvbnRlbnRNb2RlKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChv
cHRpb25zLmNvbnRlbnRNb2RlID09ICJkZXNrdG9wIl9zKQorICAgIGF1dG8gbW9kZSA9IG9wdGlv
bnMuY29udGVudE1vZGUoKTsKKyAgICBpZiAobW9kZSA9PSAiZGVza3RvcCIpCiAgICAgICAgIHJl
dHVybiBXS0NvbnRlbnRNb2RlRGVza3RvcDsKLQotICAgIGlmIChvcHRpb25zLmNvbnRlbnRNb2Rl
ID09ICJtb2JpbGUiX3MpCisgICAgaWYgKG1vZGUgPT0gIm1vYmlsZSIpCiAgICAgICAgIHJldHVy
biBXS0NvbnRlbnRNb2RlTW9iaWxlOwotCiAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVSZWNvbW1l
bmRlZDsKIH0KIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xs
ZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RD
b250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsOSAr
MTUwLDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKICAgICBt
X21haW5XZWJWaWV3LT5kaXNtaXNzQWxsUG9wdXBNZW51cygpOwogfQogCi12b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRp
b25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMgPSBmYWxzZTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMu
Ym9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgZmFsc2Ug
fSk7CisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1BsYXRmb3JtV2ViVmlld0lPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0J
KHJldmlzaW9uIDI2ODAyMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1BsYXRmb3Jt
V2ViVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIFBsYXRmb3Jt
V2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmkKICAgICA6IG1fd2luZG93SXNLZXkodHJ1
ZSkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogewotICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0
TWFrZSgwLCAwLCBUZXN0Q29udHJvbGxlcjo6dmlld1dpZHRoLCBUZXN0Q29udHJvbGxlcjo6dmll
d0hlaWdodCk7CisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIG9wdGlvbnMudmll
d1dpZHRoKCksIG9wdGlvbnMudmlld0hlaWdodCgpKTsKIAogICAgIG1fd2luZG93ID0gW1tXZWJL
aXRUZXN0UnVubmVyV2luZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJlY3RdOwogICAgIG1fd2lu
ZG93LmJhY2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGxpZ2h0R3JheUNvbG9yXTsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZp
c2lvbiAyNjgwMjEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxl
cklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAgICB9CiAKICAgICBtX3ByZXNlbnRQb3BvdmVy
U3dpenpsZXJzLmNsZWFyKCk7Ci0gICAgaWYgKCFvcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVy
cykgeworICAgIGlmICghb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMoKSkgewogI2lmIFVT
RShVSUNPTlRFWFRNRU5VKQogICAgICAgICBtX3ByZXNlbnRQb3BvdmVyU3dpenpsZXJzLmFwcGVu
ZChtYWtlVW5pcXVlPEluc3RhbmNlTWV0aG9kU3dpenpsZXI+KFtVSUNvbnRleHRNZW51SW50ZXJh
Y3Rpb24gY2xhc3NdLCBAc2VsZWN0b3IoX3ByZXNlbnRNZW51QXRMb2NhdGlvbjopLCByZWludGVy
cHJldF9jYXN0PElNUD4ob3ZlcnJpZGVQcmVzZW50TWVudU9yUG9wb3Zlck9yVmlld0NvbnRyb2xs
ZXIpKSk7CiAjZW5kaWYKQEAgLTIxMyw4ICsyMTMsMTAgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1SZXNldFN0YXRlVAogICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSB3
ZWJWaWV3LnNjcm9sbFZpZXc7CiAgICAgICAgIFtzY3JvbGxWaWV3IF9yZW1vdmVBbGxBbmltYXRp
b25zOllFU107CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldFpvb21TY2FsZToxIGFuaW1hdGVkOk5P
XTsKLSAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNNYWtlKG9w
dGlvbnMuY29udGVudEluc2V0VG9wLCAwLCAwLCAwKTsKLSAgICAgICAgc2Nyb2xsVmlldy5jb250
ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2UoMCwgLW9wdGlvbnMuY29udGVudEluc2V0VG9wKTsKKyAg
ICAgICAgCisgICAgICAgIGF1dG8gY29udGVudEluc2V0VG9wID0gb3B0aW9ucy5jb250ZW50SW5z
ZXRUb3AoKTsKKyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNN
YWtlKGNvbnRlbnRJbnNldFRvcCwgMCwgMCwgMCk7CisgICAgICAgIHNjcm9sbFZpZXcuY29udGVu
dE9mZnNldCA9IENHUG9pbnRNYWtlKDAsIC1jb250ZW50SW5zZXRUb3ApOwogCiAgICAgICAgIGlm
ICh3ZWJWaWV3LmludGVyYWN0aW5nV2l0aEZvcm1Db250cm9sKQogICAgICAgICAgICAgc2hvdWxk
UmVzdG9yZUZpcnN0UmVzcG9uZGVyID0gW3dlYlZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJdOwpA
QCAtMjY1LDEyICsyNjcsMTQgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0
YXRlVAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0
KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogeworICAgIFtbR2VuZXJhdGVkVG91Y2hlc0Rl
YnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gc2V0U2hvdWxkU2hv
d1RvdWNoZXM6dGVzdC5vcHRpb25zKCkuc2hvdWxkU2hvd1RvdWNoZXMoKV07CisKICAgICBUZXN0
UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0gbWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7
CiAKLSAgICBpZiAodGVzdC5vcHRpb25zKCkuc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0KQorICAg
IGlmICh0ZXN0Lm9wdGlvbnMoKS5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQoKSkKICAgICAgICAg
d2ViVmlldy5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzLl9zaG91bGRJZ25vcmVNZXRhVmlld3Bv
cnQgPSBZRVM7CiAKLSAgICBpZiAoIXRlc3Qub3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQp
CisgICAgaWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIENHUmVjdCBzY3JlZW5Cb3VuZHMgPSBbVUlTY3JlZW4gbWFpblNjcmVl
bl0uYm91bmRzOwpAQCAtMjkxLDEwICsyOTUsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUNvbmZpZ3VyZVZpCiAgICAgLy8gV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0
Q29uZmlndXJhdGlvbihmYWxzZSkuCiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBs
YXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNv
bnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBj
b25zdAogewotICAgIG9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXMgPSBzaG91bGRTaG93VG91Y2hl
cygpOwotICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRv
dWNoZXNEZWJ1Z1dpbmRvd10gc2V0U2hvdWxkU2hvd1RvdWNoZXM6b3B0aW9ucy5zaG91bGRTaG93
VG91Y2hlc107CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplQ29udGV4dCgpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCShyZXZpc2lvbiAyNjgwMjEpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDE4ICs2MSwxOCBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhX
S1dlYlZpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKIHsKICAgICAvLyBGSVhNRTogTm90IHN1
cmUgdGhpcyBpcyB0aGUgYmVzdCBwbGFjZSBmb3IgdGhpczsgbWF5YmUgd2Ugc2hvdWxkIGhhdmUg
QVBJIHRvIHNldCB0aGlzIHNvIHdlIGNhbiBkbyBpdCBmcm9tIFRlc3RDb250cm9sbGVyPwotICAg
IGlmIChtX29wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlKQorICAgIGlmIChtX29wdGlvbnMudXNl
UmVtb3RlTGF5ZXJUcmVlKCkpCiAgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdIHNldFZhbHVlOkBZRVMgZm9yS2V5OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhIl07CiAKICAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtjb25maWd1cmF0aW9uIGNvcHldKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0VGhyZWFkZWRTY3Jv
bGxpbmdFbmFibGVkKChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKVtjb3BpZWRDb25maWd1cmF0
aW9uIHByZWZlcmVuY2VzXSwgbV9vcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0VGhyZWFkZWRTY3JvbGxpbmdFbmFibGVkKChfX2JyaWRnZSBXS1ByZWZl
cmVuY2VzUmVmKVtjb3BpZWRDb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSwgbV9vcHRpb25zLnVz
ZVRocmVhZGVkU2Nyb2xsaW5nKCkpOwogCi0gICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAs
IDAsIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0
KTsKKyAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgb3B0aW9ucy52aWV3V2lkdGgo
KSwgb3B0aW9ucy52aWV3SGVpZ2h0KCkpOwogICAgIG1fdmlldyA9IFtbVGVzdFJ1bm5lcldLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0IGNvbmZpZ3VyYXRpb246Y29waWVkQ29uZmln
dXJhdGlvbi5nZXQoKV07CiAgICAgW21fdmlldyBfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9u
RW5hYmxlZDpOT107CiAKICAgICBOU1NjcmVlbiAqZmlyc3RTY3JlZW4gPSBbW05TU2NyZWVuIHNj
cmVlbnNdIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBtX29wdGlv
bnMuc2hvdWxkU2hvd1dlYlZpZXcgPyBOU09mZnNldFJlY3QocmVjdCwgMTAwLCAxMDApIDogTlNP
ZmZzZXRSZWN0KHJlY3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVuIGZyYW1lXS5zaXplLmhlaWdodCAt
IHJlY3Quc2l6ZS5oZWlnaHQgKyAxMDAwMCk7CisgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBtX29w
dGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcoKSA/IE5TT2Zmc2V0UmVjdChyZWN0LCAxMDAsIDEwMCkg
OiBOU09mZnNldFJlY3QocmVjdCwgLTEwMDAwLCBbZmlyc3RTY3JlZW4gZnJhbWVdLnNpemUuaGVp
Z2h0IC0gcmVjdC5zaXplLmhlaWdodCArIDEwMDAwKTsKICAgICBtX3dpbmRvdyA9IFtbV2ViS2l0
VGVzdFJ1bm5lcldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dSZWN0IHN0
eWxlTWFzazpOU1dpbmRvd1N0eWxlTWFza0JvcmRlcmxlc3MgYmFja2luZzooTlNCYWNraW5nU3Rv
cmVUeXBlKV9OU0JhY2tpbmdTdG9yZVVuYnVmZmVyZWQgZGVmZXI6WUVTXTsKICAgICBtX3dpbmRv
dy5wbGF0Zm9ybVdlYlZpZXcgPSB0aGlzOwogICAgIFttX3dpbmRvdyBzZXRDb2xvclNwYWNlOltm
aXJzdFNjcmVlbiBjb2xvclNwYWNlXV07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9UZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE3MiwxMSArMTcyLDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRT
dGF0ZVQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRl
UGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywg
Y29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYp
IGNvbnN0CiB7Ci0gICAgb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHRydWU7Ci0gICAg
b3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUgPSBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUoKTsK
LSAgICBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gc2hvdWxkU2hvd1dlYlZpZXcoKTsKKyAg
ICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2Vy
dCh7ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIHRydWUgfSk7CisgICAgcmV0dXJuIGZlYXR1cmVz
OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9y
VGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkocmV2aXNpb24gMjY4MDIx
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpz
ZXRXaW5kb3dGcmFtZShXS1IKICAgICAgICAgU1dQX05PTU9WRSB8IFNXUF9OT1pPUkRFUiB8IFNX
UF9OT0FDVElWQVRFIHwgU1dQX05PQ09QWUJJVFMpOwogCiAgICAgVUlOVCBmbGFncyA9IFNXUF9O
T1pPUkRFUiB8IFNXUF9OT0FDVElWQVRFIHwgU1dQX05PQ09QWUJJVFM7Ci0gICAgaWYgKG1fb3B0
aW9ucy5zaG91bGRTaG93V2ViVmlldykKKyAgICBpZiAobV9vcHRpb25zLnNob3VsZFNob3dXZWJW
aWV3KCkpCiAgICAgICAgIGZsYWdzIHw9IFNXUF9OT01PVkU7CiAgICAgOjpTZXRXaW5kb3dQb3Mo
CiAgICAgICAgIG1fd2luZG93LApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVz
dENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
d2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjcsOSArMjI3LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFByZWZl
cgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0
ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmLCBjb25zdCBz
dGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
U3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xs
ZXJXUEUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RD
b250cm9sbGVyV1BFLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOSAr
MTM2LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKIHsKIH0K
IAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25z
Rm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAor
VGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFi
bGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVz
OworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFD
b250cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RSCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410730</attachid>
            <date>2020-10-06 20:41:11 -0700</date>
            <delta_ts>2020-10-07 15:17:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217390-20201006204110.patch</filename>
            <type>text/plain</type>
            <size>101771</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODExMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1OSBAQAorMjAyMC0xMC0wNiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgVGVzdE9wdGlvbnMgY29kZSBpbiBXZWJLaXRUZXN0UnVubmVyIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHJhdGlvbmFsaXplIGFuZCBleHRlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzM5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBUZXN0T3B0aW9ucyBjb2Rl
IGluIFdlYktpdFRlc3RSdW5uZXIgdG8gbWFrZSBpdCBjbGVhciBob3cgb3B0aW9ucyBjb21pbmcg
aW4gYXQgCisgICAgICAgIGRpZmZlcmVudCBsZXZlbHMgYXJlIHRyZWF0ZWQgYW5kIHdoYXQgcHJl
Y2VkZW5jZSBlYWNoIGhhcy4gVGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAg
ICAgICAKKyAgICAgICAgLSBHbG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5u
ZXIgdmlhIHRoZSBjb21tYW5kIGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0g
SGFyZGNvZGVkIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1
biAoaG9wZWZ1bGx5IHdlIGNhbiByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVk
IHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09T
IGZvciB1c2VUaHJlYWRlZFNjcm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSB0aGUg
dGVzdCBoZWFkZXJzIHdpdGhpbiB0aGUgdGVzdCBpdHNlbGYuCisgICAgICAgIC0gRmluYWxseSwg
YSBzZWNvbmQgY2hhbmNlIGZvciBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJy
ZW5seSBvbmx5IHVzZWQgdGhlIENvY29hIHBvcnRzCisgICAgICAgICAgZm9yIHNldHRpbmcgZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gYW5kIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dP
cGVuIGJhc2VkIG9uIE5TVXNlckRlZmF1bHRzLikKKworICAgICAgICBUbyBtYWtlIHRoaXMgY2hh
bmdlIHdvcmssIGFuZCBwYXZlIHRoZSB3YXkgZm9yIGZ1dHVyZSBhdXRvZ2VuZXJhdGlvbiBvZiBz
b21lIG9mIHRoZXNlIHRlc3Qgb3B0aW9ucywKKyAgICAgICAgdGhlIFRlc3RPcHRpb25zIHN0cnVj
dCAobm93IGNsYXNzKSB3YXMgb3ZlcmhhdWxlZC4gSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBzdGF0
ZSBpdHNlbGYsIFRlc3RPcHRpb25zCisgICAgICAgIGlzIG5vdyBhbiBpbW11dGFibGUgb3duZXIg
b2YgYSBUZXN0RmVhdHVyZXMgb2JqZWN0LiBUZXN0RmVhdHVyZXMgaXMgYSBzaW1wbGUgc3RydWN0
IHRoYXQgY29udGFpbnMgbWFwcyAKKyAgICAgICAgb2Ygb3B0aW9uIGtleXMgdG8gdmFsdWVzIGFu
ZCBjYW4gYmUgbWVyZ2VkIHdpdGggb3RoZXIgVGVzdEZlYXR1cmVzIG9iamVjdHMuIFRlc3RPcHRp
b25zIHRha2VzIGEgCisgICAgICAgIFRlc3RGZWF0dXJlcyBhdCBjb25zdHJ1Y3Rpb24sIGFuZCBl
eHBvc2VzIGdldHRlcnMgZm9yIGFsbCBrZXlzLCBhcyB3ZWxsIGFzIGRlZmF1bHRzIGZvciB3aGVu
IHRoZXkgYXJlCisgICAgICAgIG5vdCBpbiB0aGUgbWFwcy4gSW4gZnV0dXJlIGNoYW5nZXMsIEkg
d291bGQgbGlrZSB0byByZW1vdmUgbWFueSBvZiB0aGVzZSAodGhlIG9uZXMgdGhhdCBjb3JyZXNw
b25kCisgICAgICAgIHdpdGggV2ViS2l0IHByZWZlcmVuY2VzIGFueXdheSkgYW5kIGhhdmUgdGhl
IGtleXMgYW5kIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGRlYWx0IHdpdGggYnkgV0tQcmVmZXJlbmNl
cy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHA6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmg6CisgICAgICAgIFN3aXRjaCB0byBzdGQ6OnVub3Jk
ZXJlZF9tYXAgZm9yIGNvbnNpc3RlbmN5IGFuZCBlYXNlIG9mIGNvbnZlcnNpb24uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gY2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAg
ICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAgQWRkIGNvbnZlcnNpb25zIGZvciBzdGQ6
OnN0cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICBSZXBsYWNlIHNvbWUg
Ym9vbHMgd2l0aCBhIG5ldyBnbG9iYWwgVGVzdEZlYXR1cmVzIGluc3RhbmNlIHRoYXQgZm9ybXMg
dGhlIGJhc2Ugb2YKKyAgICAgICAgYWxsIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
biBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdX
aXRoT3B0aW9ucyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNl
dFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwpOgorICAgICAgICBFeHBvc2UgYXMgYSBzdGF0
aWMgbWVtYmVyIGZ1bmN0aW9uIG9uIFRlc3RDb250cm9sbGVyIGZvciB1c2UgaW4gb3RoZXIgZmls
ZXMuCisgICAgICAgIAorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNG
b3JUZXN0IGNvbnN0KToKKyAgICAgICAgUmV3b3JrIHRvIGJlIGEgc2VxdWVuY2Ugb2YgVGVzdEZl
YXR1cmVzIG1lcmdlcy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRl
c3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmNyZWF0ZVRlc3RV
UkwpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVs
YXRpdmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVhZGVy
VmFsdWVBc1VSTCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnVwZGF0ZVRlc3RPcHRpb25zRnJv
bVRlc3RIZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGRUZXN0T3B0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmVkIFRlc3RP
cHRpb25zIHBhcnNpbmcgdG8gVGVzdE9wdGlvbnMuY3BwCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCBu
ZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0T3B0aW9ucy5oOgorICAgICAgICBSZXdvcmtzIFRlc3RPcHRpb25zIHRvIGJlIGFuIGltbXV0
YWJsZSBvd25lciBvZiBhIFRlc3RGZWF0dXJlcyBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2V0CisgICAg
ICAgIG9mIG1hcHMgdGhhdCBtYXAgZmVhdHVyZSBzdHJpbmcga2V5cywgdG8gdmFsdWVzIG9mIHR5
cGUgYm9vbCwgZG91YmxlLCBzdHJpbmcgb3Igc3RyaW5nIHZlY3Rvci4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjptZXJnZSk6Cisg
ICAgICAgIE1lcmdlcyB0d28gVGVzdEZlYXR1cmVzIG9iamVjdHMuIElmIGJvdGggY29udGFpbiB0
aGUgc2FtZSBrZXksIHRoZSAnYWRkaXRpb25hbCcKKyAgICAgICAgVGVzdEZlYXR1cmVzIG92ZXJy
aWRlcyB0aGUgJ2Jhc2UnIFRlc3RGZWF0dXJlcy4KKworICAgICAgICAoV1RSOjpkdW1wRmVhdHVy
ZXMpOgorICAgICAgICBIZWxwZXIgdG8gZHVtcCBmZWF0dXJlcyB0byBzdGRlcnIsIHVzZWZ1bCBm
b3IgZGVidWdnaW5nLgorCisgICAgICAgIChXVFI6OmtleVR5cGUpOgorICAgICAgICBIZWxwZXIg
Zm9yIHBhcnNlciB0byBrbm93IHdoaWNoIHZhbHVlIHBhcnNlciB0byB1c2UuCisKKyAgICAgICAg
KFdUUjo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKToKKyAgICAgICAgKFdUUjo6cGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6CisgICAgICAgIChXVFI6OnBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOgorICAgICAgICBWYWx1ZSBwYXJzZXJzIG1vdmVk
IGZyb20gVGVzdENvbnRyb2xsZXIuY3BwCisKKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVhZGVy
KToKKyAgICAgICAgSGVhZGVyIHBhcnNlciBtb3ZlZCBmcm9tIFRlc3RDb250cm9sbGVyLmNwcC4g
VXBkYXRlIHRvIG5vdyByZXR1cm4KKyAgICAgICAgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGFuZCB1
c2Uga2V5VHlwZSB0byBwaWNrIHZhbHVlIHBhcnNlciByYXRoZXIKKyAgICAgICAgdGhhbiBpbmxp
bmluZyB0aGUgaWYgc3RhdGVtZW50cy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmhhcmRjb2Rl
ZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KToKKyAgICAgICAgTW92ZWQgZnJvbSB0aGUgVGVz
dE9wdGlvbnMgY29udHJ1Y3RvciBhbmQgcmV3b3JrZWQgdG8gcmV0dXJuIGEgVGVzdEZlYXR1cmVz
CisgICAgICAgIG9iamVjdCB0byBiZSBtZXJnZWQgYnkgdGhlIGNhbGxlci4KKworICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVh
dGVzIGEgVGVzdEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRl
c3QuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVh
dHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRv
IG5vdyByZXR1cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJh
dGhlciB0aGFuIHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUlu
QXBwQnJvd3NlclByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVu
VGVzdAorICAgICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0
ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAg
ICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAg
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRh
dGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgTW92ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMg
bW9yZSBhcHByb3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFz
IHRoYXQgaXMgZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRv
IGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1v
dGVMYXllclRyZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUg
Z2xvYmFsbHksCisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGlu
ZyB0byB1c2UgYm9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4v
VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQ
bGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgVXBkYXRlZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvZ3RrL1Rlc3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9u
c0ZvclRlc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0
dXJlLgorCiAyMDIwLTEwLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVsb2FkaW5nIGEgdmlldyBpbiBpdHMgcHJvY2Vzc1Rlcm1pbmF0aW9uSGFuZGxlciBk
b2VzIG5vdCB3b3JrIHJlbGlhYmx5IHdoZW4gdXNpbmcgcmVsYXRlZCB2aWV3cwpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogCisjaW5jbHVkZSAi
U3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVFIg
ewpAQCAtMTEzLDE2ICsxMTQsMTYgQEAgc3RhdGljIGJvb2wgaGFuZGxlT3B0aW9uQWxsb3dlZEhv
c3QoT3B0aQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUZlYXR1cmUo
U3RyaW5nIGZlYXR1cmVTdHJpbmcsIEhhc2hNYXA8U3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCitz
dGF0aWMgYm9vbCBwYXJzZUZlYXR1cmUoc3RkOjpzdHJpbmdfdmlldyBmZWF0dXJlU3RyaW5nLCBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBmZWF0dXJlcykKIHsKLSAgICBh
dXRvIHN0cmluZ3MgPSBmZWF0dXJlU3RyaW5nLnNwbGl0KCc9Jyk7Ci0gICAgaWYgKHN0cmluZ3Mu
aXNFbXB0eSgpIHx8IHN0cmluZ3Muc2l6ZSgpID4gMikKKyAgICBhdXRvIHN0cmluZ3MgPSBzcGxp
dChmZWF0dXJlU3RyaW5nLCAnPScpOworICAgIGlmIChzdHJpbmdzLmVtcHR5KCkgfHwgc3RyaW5n
cy5zaXplKCkgPiAyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIGZlYXR1cmVO
YW1lID0gc3RyaW5nc1swXTsKICAgICBib29sIGVuYWJsZWQgPSBzdHJpbmdzLnNpemUoKSA9PSAx
IHx8IHN0cmluZ3NbMV0gPT0gInRydWUiOwogCi0gICAgZmVhdHVyZXMuc2V0KGZlYXR1cmVOYW1l
LCBlbmFibGVkKTsKKyAgICBmZWF0dXJlcy5pbnNlcnQoeyBzdGQ6OnN0cmluZyB7IGZlYXR1cmVO
YW1lIH0sIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3Myw3ICsxNzQs
MTIgQEAgY29uc3QgY2hhciAqIE9wdGlvbnNIYW5kbGVyOjp1c2FnZSA9ICJVcwogY29uc3QgY2hh
ciAqIE9wdGlvbnNIYW5kbGVyOjpoZWxwID0gIkRpc3BsYXlzIHRoaXMgaGVscC4iOwogCiBPcHRp
b246Ok9wdGlvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgc3Rk
OjpmdW5jdGlvbjxib29sKE9wdGlvbnMmLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopPiBwYXJh
bWV0ZXJIYW5kbGVyLCBib29sIGhhc0FyZ3VtZW50KQotICAgIDogbmFtZShuYW1lKSwgZGVzY3Jp
cHRpb24oZGVzY3JpcHRpb24pLCBwYXJhbWV0ZXJIYW5kbGVyKHBhcmFtZXRlckhhbmRsZXIpLCBo
YXNBcmd1bWVudChoYXNBcmd1bWVudCkgeyB9OworICAgIDogbmFtZShuYW1lKQorICAgICwgZGVz
Y3JpcHRpb24oZGVzY3JpcHRpb24pCisgICAgLCBwYXJhbWV0ZXJIYW5kbGVyKHBhcmFtZXRlckhh
bmRsZXIpCisgICAgLCBoYXNBcmd1bWVudChoYXNBcmd1bWVudCkKK3sKK30KIAogYm9vbCBPcHRp
b246Om1hdGNoZXMoY29uc3QgY2hhciogb3B0aW9uKQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmgJKHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8c2V0Pgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJl
ZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTU3LDggKzU3LDggQEAgc3RydWN0IE9w
dGlvbnMgewogI2VuZGlmCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhdGhzOwogICAg
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBhbGxvd2VkSG9zdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IGJvb2w+IGludGVybmFsRmVhdHVyZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IGV4cGVy
aW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9v
bD4gaW50ZXJuYWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwogfTsKIAogY2xhc3MgT3B0aW9uIHsKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAkocmV2aXNpb24gMjY4MTEy
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUZyb21XaW5k
b3coKTsKICAgICB2b2lkIGFkZFRvV2luZG93KCk7CiAKLSAgICBib29sIHZpZXdTdXBwb3J0c09w
dGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25z
LnJ1blNpbmdseSAmJiBtX29wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRp
b25zKTsgfQorICAgIGJvb2wgdmlld1N1cHBvcnRzT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYg
b3B0aW9ucykgY29uc3QgeyByZXR1cm4gIW9wdGlvbnMucnVuU2luZ2x5KCkgJiYgbV9vcHRpb25z
Lmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucyk7IH0KIAogICAgIFBsYXRmb3Jt
SW1hZ2Ugd2luZG93U25hcHNob3RJbWFnZSgpOwogICAgIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zOyB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmdQcml2YXRlLmg+CiAjaW5jbHVkZSA8c3N0
cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KQEAgLTU5LDYgKzYwLDExIEBAIGlubGluZSBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9XSyhjb24KICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKIH0KIAoraW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0so
c3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0soY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykKIHsKICAgICByZXR1cm4gdG9XSyhzdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CkBAIC0xMTQsNiArMTIwLDExIEBAIGlubGluZSBXVEY6OlN0cmluZyB0
b1dURlN0cmluZyhjb25zdCBKU1IKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgp
KTsKIH0KIAoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
JiBzdHJpbmcpCit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuY19z
dHIoKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKICAgICByZXR1cm4gdG9X
SyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOwpAQCAtMTI1LDQgKzEzNiwy
NSBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0CiAgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFN0cmluZ1R5cGU+CitpbmxpbmUgc3RkOjp2ZWN0b3I8U3RyaW5nVHlwZT4g
c3BsaXQoY29uc3QgU3RyaW5nVHlwZSYgc3RyaW5nLCBjaGFyIGRlbGltaXRlcikKK3sKKyAgICBz
dGQ6OnZlY3RvcjxTdHJpbmdUeXBlPiByZXN1bHQ7CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAg
d2hpbGUgKGkgPCBzdHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IHN0
cmluZy5maW5kX2ZpcnN0X29mKGRlbGltaXRlciwgaSk7CisKKyAgICAgICAgaWYgKGZvdW5kSW5k
ZXggIT0gaSkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soc3RyaW5nLnN1YnN0cihpLCBm
b3VuZEluZGV4IC0gaSkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ID09IFN0cmluZ1R5cGU6
Om5wb3MpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpID0gZm91bmRJbmRleCArIDE7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSwxMiArMTA5LDYgQEAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHBh
dGhTZXBhcmF0b3IgPSAnXAogc3RhdGljIGNvbnN0ZXhwciBhdXRvIHBhdGhTZXBhcmF0b3IgPSAn
Lyc7CiAjZW5kaWYKIAotY29uc3QgdW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCA9
IDgwMDsKLWNvbnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0ID0gNjAwOwot
Ci1jb25zdCB1bnNpZ25lZCBUZXN0Q29udHJvbGxlcjo6dzNjU1ZHVmlld1dpZHRoID0gNDgwOwot
Y29uc3QgdW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnczY1NWR1ZpZXdIZWlnaHQgPSAzNjA7Ci0K
IGNvbnN0IFdURjo6U2Vjb25kcyBUZXN0Q29udHJvbGxlcjo6ZGVmYXVsdFNob3J0VGltZW91dCA9
IDVfczsKIGNvbnN0IFdURjo6U2Vjb25kcyBUZXN0Q29udHJvbGxlcjo6bm9UaW1lb3V0ID0gLTFf
czsKIApAQCAtNDY5LDE1ICs0NjMsMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6
ZShpbnQgYXJnYwogICAgIG1fc2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gb3B0aW9ucy5z
aG91bGREdW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAgICAgbV9mb3JjZUNvbXBsZXhUZXh0ID0gb3B0
aW9ucy5mb3JjZUNvbXBsZXhUZXh0OwogICAgIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5n
ID0gb3B0aW9ucy5zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmc7Ci0gICAgbV9zaG91bGRVc2VS
ZW1vdGVMYXllclRyZWUgPSBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVyVHJlZTsKICAgICBt
X3BhdGhzID0gb3B0aW9ucy5wYXRoczsKICAgICBtX2FsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxs
b3dlZEhvc3RzOwotICAgIG1fc2hvdWxkU2hvd1dlYlZpZXcgPSBvcHRpb25zLnNob3VsZFNob3dX
ZWJWaWV3OwotICAgIG1fc2hvdWxkU2hvd1RvdWNoZXMgPSBvcHRpb25zLnNob3VsZFNob3dUb3Vj
aGVzOwogICAgIG1fY2hlY2tGb3JXb3JsZExlYWtzID0gb3B0aW9ucy5jaGVja0ZvcldvcmxkTGVh
a3M7CiAgICAgbV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgPSBvcHRp
b25zLmFsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0czsKLSAgICBtX2ludGVy
bmFsRmVhdHVyZXMgPSBvcHRpb25zLmludGVybmFsRmVhdHVyZXM7Ci0gICAgbV9leHBlcmltZW50
YWxGZWF0dXJlcyA9IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgCisgICAgbV9n
bG9iYWxGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgPSBvcHRpb25zLmludGVybmFsRmVh
dHVyZXM7CisgICAgbV9nbG9iYWxGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyA9IG9wdGlv
bnMuZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgbV9nbG9iYWxGZWF0dXJlcy5ib29sRmVhdHVy
ZXMuaW5zZXJ0KHsgInVzZVJlbW90ZUxheWVyVHJlZSIsIG9wdGlvbnMuc2hvdWxkVXNlUmVtb3Rl
TGF5ZXJUcmVlIH0pOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7
ICJzaG91bGRTaG93V2ViVmlldyIsIG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgfSk7CisgICAg
bV9nbG9iYWxGZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInNob3VsZFNob3dUb3VjaGVz
Iiwgb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlcyB9KTsKKwogI2lmIEVOQUJMRShBQ0NFU1NJQklM
SVRZX0lTT0xBVEVEX1RSRUUpCiAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9
IG9wdGlvbnMuYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGU7CiAjZW5kaWYKQEAgLTQ5OSw3
ICs0OTUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAg
bV9ldmVudFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNlbmRlclByb3h5Pih0aGlzKTsK
IH0KIAotV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gVGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnM6OkNvbnRl
eHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAorV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJh
dGlvblJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29u
c3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CiB7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHRXSyhXS0NvbnRleHRDb25maWd1cmF0aW9uQ3JlYXRlKCkpOwogICAgIFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25TZXRJbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQo
KSwgaW5qZWN0ZWRCdW5kbGVQYXRoKCkpOwpAQCAtNTYyLDEwICs1NTgsMTEgQEAgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIFRlc3RDb250cm9sbGVyOjp3ZQogCiBXS1JldGFpblB0cjxXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbihj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9j
b250ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRl
eHRPcHRpb25zKSkgewotICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0gZ2VuZXJh
dGVDb250ZXh0Q29uZmlndXJhdGlvbihvcHRpb25zLmNvbnRleHRPcHRpb25zKTsKKyAgICBhdXRv
IGNvbnRleHRPcHRpb25zID0gb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpOworICAgIGlmICghbV9j
b250ZXh0IHx8ICFtX2NvbnRleHRPcHRpb25zLT5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25z
KGNvbnRleHRPcHRpb25zKSkgeworICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0g
Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb250ZXh0T3B0aW9ucyk7CiAgICAgICAgIG1f
Y29udGV4dCA9IHBsYXRmb3JtQWRqdXN0Q29udGV4dChhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdp
dGhDb25maWd1cmF0aW9uKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpKSkuZ2V0KCksIGNvbnRl
eHRDb25maWd1cmF0aW9uLmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0T3B0aW9ucyA9IG9wdGlv
bnMuY29udGV4dE9wdGlvbnM7CisgICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBjb250ZXh0T3B0
aW9uczsKIAogICAgICAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBtYWtlVW5pcXVlPEdlb2xv
Y2F0aW9uUHJvdmlkZXJNb2NrPihtX2NvbnRleHQuZ2V0KCkpOwogCkBAIC02MjcsNyArNjI0LDcg
QEAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogICAgIFdLUGFnZUNv
bmZpZ3VyYXRpb25TZXRDb250ZXh0KHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBtX2NvbnRleHQu
Z2V0KCkpOwogICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRQYWdlR3JvdXAocGFnZUNvbmZpZ3Vy
YXRpb24uZ2V0KCksIG1fcGFnZUdyb3VwLmdldCgpKTsKICAgICAKLSAgICBpZiAob3B0aW9ucy51
c2VFcGhlbWVyYWxTZXNzaW9uKSB7CisgICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lv
bigpKSB7CiAgICAgICAgIGF1dG8gZXBoZW1lcmFsRGF0YVN0b3JlID0gYWRvcHRXSyhXS1dlYnNp
dGVEYXRhU3RvcmVDcmVhdGVOb25QZXJzaXN0ZW50RGF0YVN0b3JlKCkpOwogICAgICAgICBXS1Bh
Z2VDb25maWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShwYWdlQ29uZmlndXJhdGlvbi5nZXQo
KSwgZXBoZW1lcmFsRGF0YVN0b3JlLmdldCgpKTsKICAgICB9CkBAIC02MzksMTEgKzYzNiwxMiBA
QCBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBUZXN0CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0
aW9ucykKIHsKKyAgICBhdXRvIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG9wdGlvbnMu
YXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
aWYgKCFvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAoIWFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIC8v
IFRoZSBidW5kbGUgaWRlbnRpZmllciBjYW4gb25seSBiZSBzZXQgb25jZSBwZXIgdGVzdCwgYW5k
IGlzIGNsZWFyZWQgYmV0d2VlbiB0ZXN0cy4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFz
U2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKLSAgICAgICAgc2V0QXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyKG9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAg
ICAgICAgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGFwcGxpY2F0aW9uQnVuZGxlSWRl
bnRpZmllcik7CiAgICAgICAgIG1faGFzU2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0g
dHJ1ZTsKICAgICB9CiAjZW5kaWYKQEAgLTY4Niw3ICs2ODQsNyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wCiAgICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAg
MCwgLy8gcGFnZURpZFNjcm9sbAogICAgICAgICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEs
Ci0gICAgICAgIG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsID8gcnVuT3BlblBhbmVs
IDogMCwKKyAgICAgICAgb3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwoKSA/IHJ1bk9w
ZW5QYW5lbCA6IDAsCiAgICAgICAgIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QsCiAgICAgICAgIDAsIC8vIGhlYWRlckhlaWdodAogICAgICAgICAwLCAvLyBmb290
ZXJIZWlnaHQKQEAgLTc5NSw5ICs3OTMsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjcmVhdGVX
ZWJWaWV3V2l0aE9wCiAgICAgLy8gc29tZXRoaW5nIGVsc2UgZm9yIHNwZWNpZmljIHRlc3RzIHRo
YXQgbmVlZCB0byBydW4gYXQgYSBkaWZmZXJlbnQgd2luZG93IHNjYWxlLgogICAgIG1fbWFpbldl
YlZpZXctPmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQoMSk7CiAgICAgCi0gICAgaWYgKCFvcHRp
b25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIHJlaW5pdGlhbGl6
ZUFwcEJvdW5kRG9tYWlucygpOwotICAgICAgICB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2VzcyhvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAg
IHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcik7CiAgICAgfQogfQogCkBAIC04MDksNyArODA3LDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzTwogICAgICAgICAvLyBIYXZpbmcgY3JlYXRlZCBh
bm90aGVyIHBhZ2UgKHZpYSB3aW5kb3cub3BlbigpKSBwcmV2ZW50cyBwcm9jZXNzIHN3YXBwaW5n
IG9uIG5hdmlnYXRpb24gYW5kIGl0IG1heSB0aGVyZWZvcmUKICAgICAgICAgLy8gY2F1c2UgZmxh
a2luZXNzIHRvIHJldXNlIHRoZSB2aWV3LiBXZSBzaG91bGQgYWxzbyBhbHdheXMgbWFrZSBhIG5l
dyB2aWV3IGlmIHRoZSB0ZXN0IGlzIG1hcmtlZCBhcyBhcHAtYm91bmQsIGJlY2F1c2UKICAgICAg
ICAgLy8gdGhlIHZpZXcgY29uZmlndXJhdGlvbiBtdXN0IGNoYW5nZS4KLSAgICAgICAgaWYgKCFt
X2NyZWF0ZWRPdGhlclBhZ2UgJiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhv
cHRpb25zKSAmJiAhb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAgaWYgKCFtX2Ny
ZWF0ZWRPdGhlclBhZ2UgJiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhvcHRp
b25zKSAmJiAhb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldygpKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIHdpbGxEZXN0cm95V2ViVmlldygpOwpAQCAtODM2LDggKzgzNCw4IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2Vz
UmVzZXRUZXN0UnVubmVyT3ZlcnJpZGVzKHByZWZlcmVuY2VzKTsKIAogICAgIFdLUHJlZmVyZW5j
ZXNFbmFibGVBbGxFeHBlcmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBleHBlcmltZW50YWxGZWF0dXJlIDogb3B0aW9ucy5leHBlcmltZW50YWxGZWF0
dXJlcykKLSAgICAgICAgV0tQcmVmZXJlbmNlc1NldEV4cGVyaW1lbnRhbEZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIGV4cGVyaW1lbnRhbEZlYXR1cmUudmFsdWUsIHRvV0soZXhwZXJpbWVudGFs
RmVhdHVyZS5rZXkpLmdldCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZhbHVlXSA6
IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1Nl
dEV4cGVyaW1lbnRhbEZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSku
Z2V0KCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVz
KHByZWZlcmVuY2VzKTsKIApAQCAtODYyLDE3ICs4NjAsMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVn
RmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlV2Vla0VuYWJs
ZWQiKS5nZXQoKSk7CiAjZW5kaWYKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmUgOiBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAgICAgICAgV0tQcmVm
ZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBpbnRlcm5h
bERlYnVnRmVhdHVyZS52YWx1ZSwgdG9XSyhpbnRlcm5hbERlYnVnRmVhdHVyZS5rZXkpLmdldCgp
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZhbHVlXSAgOiBvcHRpb25zLmludGVybmFs
RGVidWdGZWF0dXJlcygpKQorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSkuZ2V0KCkpOwogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQcm9j
ZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJv
Y2Vzcyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzKTsK
LSAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywg
b3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRDYXB0dXJlVmlkZW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
ZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENh
cHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
Q2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJl
QXVkaW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVy
ZUF1ZGlvSW5VSVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0lu
R1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlv
SW5HUFVQcm9jZXNzKCkpOwogI2VuZGlmCi0gICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5z
aG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0UGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJlZmVyZW5j
ZXMsIG9wdGlvbnMuZW5hYmxlQXBwTmFwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmNvbnRleHRPcHRpb25z
KCkuc2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldFBhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUFwcE5hcCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBX
S1ByZWZlcmVuY2VzU2V0U3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQocHJlZmVy
ZW5jZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0WFNTQXVkaXRvckVuYWJsZWQocHJl
ZmVyZW5jZXMsIGZhbHNlKTsKQEAgLTg4MywxMCArODgxLDEwIEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdFJ1
bnRpbWVGbGFncyhwcmVmZXJlbmNlcywga1dLSmF2YVNjcmlwdFJ1bnRpbWVGbGFnc0FsbEVuYWJs
ZWQpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0
aWNhbGx5KHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldERPTVBhc3RlQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRET01QYXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZG9tUGFzdGVBbGxvd2VkKCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRVbml2ZXJzYWxBY2Nl
c3NGcm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVu
Y2VzU2V0RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIHRydWUpOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyk7CisgICAgV0tQcmVm
ZXJlbmNlc1NldFRvcE5hdmlnYXRpb25Ub0RhdGFVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0
aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkpOwogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKICAgICBXS1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQocHJlZmVyZW5j
ZXMsIHRydWUpOwogI2VuZGlmCkBAIC04OTksMTggKzg5NywxOCBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEN1c3RvbVBhc3Rl
Ym9hcmREYXRhRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dERpYWxvZ0VsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKIAotICAgIFdLUHJlZmVy
ZW5jZXNTZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9j
a1Njcm9sbGJhcnMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyhwcmVmZXJlbmNlcywgb3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVBdHRhY2htZW50RWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVt
RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50
KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1vZGVy
bk1lZGlhQ29udHJvbHNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1l
ZGlhQ29udHJvbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24pOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvckVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRp
Y2F0b3IpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENv
bG9yRmlsdGVyRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcik7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUo
cHJlZmVyZW5jZXMsIG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSk7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vY2tTY3Jv
bGxiYXJzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycygpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJlZmVyZW5jZXMs
IG9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBdHRh
Y2htZW50RWxlbWVudCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TWVudUl0ZW1FbGVtZW50RW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25z
LmVuYWJsZUtleWdlbkVsZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbigpKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNh
dG9yKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
Q29sb3JGaWx0ZXJFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVy
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlKHByZWZlcmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01v
ZGUoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNT
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTktMSIp
LmdldCgpKTsKIApAQCAtOTMyLDcgKzkzMCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0
UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0
SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKHByZWZlcmVuY2VzLCBmYWxz
ZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChwcmVm
ZXJlbmNlcywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51c2VBY2Nl
bGVyYXRlZERyYXdpbmcpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZERyYXdpbmdF
bmFibGVkKHByZWZlcmVuY2VzLCBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyB8fCBvcHRp
b25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZygpKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IHRlc3RpbmcgdGhlIGRlZmF1bHQuCiAgICAgV0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VCbG9ja2lu
Z1BvbGljeShwcmVmZXJlbmNlcywga1dLQWxsb3dBbGxTdG9yYWdlKTsKIApAQCAtOTUzLDcgKzk1
MSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICAKICAg
ICBXS1ByZWZlcmVuY2VzU2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKHByZWZlcmVu
Y2VzLCBmYWxzZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9ucygpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNT
ZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgCkBAIC05
NzIsNyArOTcwLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwog
ICAgIFdLUHJlZmVyZW5jZXNTZXRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShwcmVm
ZXJlbmNlcywgZmFsc2UpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVy
ZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTcGVha2VyU2VsZWN0aW9uUmVxdWlyZXNVc2VyR2VzdHVyZSIpKTsKIAotICAgIFdLUHJlZmVy
ZW5jZXNTZXRTaG91bGRVc2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZlcmVuY2VzLCBv
cHRpb25zLmNvbnRleHRPcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRTaG91bGRVc2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZl
cmVuY2VzLCBvcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKSk7CiAKICNpZiBF
TkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRJ
c0FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKHByZWZlcmVuY2VzLCBhY2Nlc3NpYmls
aXR5SXNvbGF0ZWRUcmVlTW9kZSgpKTsKQEAgLTEwMDYsMTEgKzEwMDQsMTIgQEAgYm9vbCBUZXN0
Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAogICAgIHNldFZhbHVlKHJlc2V0TWVzc2Fn
ZUJvZHksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIiwgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0
ZWRUcmVlTW9kZSk7CiAjZW5kaWYKIAotICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3Ro
KCkpCi0gICAgICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwgb3B0
aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpOworICAgIGF1dG8ganNjT3B0aW9ucyA9IG9wdGlvbnMu
anNjT3B0aW9ucygpOworICAgIGlmICghanNjT3B0aW9ucy5lbXB0eSgpKQorICAgICAgICBzZXRW
YWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIGpzY09wdGlvbnMuY19zdHIoKSk7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRk
aXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsKICNlbmRpZgogCiAgICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIHRvV0soIlJlc2V0IikuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0
KCkpOwpAQCAtMTExOCw3ICsxMTE3LDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdAogCiAgICAgc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChmYWxzZSk7CiAg
ICAgCi0gICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5pZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWl0cyk7CisgICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0
aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpKTsKIAogICAgIG1fb3BlblBhbmVsRmls
ZVVSTHMgPSBudWxscHRyOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzE4LDcgKzEz
MTcsNyBAQCBzdGF0aWMgc3RkOjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYgdXJsCiAgICAgcmV0
dXJuIHN0ZDo6c3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXS1VSTFJlZiBjcmVhdGVUZXN0VVJMKGNv
bnN0IGNoYXIqIHBhdGhPclVSTCkKK1dLVVJMUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKIHsKICAgICBpZiAoc3Ryc3RyKHBhdGhPclVSTCwg
Imh0dHA6Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiaHR0cHM6Ly8iKSB8fCBzdHJzdHIocGF0
aE9yVVJMLCAiZmlsZTovLyIpKQogICAgICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENT
dHJpbmcocGF0aE9yVVJMKTsKQEAgLTEzNTYsMjIxICsxMzU1LDI1IEBAIHN0YXRpYyBXS1VSTFJl
ZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIKICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRG
OENTdHJpbmcoYnVmZmVyLmdldCgpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gInRydWUiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gImZhbHNl
IikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVj
dGVkIHZhbHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2Zh
bHNlJy4iLCB2YWx1ZS5jX3N0cigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBz
dGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0
IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAg
ICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkp
KTsKLSAgICBhdXRvIHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJM
KGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRX
SyhXS1VSTENvcHlQYXRoKHJlbGF0aXZlVVJMLmdldCgpKSkpOwotfQotCi1zdGF0aWMgc3RkOjpz
dHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0cmluZyYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGNyZWF0
ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZVRlc3RP
cHRpb25zRnJvbVRlc3RIZWFkZXIoVGVzdE9wdGlvbnMmIHRlc3RPcHRpb25zLCBjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1dGVQYXRoKQotewot
ICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwotICAgIGlmIChmaWxlbmFt
ZS5lbXB0eSgpKSB7Ci0gICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9u
cyBiZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICBmaWxlbmFt
ZSA9IHRlc3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpLmdl
dCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKLSAgICBzdGQ6Omlmc3RyZWFtIHRlc3RGaWxl
KGZpbGVuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCF0ZXN0RmlsZS5nb29kKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBnZXRsaW5lKHRlc3RGaWxlLCBvcHRpb25zKTsKLSAgICBzdGQ6OnN0cmluZyBi
ZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAgc3RkOjpzdHJpbmcgZW5k
U3RyaW5nKCIgXSIpOwotICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5kKGJl
Z2luU3RyaW5nKTsKLSAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykK
LSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChl
bmRTdHJpbmcsIGJlZ2luTG9jYXRpb24pOwotICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0
cmluZzo6bnBvcykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0
ZXN0IGhlYWRlciBpbiAlcyIsIGZpbGVuYW1lLmNfc3RyKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxv
Y2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9u
ICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7Ci0gICAg
d2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAgICAgIHNpemVfdCBw
YWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKHBh
aXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0
cmluZy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcu
ZmluZCgiPSIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6
OnN0cmluZzo6bnBvcykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9u
IGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIGZp
bGVuYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
YXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0g
cGFpclN0YXJ0KTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFs
c0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKLQotICAgICAg
ICBpZiAoIWtleS5yZmluZCgiZXhwZXJpbWVudGFsOiIpKSB7Ci0gICAgICAgICAgICBrZXkgPSBr
ZXkuc3Vic3RyKDEzKTsKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1
cmVzLmFkZChTdHJpbmcoa2V5LmNfc3RyKCkpLCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgha2V5LnJmaW5kKCJpbnRlcm5hbDoi
KSkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cig5KTsKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcy5hZGQoU3RyaW5nKGtleS5jX3N0cigpKSwgcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoa2V5ID09ICJsYW5ndWFnZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0
aW9ucy5vdmVycmlkZUxhbmd1YWdlcyA9IFN0cmluZyh2YWx1ZS5jX3N0cigpKS5zcGxpdCgnLCcp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZVRocmVhZGVkU2Nyb2xsaW5nIikKLSAgICAg
ICAgICAgIHRlc3RPcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VBY2NlbGVy
YXRlZERyYXdpbmciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3
aW5nID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LnVzZUZsZXhpYmxlVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZURhdGFEZXRlY3Rpb24iKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMudXNlRGF0YURldGVjdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlTW9ja1Njcm9sbGJhcnMi
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gIm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLm5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNl
Q2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50ID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5lbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRXBoZW1lcmFsU2Vzc2lvbiIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFi
bGVNZW51SXRlbUVsZW1lbnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTWVudUl0
ZW1FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJlbmFibGVLZXlnZW5FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZU1vZGVybk1lZGlhQ29udHJv
bHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAiZW5hYmxlUG9pbnRlckxvY2siKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
UG9pbnRlckxvY2sgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVXZWJBdXRo
ZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5l
bmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW5z
cGVjdG9yQWRkaXRpb25zIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKGtleSA9PSAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRpb25N
YW5pZmVzdCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0ID0g
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJM
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZG9tUGFzdGVBbGxv
d2VkIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmRvbVBhc3RlQWxsb3dlZCA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29u
dGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gPSBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBy
b2Nlc3NTd2FwT25XaW5kb3dPcGVuIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRP
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VTZXJ2aWNlV29y
a2VyU2hvcnRUaW1lb3V0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25z
LnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJwdW5jaE91
dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnB1
bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImpzY09wdGlvbnMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuanNjT3B0aW9ucyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzID0gdmFsdWU7Ci0gICAgICAg
IGVsc2UgaWYgKGtleSA9PSAicnVuU2luZ2x5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnJ1
blNpbmdseSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3BlbGxDaGVja2luZ0Rv
dHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3Rz
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
ZW5hYmxlU2VydmljZUNvbnRyb2xzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlZGl0YWJsZSIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lZGl0YWJsZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIikKLSAgICAg
ICAgICAgIHRlc3RPcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic2hvdWxk
UHJlc2VudFBvcG92ZXJzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFByZXNlbnRQ
b3BvdmVycyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiY29udGVudEluc2V0LnRvcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5jb250ZW50SW5zZXRUb3AgPSBzdGQ6OnN0b2QodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1l
b3V0cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiY29udGVudE1vZGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGVu
dE1vZGUgPSB7IHZhbHVlLmNfc3RyKCkgfTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyID0geyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZW5hYmxlQXBwTmFwIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJs
ZUFwcE5hcCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd3NMaW5rUHJldmlldyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxl
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJv
Y2VzcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVBy
b2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVD
YXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVS
THMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiKQotICAgICAgICAgICAgdGVzdE9w
dGlvbnMuZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3RhbmRhbG9uZVdlYkFwcGxp
Y2F0aW9uVVJMIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNh
dGlvblVSTCA9IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImlzQXBwQm91bmRXZWJWaWV3IikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmlzQXBwQm91bmRXZWJWaWV3ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQotfQotCiBUZXN0
T3B0aW9ucyBUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RDb21t
YW5kJiBjb21tYW5kKSBjb25zdAogewotICAgIFRlc3RPcHRpb25zIG9wdGlvbnMoY29tbWFuZC5w
YXRoT3JVUkwpOwotCi0gICAgb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUgPSBtX3Nob3VsZFVz
ZVJlbW90ZUxheWVyVHJlZTsKLSAgICBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gbV9zaG91
bGRTaG93V2ViVmlldzsKLQotICAgIGZvciAoYXV0byYgZmVhdHVyZSA6IG1faW50ZXJuYWxGZWF0
dXJlcykKLSAgICAgICAgb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKGZlYXR1cmUu
a2V5LCBmZWF0dXJlLnZhbHVlKTsKLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2V4cGVyaW1l
bnRhbEZlYXR1cmVzKQotICAgICAgICBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmFkZChm
ZWF0dXJlLmtleSwgZmVhdHVyZS52YWx1ZSk7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzID0g
bV9nbG9iYWxGZWF0dXJlczsKKyAgICBtZXJnZShmZWF0dXJlcywgaGFyZGNvZGVkRmVhdHVyZXNC
YXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9y
bVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVh
dHVyZXMsIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kKSk7Cisg
ICAgbWVyZ2UoZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVs
dHNGb3JUZXN0KGNvbW1hbmQpKTsKIAotICAgIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0
aW9uc0ZvclRlc3Qob3B0aW9ucywgY29tbWFuZC5wYXRoT3JVUkwpOwotICAgIHVwZGF0ZVRlc3RP
cHRpb25zRnJvbVRlc3RIZWFkZXIob3B0aW9ucywgY29tbWFuZC5wYXRoT3JVUkwsIGNvbW1hbmQu
YWJzb2x1dGVQYXRoKTsKLSAgICBwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKG9wdGlvbnMpOwotCi0g
ICAgcmV0dXJuIG9wdGlvbnM7CisgICAgcmV0dXJuIFRlc3RPcHRpb25zIHsgZmVhdHVyZXMgfTsK
IH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KGNvbnN0
IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewotICAgIHVuc2lnbmVkIHdpZHRoID0gdmlld1dpZHRo
OwotICAgIHVuc2lnbmVkIGhlaWdodCA9IHZpZXdIZWlnaHQ7Ci0gICAgaWYgKHRlc3Qub3B0aW9u
cygpLmlzU1ZHVGVzdCkgewotICAgICAgICB3aWR0aCA9IHczY1NWR1ZpZXdXaWR0aDsKLSAgICAg
ICAgaGVpZ2h0ID0gdzNjU1ZHVmlld0hlaWdodDsKLSAgICB9Ci0KLSAgICBtYWluV2ViVmlldygp
LT5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtYWluV2ViVmlldygpLT5yZXNpemVUbyh0
ZXN0Lm9wdGlvbnMoKS52aWV3V2lkdGgoKSwgdGVzdC5vcHRpb25zKCkudmlld0hlaWdodCgpKTsK
IH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KFBsYXRm
b3JtV2ViVmlldyogdmlldywgY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7Ci0gICAgdmll
dy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMoKS5kZXZpY2VTY2FsZUZh
Y3Rvcik7CisgICAgdmlldy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmln
dXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCkBAIC0xNzY2LDYgKzE1
NjksMTIgQEAgc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IAogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKICAgICB9CisgICAgCisgICAgaWYg
KHJlc3VsdC5hYnNvbHV0ZVBhdGguZW1wdHkoKSkgeworICAgICAgICAvLyBHcm9zcy4gTmVlZCB0
byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJM
cy4KKyAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKGFkb3B0V0soVGVzdENv
bnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwocmVzdWx0LnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkp
OworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE3ODgsNyArMTU5Nyw3IEBA
IGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhcioKICAgICBpZiAoY29tbWFu
ZC50aW1lb3V0ID4gMF9zKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRDdXN0b21U
aW1lb3V0KGNvbW1hbmQudGltZW91dCk7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRE
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIg
fHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIG1fY3VycmVudEludm9j
YXRpb24tPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpKTsKIAogICAg
IHBsYXRmb3JtV2lsbFJ1blRlc3QoKm1fY3VycmVudEludm9jYXRpb24pOwogCkBAIC0zMDAzLDcg
KzI4MTIsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0CiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQorICAgIGlmICghb3B0aW9u
cy51c2VFcGhlbWVyYWxTZXNzaW9uKCkpCiAgICAgICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRX
ZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24sIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkp
OwogCiAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tQYWdlQ29uZmlndXJhdGlvbkdldFdlYnNp
dGVEYXRhU3RvcmUoY29uZmlndXJhdGlvbik7CkBAIC0zODE4LDcgKzM2MjcsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpyZWluaXRpYWxpemVBcHBCb3VuCiAgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0
b3JlKCkpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVy
SW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2b2lkIFRl
c3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25z
dCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2
YWN5Q2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAgIFdLV2Vic2l0ZURhdGFTdG9y
ZVVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3
ZWJzaXRlRGF0YVN0b3JlKCksIHRvV0soYnVuZGxlSWRlbnRpZmllcikuZ2V0KCksICZjb250ZXh0
LCBpbkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNrKTsKQEAgLTM4MzMsOCArMzY0
Miw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyQnVuZGxlSWRlbnRpZmkKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9w
dGlvbnMoVGVzdE9wdGlvbnMmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6aW5qZWN0VXNlclNjcmlwdChXS1N0cmluZ1JlZikKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHNldD4KICNp
bmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0
b3I+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KQEAgLTUwLDEyICs1MSwxMiBAQCBPQkpDX0NMQVNTIFdLV2ViVmlld0NvbmZpZ3VyYXRpb247
CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNzIEV2ZW50
U2VuZGVyUHJveHk7CiBjbGFzcyBPcmlnaW5TZXR0aW5nczsKIGNsYXNzIFBsYXRmb3JtV2ViVmll
dzsKLWNsYXNzIEV2ZW50U2VuZGVyUHJveHk7CitjbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNz
IFRlc3RPcHRpb25zOwogc3RydWN0IFRlc3RDb21tYW5kOwotc3RydWN0IFRlc3RPcHRpb25zOwog
CiBjbGFzcyBBc3luY1Rhc2sgewogcHVibGljOgpAQCAtOTEsMTEgKzkyLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVUZW1wb3JhcnlEaXJlY3Rv
cmllcyhXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uUmVmKTsKICAgICBzdGF0aWMgV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdmlld1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2
aWV3SGVpZ2h0OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHczY1NWR1ZpZXdXaWR0aDsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdzNjU1ZHVmlld0hlaWdodDsKKyAgICBzdGF0aWMg
V0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpOwogCiAgICAgc3Rh
dGljIGNvbnN0IFdURjo6U2Vjb25kcyBkZWZhdWx0U2hvcnRUaW1lb3V0OwogICAgIHN0YXRpYyBj
b25zdCBXVEY6OlNlY29uZHMgbm9UaW1lb3V0OwpAQCAtMTE1LDIwICsxMTIsMTUgQEAgcHVibGlj
OgogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3JlKCk7CiAKICAgICBF
dmVudFNlbmRlclByb3h5KiBldmVudFNlbmRlclByb3h5KCkgeyByZXR1cm4gbV9ldmVudFNlbmRl
clByb3h5LmdldCgpOyB9Ci0KLSAgICBib29sIHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOyB9CiAgICAgCiAgICAgLy8g
UnVucyB0aGUgcnVuIGxvb3AgdW50aWwgYGRvbmVgIGlzIHRydWUgb3IgdGhlIHRpbWVvdXQgZWxh
cHNlcy4KICAgICBib29sIHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgeyByZXR1cm4gbV91
c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcjsgfQogICAgIHZvaWQgcnVuVW50aWwoYm9vbCYgZG9u
ZSwgV1RGOjpTZWNvbmRzIHRpbWVvdXQpOwogICAgIHZvaWQgbm90aWZ5RG9uZSgpOwogCi0gICAg
Ym9vbCBzaG91bGRTaG93V2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd1dlYlZp
ZXc7IH0KICAgICBib29sIHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdT
ZXJ2ZXJNb2RlOyB9CiAgICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYpOwotICAgIAotICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFNob3dUb3VjaGVzOyB9Ci0gICAgCisKICAgICBib29sIGJlZm9yZVVubG9h
ZFJldHVyblZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZTsg
fQogICAgIHZvaWQgc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkgeyBtX2Jl
Zm9yZVVubG9hZFJldHVyblZhbHVlID0gdmFsdWU7IH0KIApAQCAtMjc1LDcgKzI2Nyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyTG9hZGVkU3VicmVzb3VyY2VEb21haW5zKCk7CiAgICAgdm9p
ZCBjbGVhckFwcEJvdW5kU2Vzc2lvbigpOwogICAgIHZvaWQgcmVpbml0aWFsaXplQXBwQm91bmRE
b21haW5zKCk7Ci0gICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vz
cyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOworICAgIHZvaWQgdXBkYXRlQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcygp
OwogCiAgICAgV0tBcnJheVJlZiBvcGVuUGFuZWxGaWxlVVJMcygpIGNvbnN0IHsgcmV0dXJuIG1f
b3BlblBhbmVsRmlsZVVSTHMuZ2V0KCk7IH0KQEAgLTM2Miw3ICszNTQsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gZ2VuZXJh
dGVQYWdlQ29uZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9ucyYpOwotICAgIFdLUmV0YWluUHRy
PFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24o
Y29uc3QgVGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zJikgY29uc3Q7CisgICAgV0tSZXRhaW5Q
dHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
bihjb25zdCBDb250ZXh0T3B0aW9ucyYpIGNvbnN0OwogICAgIHZvaWQgaW5pdGlhbGl6ZShpbnQg
YXJnYywgY29uc3QgY2hhciogYXJndltdKTsKICAgICB2b2lkIGNyZWF0ZVdlYlZpZXdXaXRoT3B0
aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHZvaWQgcnVuKCk7CkBAIC0zODAsNyArMzcy
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogICAgIFdLQ29udGV4
dFJlZiBwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmLCBXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKTsKLSAgICB2
b2lkIHBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmKSBjb25zdDsKICAgICB2b2lk
IHBsYXRmb3JtQ3JlYXRlV2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0
T3B0aW9ucyYpOwogICAgIHN0YXRpYyBQbGF0Zm9ybVdlYlZpZXcqIHBsYXRmb3JtQ3JlYXRlT3Ro
ZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50VmlldywgV0tQYWdlQ29uZmlndXJhdGlvblJl
ZiwgY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHBsYXRmb3JtUmVzZXRQcmVmZXJlbmNl
c1RvQ29uc2lzdGVudFZhbHVlcygpOwpAQCAtMzg5LDcgKzM4MCw3IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBjb2NvYVBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogICAg
IHZvaWQgY29jb2FSZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25z
Jik7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qgc3RkOjpz
dHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyVGVzdGlu
Z092ZXJyaWRlKCk7CiAjZW5kaWYKICAgICB2b2lkIHBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRl
c3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKQEAgLTQwMyw3ICszOTQsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBlbnN1cmVWaWV3U3VwcG9ydHNPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYpOwogICAgIFRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdChUZXN0T3B0aW9ucyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpIGNv
bnN0OworICAgIFRlc3RGZWF0dXJlcyBnbG9iYWxGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVzdEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNG
ZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVz
dEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXdTaXpl
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlV2luZG93U2Nh
bGVGb3JUZXN0KFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CkBAIC01
MzgsOCArNTMxLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NyZWF0ZWRPdGhlclBhZ2UgeyBm
YWxzZSB9OwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3BhdGhzOwogICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtX2FsbG93ZWRIb3N0czsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9v
bD4gbV9pbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBtX2V4cGVy
aW1lbnRhbEZlYXR1cmVzOworICAgIFRlc3RGZWF0dXJlcyBtX2dsb2JhbEZlYXR1cmVzOworCisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2ludGVybmFsRmVhdHVy
ZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2V4cGVyaW1l
bnRhbEZlYXR1cmVzOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1faW5qZWN0ZWRC
dW5kbGVQYXRoOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX3Rlc3RQbHVnaW5EaXJl
Y3Rvcnk7CkBAIC01NDgsNyArNTQzLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybVdlYlZpZXc+IG1fbWFpbldlYlZpZXc7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250
ZXh0UmVmPiBtX2NvbnRleHQ7Ci0gICAgT3B0aW9uYWw8VGVzdE9wdGlvbnM6OkNvbnRleHRPcHRp
b25zPiBtX2NvbnRleHRPcHRpb25zOworICAgIE9wdGlvbmFsPENvbnRleHRPcHRpb25zPiBtX2Nv
bnRleHRPcHRpb25zOwogICAgIFdLUmV0YWluUHRyPFdLUGFnZUdyb3VwUmVmPiBtX3BhZ2VHcm91
cDsKICAgICBXS1JldGFpblB0cjxXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZj4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXI7CiAKQEAgLTYwNSwxNCArNjAwLDEwIEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1fZm9yY2VDb21wbGV4VGV4dCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZFVzZUFj
Y2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFVzZVJlbW90ZUxh
eWVyVHJlZSB7IGZhbHNlIH07Ci0KKyAgICAKICAgICBib29sIG1fc2hvdWxkTG9nQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3Vs
ZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9nSGlz
dG9yeUNsaWVudENhbGxiYWNrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFNob3dXZWJW
aWV3IHsgZmFsc2UgfTsKLSAgICAKLSAgICBib29sIG1fc2hvdWxkU2hvd1RvdWNoZXMgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9jaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwogCiAgICAgYm9v
bCBtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyB7IGZhbHNlIH07Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24g
MjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNo
b3VsZExvZ0hpc3RvcnlDbGkKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRl
c3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKICAgICBhdXRv
IGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3
cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdp
blRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxl
eGlibGVWaWV3cG9ydCgpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1
bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VC
b2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVvdXQubWlsbGlzZWNv
bmRzKCkpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKLSAgICBzZXRWYWx1
ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwg
b3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIHNl
dFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMiLCBvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsK
ICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzQgKzI2
LDI2OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25zLmgiCiAK
KyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNkZWZpbmUgRFVNUF9G
RUFUVVJFUyAwCisKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQorI2lm
IERVTVBfRkVBVFVSRVMKK3N0YXRpYyB2b2lkIGR1bXBGZWF0dXJlcyhjb25zdCBUZXN0RmVhdHVy
ZXMmIGZlYXR1cmVzKQogewotICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5jX3N0cigpKTsKLSAg
ICByZXR1cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWluc2Vuc2l0aXZlLgor
ICAgIGlmIChmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVz
LmludGVybmFsRGVidWdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5l
bXB0eSgpICYmIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3Ry
aW5nRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0
eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBbRU1QVFldXG4iOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmICghZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMu
ZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgRXhwZXJpbWVudGFsIEZlYXR1cmVz
OiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8
ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgSW50ZXJu
YWwgRmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1
cmVzLmludGVybmFsRGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAg
ICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0
dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgQm9v
bCBGZWF0dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVy
ZXMuYm9vbEZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkg
PDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIERvdWJsZSBGZWF0
dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZG91
YmxlRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAi
OiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nRmVh
dHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIEZlYXR1cmVz
OiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdG
ZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIg
PDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdWZWN0b3JG
ZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgVmVjdG9y
IEZlYXR1cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJl
cy5zdHJpbmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIg
PDwga2V5IDw8ICI6IE51bWJlciBvZiBzdHJpbmdzICIgPDwgdmFsdWUuc2l6ZSgpIDw8ICdcbic7
CisgICAgfQogfQorI2VuZGlmCiAKLXN0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhp
YmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJl
cyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpCiB7Ci0gICAgcmV0dXJuIHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
InZpc3VhbC12aWV3cG9ydC8iKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHN0ZDo6
dW5vcmRlcmVkX21hcDo6bWVyZ2Ugd2hlbiBpdCBpcyBhdmFpbGFibGUgZm9yIGFsbCBwb3J0cy4K
KworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZl
YXR1cmVzKQorICAgICAgICBiYXNlLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3Np
Z24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwu
aW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQorICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJl
cy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1
ZV0gOiBhZGRpdGlvbmFsLmJvb2xGZWF0dXJlcykKKyAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMu
aW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVd
IDogYWRkaXRpb25hbC5kb3VibGVGZWF0dXJlcykKKyAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJl
cy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1
ZV0gOiBhZGRpdGlvbmFsLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1
cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZh
bHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3Ry
aW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKK30KKworZW51
bSBjbGFzcyBLZXlUeXBlIDogdWludDhfdCB7CisgICAgQm9vbCwKKyAgICBEb3VibGUsCisgICAg
U3RyaW5nLAorICAgIFN0cmluZ1JlbGF0aXZlUGF0aCwKKyAgICBTdHJpbmdVUkwsCisgICAgU3Ry
aW5nVmVjdG9yLAorICAgIFVua25vd24KK307CisKK3N0YXRpYyBLZXlUeXBlIGtleVR5cGUoc3Rk
OjpzdHJpbmcga2V5KQoreworICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIEtleVR5cGU+IGtleVR5cGVNYXAgeworICAgICAgICB7ICJ1c2VUaHJlYWRlZFNjcm9sbGlu
ZyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFNob3dXZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJ1c2VEYXRhRGV0ZWN0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1
c2VNb2NrU2Nyb2xsYmFycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0
ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5h
YmxlQXR0YWNobWVudEVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJs
ZUludGVyc2VjdGlvbk9ic2VydmVyIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VF
cGhlbWVyYWxTZXNzaW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNZW51
SXRlbUVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUtleWdlbkVs
ZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVBvaW50ZXJMb2NrIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1
dGhlbnRpY2F0b3IiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNo
ZXMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRv
bVBhc3RlQWxsb3dlZCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JG
aWx0ZXIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3Jv
dW5kc0luRGFya01vZGUiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInNwZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVkaXRhYmxlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRI
YW5kbGVSdW5PcGVuUGFuZWwiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFBy
ZXNlbnRQb3BvdmVycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFw
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nl
c3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BV
UHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9u
VG9EYXRhVVJMcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93
c2VyUHJpdmFjeSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZp
ZXciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2Fn
aW5nVGltZW91dHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2Vy
dmljZVdvcmtlclNob3J0VGltZW91dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAg
eyAiY29udGVudEluc2V0LnRvcCIsIEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZp
Y2VTY2FsZUZhY3RvciIsIEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJ2aWV3V2lkdGgi
LCBLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAidmlld0hlaWdodCIsIEtleVR5cGU6OkRv
dWJsZSB9LAorCisgICAgICAgIHsgImpzY09wdGlvbnMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAg
ICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBLZXlUeXBlOjpTdHJpbmcg
fSwKKyAgICAgICAgeyAiY29udGVudE1vZGUiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAg
eyAiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAg
ICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3QiLCBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGgg
fSwKKyAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgS2V5VHlwZTo6U3Ry
aW5nVVJMIH0sCisKKyAgICAgICAgeyAibGFuZ3VhZ2UiLCBLZXlUeXBlOjpTdHJpbmdWZWN0b3Ig
fSwKKyAgICB9OworICAgIAorICAgIGF1dG8gaXQgPSBrZXlUeXBlTWFwLmZpbmQoa2V5KTsKKyAg
ICBpZiAoaXQgPT0ga2V5VHlwZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEtleVR5cGU6OlVu
a25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFVz
ZUZpeGVkTGF5b3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgYm9vbCBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogewot
I2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgaWYgKHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJkZXZpY2UtYWRhcHQvIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImRl
dmljZS1hZGFwdFxcIikpCisgICAgaWYgKHZhbHVlID09ICJ0cnVlIikKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0jZW5kaWYKKyAgICBpZiAodmFsdWUgPT0gImZhbHNlIikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVlICclcycgZm9y
IGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2YWx1ZS5jX3N0
cigpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGlzU1ZHVGVzdFBhdGgo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0
cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1
ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICBhdXRvIGJhc2VVUkwgPSBh
ZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7
CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChi
YXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgcmV0dXJuIHRvU1REKGFkb3B0V0so
V0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKK30KKworc3RhdGljIHN0ZDo6c3Ry
aW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZh
bHVlKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnL1czQy1TVkct
MS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzNDLVNWRy0xLjEiKTsKKyAg
ICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoVGVzdENvbnRyb2xsZXI6OmNy
ZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7Cit9CisKK3N0YXRpYyBUZXN0RmVhdHVyZXMg
cGFyc2VUZXN0SGVhZGVyKHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKQoreworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBpZiAo
IXN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3RzKHBhdGgpKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7
CisKKyAgICBzdGQ6Omlmc3RyZWFtIGZpbGUocGF0aCk7CisgICAgaWYgKCFmaWxlLmdvb2QoKSkg
eworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBvcGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0
IGhlYWRlcnMgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7
CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKKyAgICBnZXRsaW5lKGZpbGUsIG9w
dGlvbnMpOworICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIg
WyAiKTsKKyAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7CisgICAgc2l6ZV90IGJlZ2lu
TG9jYXRpb24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOworICAgIGlmIChiZWdpbkxvY2F0
aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAg
c2l6ZV90IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlv
bik7CisgICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgcGF0
aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIH0KKyAgICBzdGQ6OnN0
cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3Ry
aW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNp
emUoKSkpOworICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOworICAgIHdoaWxlIChwYWlyU3RhcnQg
PCBwYWlyU3RyaW5nLnNpemUoKSkgeworICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJp
bmcuZmluZCgiICIsIHBhaXJTdGFydCk7CisgICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3Ry
aW5nOjpucG9zKQorICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOworICAg
ICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3Rh
cnQpOworICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAo
Y291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBrZXkgPSBwYWlyU3RyaW5n
LnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0gcGFpclN0YXJ0KTsKKyAgICAgICAg
YXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFsc0xvY2F0aW9uICsgMSwgcGFpckVu
ZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKKworICAgICAgICBpZiAoa2V5LnJmaW5kKCJleHBl
cmltZW50YWw6IikgPT0gMCkgeworICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7Cisg
ICAgICAgICAgICBmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0gZWxzZSBpZiAo
a2V5LnJmaW5kKCJpbnRlcm5hbDoiKSA9PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vi
c3RyKDkpOworICAgICAgICAgICAgZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2Vy
dCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAoa2V5VHlwZShrZXkpKSB7CisgICAgICAgIGNhc2UgS2V5VHlw
ZTo6Qm9vbDoKKyAgICAgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyBrZXks
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpEb3VibGU6CisgICAgICAgICAgICBmZWF0dXJlcy5k
b3VibGVGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHN0ZDo6c3RvZCh2YWx1ZSkgfSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICBm
ZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHZhbHVlIH0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgorICAg
ICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpIH0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVVJMOgorICAgICAg
ICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rl
c3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEtleVR5cGU6OlN0cmluZ1ZlY3RvcjoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzLmluc2VydCh7IGtleSwgc3BsaXQodmFsdWUsICcsJykgfSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpVbmtub3duOgorICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmtub3duIGtleSwgJyVzLCBpbiB0ZXN0IGhlYWRlciBpbiAlcyIsIGtl
eS5jX3N0cigpLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBwYWlyU3RhcnQgPSBwYWlyRW5kICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBib29sIHBhdGhDb250YWlucyhjb25zdCBzdGQ6OnN0cmlu
ZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFyKiBzdWJzdHJpbmcpCit7CisgICAgU3RyaW5nIHBhdGgo
cGF0aE9yVVJMLmNfc3RyKCkpOworICAgIHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7
IC8vIENhc2UtaW5zZW5zaXRpdmUuCit9CisKK3N0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9y
dEZsZXhpYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInZpc3VhbC12aWV3cG9ydC8iKTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkVXNlRXBo
ZW1lcmFsU2Vzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQpAQCAtNjEsMTMgKzI5
NiwyMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvCiAgICAgcmV0
dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3Np
bmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1i
cm93c2luZyIpOwogfQogCi1zdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRv
dWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0Mt
U1ZHLTEuMSIpKQorICAgICAgICByZXR1cm4geyB7IDQ4MCwgMzYwIH0gfTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmlj
ZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewogICAg
IGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQogICAgICAgICByZXR1
cm4gMzsKICAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0iKSkKICAgICAg
ICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAogc3RhdGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6
c3RyaW5nJiBwYXRoT3JVUkwpCkBAIC04MywxNCArMzI1LDM4IEBAIHN0YXRpYyBib29sIHNob3Vs
ZER1bXBKU0NvbnNvbGVMb2dJblN0ZEUKICAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo4ODAwL3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAibG9jYWxob3N0Ojk0NDMvd2Vic29ja2V0cyIpOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9w
dGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLSAgICA6IHVzZUZsZXhpYmxlVmll
d3BvcnQoc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUocGF0aE9yVVJMKSkKLSAgICAsIHVzZUZp
eGVkTGF5b3V0KHNob3VsZFVzZUZpeGVkTGF5b3V0KHBhdGhPclVSTCkpCi0gICAgLCBpc1NWR1Rl
c3QoaXNTVkdUZXN0UGF0aChwYXRoT3JVUkwpKQotICAgICwgdXNlRXBoZW1lcmFsU2Vzc2lvbihz
aG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKHBhdGhPclVSTCkpCi0gICAgLCBkdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnIoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKHBhdGhPclVSTCkpCi0g
ICAgLCBkZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QocGF0aE9yVVJM
KSkKK1Rlc3RGZWF0dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25z
dCBUZXN0Q29tbWFuZCYgY29tbWFuZCkKIHsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisK
KyAgICBpZiAoc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQor
ICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3Bv
cnQiLCB0cnVlIH0pOworICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQu
cGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VF
cGhlbWVyYWxTZXNzaW9uIiwgdHJ1ZSB9KTsKKyAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1
cmVzLmluc2VydCh7ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOworICAgIGlm
IChhdXRvIGRldmljZVNjYWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRl
c3QoY29tbWFuZC5wYXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQp
CisgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZh
Y3RvciIsIGRldmljZVNjYWxlRmFjdG9yLnZhbHVlKCkgfSk7CisgICAgaWYgKGF1dG8gdmlld1dp
ZHRoQW5kSGVpZ2h0ID0gb3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbW1hbmQu
cGF0aE9yVVJMKTsgdmlld1dpZHRoQW5kSGVpZ2h0ICE9IFdURjo6bnVsbG9wdCkgeworICAgICAg
ICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAidmlld1dpZHRoIiwgdmlld1dpZHRo
QW5kSGVpZ2h0LT5maXJzdCB9KTsKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5z
ZXJ0KHsgInZpZXdIZWlnaHQiLCB2aWV3V2lkdGhBbmRIZWlnaHQtPnNlY29uZCB9KTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVs
dHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7Cisg
ICAgcmV0dXJuIHBhcnNlVGVzdEhlYWRlcihjb21tYW5kLmFic29sdXRlUGF0aCwgY29tbWFuZC5w
YXRoT3JVUkwpOworfQorCitUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgIDogbV9mZWF0dXJlcyB7IGZlYXR1cmVzIH0KK3sKKyNpZiBEVU1QX0ZFQVRV
UkVTCisgICAgc3RkOjpjZXJyIDw8ICJEVU1QSU5HIEZFQVRVUkVTXG4iOworICAgIGR1bXBGZWF0
dXJlcyhtX2ZlYXR1cmVzKTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0T3B0aW9ucy5oCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RPcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE2NSArMjUsMTc2IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHN0cmlu
Zz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNw
YWNlIFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgc3RydWN0IENvbnRleHRPcHRp
b25zIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7Ci0gICAgICAg
IGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyB7IGZhbHNlIH07Ci0gICAg
ICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24geyB0cnVlIH07Ci0gICAgICAg
IGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4geyBmYWxzZSB9OwotICAgICAgICBi
b29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQgeyBmYWxzZSB9OwotCi0gICAgICAgIGJv
b2wgaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb25zdCBDb250ZXh0T3B0aW9ucyYgb3B0
aW9ucykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlnbm9yZVN5bmNocm9ub3Vz
TWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1Rp
bWVvdXRzCi0gICAgICAgICAgICAgICAgfHwgb3ZlcnJpZGVMYW5ndWFnZXMgIT0gb3B0aW9ucy5v
dmVycmlkZUxhbmd1YWdlcwotICAgICAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24KLSAgICAg
ICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBvcHRpb25zLmVu
YWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCi0gICAgICAgICAgICAgICAgfHwgdXNlU2Vydmlj
ZVdvcmtlclNob3J0VGltZW91dCAhPSBvcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVv
dXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIGJvb2wgdXNlVGhyZWFkZWRTY3JvbGxpbmcgeyBmYWxz
ZSB9OwotICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5nIHsgZmFsc2UgfTsKLSAgICBib29s
IHVzZVJlbW90ZUxheWVyVHJlZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBzaG91bGRTaG93V2ViVmll
dyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VGbGV4aWJsZVZpZXdwb3J0IHsgZmFsc2UgfTsKLSAg
ICBib29sIHVzZUZpeGVkTGF5b3V0IHsgZmFsc2UgfTsKLSAgICBib29sIGlzU1ZHVGVzdCB7IGZh
bHNlIH07Ci0gICAgYm9vbCB1c2VEYXRhRGV0ZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIHVz
ZU1vY2tTY3JvbGxiYXJzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MgeyBmYWxzZSB9OwotICAgIGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgeyBmYWxz
ZSB9OwotICAgIGJvb2wgdXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgeyBmYWxzZSB9
OwotICAgIGJvb2wgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNlRXBoZW1l
cmFsU2Vzc2lvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlS2V5Z2VuRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlUG9p
bnRlckxvY2sgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb24geyB0
cnVlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRv
ciB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7IGZhbHNlIH07
Ci0gICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZG9tUGFz
dGVBbGxvd2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlQ29sb3JGaWx0ZXIgeyBmYWxzZSB9
OwotICAgIGJvb2wgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBydW5TaW5nbHkgeyBmYWxzZSB9OwotICAgIGJvb2wgY2hlY2tGb3JXb3JsZExl
YWtzIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlU2VydmljZUNvbnRyb2xzIHsgZmFsc2UgfTsKLSAgICBib29sIGVkaXRhYmxl
IHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCB7IHRydWUgfTsK
LSAgICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVycyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJs
ZUFwcE5hcCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFs
c2UgfTsKLSAgICBib29sIGFsbG93c0xpbmtQcmV2aWV3IHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5h
YmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2Fw
dHVyZVZpZGVvSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVB
dWRpb0luVUlQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0lu
R1BVUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBpc0FwcEJvdW5kV2ViVmlldyB7IGZhbHNlIH07Ci0KLSAgICBkb3VibGUg
Y29udGVudEluc2V0VG9wIHsgMCB9OwotCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgeyAx
IH07Ci0gICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVzdDsKLSAgICBzdGQ6OnN0cmlu
ZyBqc2NPcHRpb25zOwotICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzOwotICAgIHN0ZDo6c3RyaW5nIHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTDsKLSAgICBI
YXNoTWFwPFN0cmluZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVyZXM7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIGJvb2w+IGludGVybmFsRGVidWdGZWF0dXJlczsKLSAgICBTdHJpbmcgY29udGVudE1v
ZGU7Ci0gICAgU3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKLSAgICAKLSAgICBD
b250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9uczsKLQotICAgIFRlc3RPcHRpb25zKGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpOwotCi0gICAgLy8gQWRkIGhlcmUgb3B0aW9ucyB0aGF0IGNh
biBvbmx5IGJlIHNldCB1cG9uIFBsYXRmb3JtV2ViVmlldwotICAgIC8vIGluaXRpYWxpemF0aW9u
IGFuZCBtYWtlIHN1cmUgaXQncyB1cCB0byBkYXRlIHdoZW4gYWRkaW5nIG5ldwotICAgIC8vIG9w
dGlvbnMgdG8gdGhpcyBzdHJ1Y3QuIE90aGVyd2lzZSwgdGVzdHMgdXNpbmcgdGhvc2Ugb3B0aW9u
cwotICAgIC8vIG1pZ2h0IGZhaWwgaWYgV1RSIGlzIHJldXNpbmcgYW4gZXhpc3RpbmcgUGxhdGZv
cm1XZWJWaWV3LgotICAgIGJvb2wgaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb25zdCBU
ZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK3N0cnVjdCBUZXN0Q29tbWFuZDsKKworc3RydWN0
IFRlc3RGZWF0dXJlcyB7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29s
PiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIGJvb2w+IGludGVybmFsRGVidWdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIGJvb2w+IGJvb2xGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIGRvdWJsZT4gZG91YmxlRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gc3RyaW5nRmVhdHVyZXM7CisgICAgc3RkOjp1
bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IHN0cmlu
Z1ZlY3RvckZlYXR1cmVzOworfTsKKwordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRl
c3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKKworVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVz
QmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CitUZXN0RmVhdHVyZXMgZmVh
dHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CisK
K3N0cnVjdCBDb250ZXh0T3B0aW9ucyB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG92
ZXJyaWRlTGFuZ3VhZ2VzOworICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1l
b3V0czsKKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uOworICAgIGJvb2wg
ZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47CisgICAgYm9vbCB1c2VTZXJ2aWNlV29ya2Vy
U2hvcnRUaW1lb3V0OworCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNv
bnN0IENvbnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKHVz
ZVRocmVhZGVkU2Nyb2xsaW5nICE9IG9wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcKLSAgICAg
ICAgICAgIHx8IHVzZUFjY2VsZXJhdGVkRHJhd2luZyAhPSBvcHRpb25zLnVzZUFjY2VsZXJhdGVk
RHJhd2luZwotICAgICAgICAgICAgfHwgdXNlTW9ja1Njcm9sbGJhcnMgIT0gb3B0aW9ucy51c2VN
b2NrU2Nyb2xsYmFycwotICAgICAgICAgICAgfHwgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgIT0g
b3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcwotICAgICAgICAgICAgfHwgdXNlQ2hhcmFj
dGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0gb3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25H
cmFudWxhcml0eQotICAgICAgICAgICAgfHwgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgIT0gb3B0
aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudAotICAgICAgICAgICAgfHwgZW5hYmxlSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIgIT0gb3B0aW9ucy5lbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlcgotICAg
ICAgICAgICAgfHwgdXNlRXBoZW1lcmFsU2Vzc2lvbiAhPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNl
c3Npb24KLSAgICAgICAgICAgIHx8IGVuYWJsZU1lbnVJdGVtRWxlbWVudCAhPSBvcHRpb25zLmVu
YWJsZU1lbnVJdGVtRWxlbWVudAotICAgICAgICAgICAgfHwgZW5hYmxlS2V5Z2VuRWxlbWVudCAh
PSBvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQKLSAgICAgICAgICAgIHx8IGVuYWJsZU1vZGVy
bk1lZGlhQ29udHJvbHMgIT0gb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzCi0gICAg
ICAgICAgICB8fCBlbmFibGVQb2ludGVyTG9jayAhPSBvcHRpb25zLmVuYWJsZVBvaW50ZXJMb2Nr
Ci0gICAgICAgICAgICB8fCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbiAhPSBvcHRpb25zLmVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uCi0gICAgICAgICAgICB8fCBlbmFibGVXZWJBdXRoZW50aWNhdGlv
bkxvY2FsQXV0aGVudGljYXRvciAhPSBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9j
YWxBdXRoZW50aWNhdG9yCi0gICAgICAgICAgICB8fCBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMg
IT0gb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMKLSAgICAgICAgICAgIHx8IGR1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciAhPSBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycgot
ICAgICAgICAgICAgfHwgYXBwbGljYXRpb25NYW5pZmVzdCAhPSBvcHRpb25zLmFwcGxpY2F0aW9u
TWFuaWZlc3QKLSAgICAgICAgICAgIHx8IGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fz
a0ZvckNyZWRlbnRpYWxzICE9IG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1Rv
QXNrRm9yQ3JlZGVudGlhbHMKLSAgICAgICAgICAgIHx8IGRvbVBhc3RlQWxsb3dlZCAhPSBvcHRp
b25zLmRvbVBhc3RlQWxsb3dlZAotICAgICAgICAgICAgfHwgZW5hYmxlQ29sb3JGaWx0ZXIgIT0g
b3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcgotICAgICAgICAgICAgfHwgcHVuY2hPdXRXaGl0ZUJh
Y2tncm91bmRzSW5EYXJrTW9kZSAhPSBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0lu
RGFya01vZGUKLSAgICAgICAgICAgIHx8IGpzY09wdGlvbnMgIT0gb3B0aW9ucy5qc2NPcHRpb25z
Ci0gICAgICAgICAgICB8fCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyAhPSBvcHRpb25z
LmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzCi0gICAgICAgICAgICB8fCBydW5TaW5nbHkg
IT0gb3B0aW9ucy5ydW5TaW5nbHkKLSAgICAgICAgICAgIHx8IGNoZWNrRm9yV29ybGRMZWFrcyAh
PSBvcHRpb25zLmNoZWNrRm9yV29ybGRMZWFrcwotICAgICAgICAgICAgfHwgc2hvdWxkU2hvd1Nw
ZWxsQ2hlY2tpbmdEb3RzICE9IG9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzCi0g
ICAgICAgICAgICB8fCBlbmFibGVTZXJ2aWNlQ29udHJvbHMgIT0gb3B0aW9ucy5lbmFibGVTZXJ2
aWNlQ29udHJvbHMKLSAgICAgICAgICAgIHx8IHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCAhPSBv
cHRpb25zLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydAotICAgICAgICAgICAgfHwgZWRpdGFibGUg
IT0gb3B0aW9ucy5lZGl0YWJsZQotICAgICAgICAgICAgfHwgc2hvdWxkSGFuZGxlUnVuT3BlblBh
bmVsICE9IG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsCi0gICAgICAgICAgICB8fCBz
aG91bGRQcmVzZW50UG9wb3ZlcnMgIT0gb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMKLSAg
ICAgICAgICAgIHx8IGNvbnRlbnRJbnNldFRvcCAhPSBvcHRpb25zLmNvbnRlbnRJbnNldFRvcAot
ICAgICAgICAgICAgfHwgY29udGVudE1vZGUgIT0gb3B0aW9ucy5jb250ZW50TW9kZQotICAgICAg
ICAgICAgfHwgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyICE9IG9wdGlvbnMuYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyCi0gICAgICAgICAgICB8fCBlbmFibGVBcHBOYXAgIT0gb3B0aW9u
cy5lbmFibGVBcHBOYXAKLSAgICAgICAgICAgIHx8IGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgIT0g
b3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlCi0gICAgICAgICAgICB8fCBhbGxvd3NMaW5r
UHJldmlldyAhPSBvcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3Ci0gICAgICAgICAgICB8fCBlbmFi
bGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0lu
VUlQcm9jZXNzCi0gICAgICAgICAgICB8fCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3Mg
IT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MKLSAgICAgICAgICAgIHx8
IGVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1
ZGlvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcwotICAgICAgICAg
ICAgfHwgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyAhPSBvcHRpb25zLmFsbG93VG9wTmF2
aWdhdGlvblRvRGF0YVVSTHMKLSAgICAgICAgICAgIHx8IGVuYWJsZUluQXBwQnJvd3NlclByaXZh
Y3kgIT0gb3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5Ci0gICAgICAgICAgICB8fCBz
dGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwgIT0gb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGlj
YXRpb25VUkwKLSAgICAgICAgICAgIHx8IGlzQXBwQm91bmRXZWJWaWV3ICE9IG9wdGlvbnMuaXNB
cHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmIChpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1Rp
bWVvdXRzICE9IG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cworICAg
ICAgICAgICAgfHwgb3ZlcnJpZGVMYW5ndWFnZXMgIT0gb3B0aW9ucy5vdmVycmlkZUxhbmd1YWdl
cworICAgICAgICAgICAgfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gIT0gb3B0aW9u
cy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbgorICAgICAgICAgICAgfHwgZW5hYmxlUHJv
Y2Vzc1N3YXBPbldpbmRvd09wZW4gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbgorICAgICAgICAgICAgfHwgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCAhPSBvcHRp
b25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgICAgICBpZiAoIWNvbnRleHRP
cHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0aW9u
cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBzaG91bGRFbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47
CisgICAgfQorfTsKIAotICAgICAgICBpZiAoZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9u
cy5leHBlcmltZW50YWxGZWF0dXJlcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKK2NsYXNz
IFRlc3RPcHRpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBUZXN0T3B0aW9ucyhUZXN0RmVh
dHVyZXMpOwogCi0gICAgICAgIGlmIChpbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5p
bnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29u
dGV4dE9wdGlvbnMgY29udGV4dE9wdGlvbnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIG92ZXJyaWRlTGFuZ3VhZ2VzKCksCisgICAgICAgICAgICBpZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzKCksCisgICAgICAgICAgICBlbmFibGVQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbigpLAorICAgICAgICAgICAgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRv
d09wZW4oKSwKKyAgICAgICAgICAgIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKQorICAg
ICAgICB9OworICAgIH0KKworICAgIGJvb2wgdXNlVGhyZWFkZWRTY3JvbGxpbmcoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIGZhbHNlKTsg
fQorICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5nKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1
c2VSZW1vdGVMYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VS
ZW1vdGVMYXllclRyZWUiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dXZWJWaWV3KCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1dlYlZpZXciLCBmYWxz
ZSk7IH0KKyAgICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgZmFsc2UpOyB9CisgICAgYm9vbCB1
c2VEYXRhRGV0ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRGF0
YURldGVjdGlvbiIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlTW9ja1Njcm9sbGJhcnMoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VNb2NrU2Nyb2xsYmFycyIsIHRydWUpOyB9
CisgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoIm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIiwgZmFsc2UpOyB9CisgICAgYm9v
bCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJl
VmFsdWUoImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1
c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5IiwgZmFsc2UpOyB9Cisg
ICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgZmFsc2UpOyB9CisgICAgYm9vbCBl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VF
cGhlbWVyYWxTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRXBo
ZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlTWVudUl0ZW1FbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlTWVudUl0ZW1FbGVtZW50
IiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIGZhbHNlKTsgfQorICAg
IGJvb2wgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCB0cnVlKTsgfQorICAgIGJvb2wg
ZW5hYmxlUG9pbnRlckxvY2soKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVQb2ludGVyTG9jayIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRp
b24oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVXZWJBdXRoZW50aWNh
dGlvbiIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0
aGVudGljYXRvcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVdlYkF1
dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJs
ZUluc3BlY3RvckFkZGl0aW9ucygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVu
YWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1Rv
dWNoZXMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93VG91Y2hl
cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgZmFs
c2UpOyB9CisgICAgYm9vbCBhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBk
b21QYXN0ZUFsbG93ZWQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJkb21QYXN0
ZUFsbG93ZWQiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlQ29sb3JGaWx0ZXIoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDb2xvckZpbHRlciIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUi
LCBmYWxzZSk7IH0KKyAgICBib29sIHJ1blNpbmdseSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoInJ1blNpbmdseSIsIGZhbHNlKTsgfQorICAgIGJvb2wgY2hlY2tGb3JXb3JsZExl
YWtzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiY2hlY2tGb3JXb3JsZExlYWtz
IiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBmYWxz
ZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNwZWxsQ2hlY2tpbmdEb3RzIiwgZmFsc2UpOyB9CisgICAg
Ym9vbCBlbmFibGVTZXJ2aWNlQ29udHJvbHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVkaXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZWRpdGFibGUiLCBmYWxzZSk7IH0K
KyAgICBib29sIHNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIsIHRydWUpOyB9CisgICAgYm9v
bCBzaG91bGRQcmVzZW50UG9wb3ZlcnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJzaG91bGRQcmVzZW50UG9wb3ZlcnMiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlQXBwTmFw
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQXBwTmFwIiwgZmFsc2Up
OyB9CisgICAgYm9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlKTsgfQorICAgIGJv
b2wgYWxsb3dzTGlua1ByZXZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJh
bGxvd3NMaW5rUHJldmlldyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9J
blVJUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1
cmVWaWRlb0luVUlQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlk
ZW9JbkdQVVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVD
YXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1
cmVBdWRpb0luVUlQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5h
YmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNh
cHR1cmVBdWRpb0luR1BVUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
ImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgYWxs
b3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5h
YmxlSW5BcHBCcm93c2VyUHJpdmFjeSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
ImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiLCBmYWxzZSk7IH0KKyAgICBib29sIGlzQXBwQm91
bmRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaXNBcHBCb3VuZFdl
YlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGlt
ZW91dHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVTeW5jaHJvbm91
c01lc3NhZ2luZ1RpbWVvdXRzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dh
cE9uTmF2aWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NT
d2FwT25XaW5kb3dPcGVuKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
UHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVNlcnZpY2VX
b3JrZXJTaG9ydFRpbWVvdXQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0IiwgZmFsc2UpOyB9CisgICAgZG91YmxlIGNvbnRlbnRJ
bnNldFRvcCgpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1cmVWYWx1ZSgiY29udGVudEluc2V0
LnRvcCIsIDApOyB9CisgICAgZG91YmxlIGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJkZXZpY2VTY2FsZUZhY3RvciIsIDEpOyB9CisgICAgZG91
YmxlIHZpZXdXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1cmVWYWx1ZSgidmlld1dp
ZHRoIiwgODAwKTsgfQorICAgIGRvdWJsZSB2aWV3SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZG91
YmxlRmVhdHVyZVZhbHVlKCJ2aWV3SGVpZ2h0IiwgNjAwKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFw
cGxpY2F0aW9uTWFuaWZlc3QoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFw
cGxpY2F0aW9uTWFuaWZlc3QiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcganNjT3B0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgianNjT3B0aW9ucyIsIHsgfSk7IH0K
KyAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpIGNvbnN0IHsg
cmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMi
LCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMKCkg
Y29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJzdGFuZGFsb25lV2ViQXBwbGljYXRp
b25VUkwiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgY29udGVudE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImNvbnRlbnRNb2RlIiwgeyB9KTsgfQorICAgIHN0ZDo6
c3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIHN0cmlu
Z0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgeyB9KTsgfQorICAg
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlcygpIGNvbnN0IHsgcmV0
dXJuIHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZSgibGFuZ3VhZ2UiLCB7IH0pOyB9CiAKKyAgICBj
b25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBleHBlcmltZW50YWxG
ZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXM7
IH0KKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBpbnRl
cm5hbERlYnVnRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmludGVybmFsRGVi
dWdGZWF0dXJlczsgfQorCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNv
bnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmV4cGVyaW1l
bnRhbEZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9m
ZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KG1fZmVhdHVyZXMuYm9vbEZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5ib29sRmVhdHVy
ZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmRv
dWJsZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5kb3VibGVGZWF0dXJlcykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nRmVhdHVy
ZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcyAh
PSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtl
eSwgVCBkZWZhdWx0VmFsdWUsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
VD4mIG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtYXAuZmluZChrZXkpOwor
ICAgICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisgICAgfQorCisgICAgYm9vbCBib29s
RmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2Zl
YXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgfQorICAgIGRvdWJsZSBkb3VibGVGZWF0dXJlVmFs
dWUoc3RkOjpzdHJpbmcga2V5LCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5k
b3VibGVGZWF0dXJlcyk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHN0cmluZ0ZlYXR1cmVWYWx1
ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVy
ZXMuc3RyaW5nRmVhdHVyZXMpOworICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
c3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmZWF0
dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVy
ZXMpOworICAgIH0KKworICAgIFRlc3RGZWF0dXJlcyBtX2ZlYXR1cmVzOwogfTsKIAogfQpJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJD
b2NvYS5tbQkocmV2aXNpb24gMjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMjcgKzExNCwy
OCBAQCBXS1ByZWZlcmVuY2VzUmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9yCiAgICAgcmV0dXJu
IChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKWdsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLnBy
ZWZlcmVuY2VzOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRp
b25zKFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25z
dCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworCiAg
ICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6
QCJFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiJdKQotICAgICAgICBvcHRpb25zLmNvbnRl
eHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAg
ZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiIsIHRydWUgfSk7CiAgICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiJdKQotICAg
ICAgICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVu
ID0gdHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIHRydWUgfSk7CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmIChvcHRpb25zLmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kpCi0gICAgICAg
IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJvb2w6WUVTIGZvcktl
eTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCJdOwotI2VuZGlmCisg
ICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUlu
aXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiB8fCBv
cHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkgewotICAgICAgICBh
dXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWcgPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24g
PyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdE5vblBlcnNp
c3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgICAgICBpZiAoIW9w
dGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24g
PSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsKKyAgICBhdXRvIHN0YW5kYWxvbmVXZWJB
cHBsaWNhdGlvblVSTCA9IG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMKCk7Cisg
ICAgaWYgKHVzZUVwaGVtZXJhbFNlc3Npb24gfHwgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJM
Lmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyA9IHVzZUVw
aGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBpZiAoIXVzZUVwaGVtZXJhbFNlc3Npb24pCiAgICAgICAgICAgICBjb25maWd1cmVX
ZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3JpZXMoKFdLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb25SZWYpd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyk7Ci0gICAgICAgIGlmIChvcHRp
b25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKLSAgICAgICAgICAgIFt3
ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvblVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6b3B0aW9ucy5zdGFu
ZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1dXTsKKyAgICAgICAgaWYgKHN0YW5kYWxv
bmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKKyAgICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0
b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvblVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMLmNfc3RyKCldXV07CiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IChfX2JyaWRnZSBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYpW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWddIGF1dG9yZWxlYXNlXTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gKF9fYnJpZGdlIFdLV2Vic2l0
ZURhdGFTdG9yZVJlZilnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3Jl
OwpAQCAtMTQ1LDMyICsxNDYsMzMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVh
dGVXZWJWaQogICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdl
YlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKKyAgICBpZiAob3B0aW9ucy51c2VEYXRh
RGV0ZWN0aW9uKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldERhdGFEZXRlY3Rv
clR5cGVzOldLRGF0YURldGVjdG9yVHlwZUFsbF07Ci0gICAgaWYgKG9wdGlvbnMuaWdub3Jlc1Zp
ZXdwb3J0U2NhbGVMaW1pdHMpCisgICAgaWYgKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0SWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHM6WUVTXTsKLSAgICBpZiAob3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25H
cmFudWxhcml0eSkKKyAgICBpZiAob3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxh
cml0eSgpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRTZWxlY3Rpb25HcmFudWxh
cml0eTpXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFjdGVyXTsKLSAgICBpZiAob3B0aW9ucy5p
c0FwcEJvdW5kV2ViVmlldykKKyAgICBpZiAob3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldygpKQog
ICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRMaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91
bmREb21haW5zOllFU107CiAjZWxzZQotICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRTZXJ2
aWNlQ29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxlU2VydmljZUNvbnRyb2xzXTsKKyAgICBb
Y29waWVkQ29uZmlndXJhdGlvbiBfc2V0U2VydmljZUNvbnRyb2xzRW5hYmxlZDpvcHRpb25zLmVu
YWJsZVNlcnZpY2VDb250cm9scygpXTsKICNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQpCisgICAgaWYgKG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1l
bnQoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50
RW5hYmxlZDpZRVNdOwogCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpCisgICAg
aWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3Vy
YXRpb24gX3NldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNdOwogCiAgICAgW2NvcGllZENvbmZpZ3Vy
YXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopd2Vic2l0ZURh
dGFTdG9yZSgpXTsKIAotICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmln
YXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc107Cisg
ICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6
b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCldOwogCiAgICAgY29uZmlndXJl
Q29udGVudE1vZGUoY29waWVkQ29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBp
ZiAob3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIGF1dG8g
bWFuaWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm9wdGlvbnMuYXBw
bGljYXRpb25NYW5pZmVzdC5jX3N0cigpXTsKKyAgICBhdXRvIGFwcGxpY2F0aW9uTWFuaWZlc3Qg
PSBvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QoKTsKKyAgICBpZiAoYXBwbGljYXRpb25NYW5p
ZmVzdC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIG1hbmlmZXN0UGF0aCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoVVRGOFN0cmluZzphcHBsaWNhdGlvbk1hbmlmZXN0LmNfc3RyKCldOwogICAgICAg
ICBOU1N0cmluZyAqdGV4dCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6bWFu
aWZlc3RQYXRoIHVzZWRFbmNvZGluZzpudWxscHRyIGVycm9yOm51bGxwdHJdOwogICAgICAgICBb
Y29waWVkQ29uZmlndXJhdGlvbiBfc2V0QXBwbGljYXRpb25NYW5pZmVzdDpbX1dLQXBwbGljYXRp
b25NYW5pZmVzdCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJvbUpTT046dGV4dCBtYW5pZmVzdFVSTDpu
aWwgZG9jdW1lbnRVUkw6bmlsXV07CiAgICAgfQpAQCAtMTc4LDEzICsxODAsMTMgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaQogICAgIG1fbWFpbldlYlZpZXcgPSBt
YWtlVW5pcXVlPFBsYXRmb3JtV2ViVmlldz4oY29waWVkQ29uZmlndXJhdGlvbi5nZXQoKSwgb3B0
aW9ucyk7CiAgICAgZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXcobV9tYWluV2ViVmlldy5n
ZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3Vu
ZHNJbkRhcmtNb2RlKQorICAgIGlmIChvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0lu
RGFya01vZGUoKSkKICAgICAgICAgbV9tYWluV2ViVmlldy0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZh
bHNlKTsKIAotICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKQorICAgIGlmIChvcHRpb25zLmVkaXRh
YmxlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNldEVkaXRhYmxlKHRydWUpOwogCi0gICAg
bV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxsb3dzTGlua1ByZXZpZXcgPSBvcHRpb25z
LmFsbG93c0xpbmtQcmV2aWV3OworICAgIG1fbWFpbldlYlZpZXctPnBsYXRmb3JtVmlldygpLmFs
bG93c0xpbmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldygpOwogICAgIFttX21h
aW5XZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKSBfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0
ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOllFU107CiB9CiAKQEAgLTIwMyw3ICsyMDUsNyBA
QCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9yCiB2b2lkIFRlc3RDb250
cm9sbGVyOjpmaW5pc2hDcmVhdGluZ1BsYXRmb3JtV2ViVmlldyhQbGF0Zm9ybVdlYlZpZXcqIHZp
ZXcsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBpZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldykKKyAgICBpZiAob3B0aW9ucy5zaG91bGRT
aG93V2ViVmlldygpKQogICAgICAgICBbdmlldy0+cGxhdGZvcm1XaW5kb3coKSBvcmRlckZyb250
Om5pbF07CiAgICAgZWxzZQogICAgICAgICBbdmlldy0+cGxhdGZvcm1XaW5kb3coKSBvcmRlckJh
Y2s6bmlsXTsKQEAgLTI2MywxMiArMjY1LDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0
Q29udGVudEV4dGVuc2kKICAgICB9CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
c3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGJ1bmRsZUlkZW50aWZp
ZXIuaXNFbXB0eSgpKQorICAgIGlmIChidW5kbGVJZGVudGlmaWVyLmVtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBbVGVzdFJ1bm5lcldLV2ViVmlldyBfc2V0QXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1bmRsZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKV07CisgICAgW1Rlc3RSdW5uZXJXS1dlYlZpZXcgX3NldEFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0b1dURlN0cmluZyhidW5kbGVJZGVudGlmaWVyKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3ZlcnJpZGUoKQpAQCAtMjg2LDcgKzI4
OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29hUmVzZXRTdGF0ZVRvQ28KICAgICAgICAg
VGVzdFJ1bm5lcldLV2ViVmlldyAqcGxhdGZvcm1WaWV3ID0gd2ViVmlldy0+cGxhdGZvcm1WaWV3
KCk7CiAgICAgICAgIHBsYXRmb3JtVmlldy5fdmlld1NjYWxlID0gMTsKICAgICAgICAgcGxhdGZv
cm1WaWV3Ll9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGggPSAwOwotICAgICAgICBbcGxhdGZv
cm1WaWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlv
bnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzXTsKKyAgICAgICAgW3BsYXRmb3JtVmlldyBf
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpvcHRpb25zLnNob3Vs
ZFNob3dTcGVsbENoZWNraW5nRG90cygpXTsKICAgICAgICAgW3BsYXRmb3JtVmlldyByZXNldElu
dGVyYWN0aW9uQ2FsbGJhY2tzXTsKICAgICAgICAgW3BsYXRmb3JtVmlldyBfcmVzZXROYXZpZ2F0
aW9uR2VzdHVyZVN0YXRlRm9yVGVzdGluZ107CiAgICAgfQpAQCAtMjk3LDYgKzI5OSwxMSBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0SW52b2Nh
dGlvbikKIHsKICAgICBzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlv
blRvVVJMKHRlc3RJbnZvY2F0aW9uLnVybCgpKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgaWYgKHRlc3RJbnZvY2F0aW9uLm9wdGlvbnMoKS5lbmFibGVJbkFwcEJyb3dzZXJQcml2
YWN5KCkpCisgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNl
dEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxl
ZCJdOworI2VuZGlmCiB9CiAKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9h
cmRUeXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOwpAQCAtNDg3LDEy
ICs0OTQsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6aXNEb2luZ01lZGlhQ2FwdHVyZQogCiBz
dGF0aWMgV0tDb250ZW50TW9kZSBjb250ZW50TW9kZShjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9kZSA9PSAiZGVza3RvcCJfcykKKyAgICBh
dXRvIG1vZGUgPSBvcHRpb25zLmNvbnRlbnRNb2RlKCk7CisgICAgaWYgKG1vZGUgPT0gImRlc2t0
b3AiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZURlc2t0b3A7Ci0KLSAgICBpZiAob3B0
aW9ucy5jb250ZW50TW9kZSA9PSAibW9iaWxlIl9zKQorICAgIGlmIChtb2RlID09ICJtb2JpbGUi
KQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZU1vYmlsZTsKLQogICAgIHJldHVybiBXS0Nv
bnRlbnRNb2RlUmVjb21tZW5kZWQ7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Z3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2ODExMikKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTUwLDkgKzE1MCwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJl
c2V0UHJlZmVyCiAgICAgbV9tYWluV2ViVmlldy0+ZGlzbWlzc0FsbFBvcHVwTWVudXMoKTsKIH0K
IAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25z
Rm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAor
VGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFi
bGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVz
OworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFD
b250cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZp
ZXdJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvUGxhdGZv
cm1XZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsx
ODksNyBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS1dlYlZpCiAgICAgOiBt
X3dpbmRvd0lzS2V5KHRydWUpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKIHsKLSAgICBDR1Jl
Y3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCwgVGVz
dENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOworICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgw
LCAwLCBvcHRpb25zLnZpZXdXaWR0aCgpLCBvcHRpb25zLnZpZXdIZWlnaHQoKSk7CiAKICAgICBt
X3dpbmRvdyA9IFtbV2ViS2l0VGVzdFJ1bm5lcldpbmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpy
ZWN0XTsKICAgICBtX3dpbmRvdy5iYWNrZ3JvdW5kQ29sb3IgPSBbVUlDb2xvciBsaWdodEdyYXlD
b2xvcl07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJv
bGxlcklPUy5tbQkocmV2aXNpb24gMjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBA
QCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgfQogCiAgICAg
bV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5jbGVhcigpOwotICAgIGlmICghb3B0aW9ucy5zaG91
bGRQcmVzZW50UG9wb3ZlcnMpIHsKKyAgICBpZiAoIW9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92
ZXJzKCkpIHsKICNpZiBVU0UoVUlDT05URVhUTUVOVSkKICAgICAgICAgbV9wcmVzZW50UG9wb3Zl
clN3aXp6bGVycy5hcHBlbmQobWFrZVVuaXF1ZTxJbnN0YW5jZU1ldGhvZFN3aXp6bGVyPihbVUlD
b250ZXh0TWVudUludGVyYWN0aW9uIGNsYXNzXSwgQHNlbGVjdG9yKF9wcmVzZW50TWVudUF0TG9j
YXRpb246KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlUHJlc2VudE1lbnVPclBvcG92
ZXJPclZpZXdDb250cm9sbGVyKSkpOwogI2VuZGlmCkBAIC0yMTMsOCArMjEzLDEwIEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAgICAgICAgVUlTY3JvbGxWaWV3
ICpzY3JvbGxWaWV3ID0gd2ViVmlldy5zY3JvbGxWaWV3OwogICAgICAgICBbc2Nyb2xsVmlldyBf
cmVtb3ZlQWxsQW5pbWF0aW9uczpZRVNdOwogICAgICAgICBbc2Nyb2xsVmlldyBzZXRab29tU2Nh
bGU6MSBhbmltYXRlZDpOT107Ci0gICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gVUlF
ZGdlSW5zZXRzTWFrZShvcHRpb25zLmNvbnRlbnRJbnNldFRvcCwgMCwgMCwgMCk7Ci0gICAgICAg
IHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IENHUG9pbnRNYWtlKDAsIC1vcHRpb25zLmNvbnRl
bnRJbnNldFRvcCk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvbnRlbnRJbnNldFRvcCA9IG9w
dGlvbnMuY29udGVudEluc2V0VG9wKCk7CisgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0
ID0gVUlFZGdlSW5zZXRzTWFrZShjb250ZW50SW5zZXRUb3AsIDAsIDAsIDApOworICAgICAgICBz
Y3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgwLCAtY29udGVudEluc2V0VG9w
KTsKIAogICAgICAgICBpZiAod2ViVmlldy5pbnRlcmFjdGluZ1dpdGhGb3JtQ29udHJvbCkKICAg
ICAgICAgICAgIHNob3VsZFJlc3RvcmVGaXJzdFJlc3BvbmRlciA9IFt3ZWJWaWV3IHJlc2lnbkZp
cnN0UmVzcG9uZGVyXTsKQEAgLTI2NSwxMiArMjY3LDE0IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25m
aWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKKyAgICBbW0dl
bmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5k
b3ddIHNldFNob3VsZFNob3dUb3VjaGVzOnRlc3Qub3B0aW9ucygpLnNob3VsZFNob3dUb3VjaGVz
KCldOworCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IG1haW5XZWJWaWV3KCkt
PnBsYXRmb3JtVmlldygpOwogCi0gICAgaWYgKHRlc3Qub3B0aW9ucygpLnNob3VsZElnbm9yZU1l
dGFWaWV3cG9ydCkKKyAgICBpZiAodGVzdC5vcHRpb25zKCkuc2hvdWxkSWdub3JlTWV0YVZpZXdw
b3J0KCkpCiAgICAgICAgIHdlYlZpZXcuY29uZmlndXJhdGlvbi5wcmVmZXJlbmNlcy5fc2hvdWxk
SWdub3JlTWV0YVZpZXdwb3J0ID0gWUVTOwogCi0gICAgaWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VG
bGV4aWJsZVZpZXdwb3J0KQorICAgIGlmICghdGVzdC5vcHRpb25zKCkudXNlRmxleGlibGVWaWV3
cG9ydCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR1JlY3Qgc2NyZWVuQm91bmRzID0gW1VJ
U2NyZWVuIG1haW5TY3JlZW5dLmJvdW5kczsKQEAgLTI5MSwxMCArMjk1LDkgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQogICAgIC8vIFdLQnVuZGxlUGFnZVNldFVz
ZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFsc2UpLgogfQogCi12b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRp
b25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzID0g
c2hvdWxkU2hvd1RvdWNoZXMoKTsKLSAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBz
aGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHNldFNob3VsZFNob3dUb3VjaGVzOm9w
dGlvbnMuc2hvdWxkU2hvd1RvdWNoZXNdOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQkocmV2aXNpb24g
MjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEsMTggQEAgUGxhdGZvcm1XZWJWaWV3OjpQ
bGF0Zm9ybVdlYlZpZXcoV0tXZWJWaQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCBzdXJlIHRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgZm9yIHRoaXM7IG1heWJl
IHdlIHNob3VsZCBoYXZlIEFQSSB0byBzZXQgdGhpcyBzbyB3ZSBjYW4gZG8gaXQgZnJvbSBUZXN0
Q29udHJvbGxlcj8KLSAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSkKKyAgICBp
ZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSgpKQogICAgICAgICBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRWYWx1ZTpAWUVTIGZvcktleTpAIldlYktpdDJV
c2VSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSJdOwogCiAgICAgYXV0byBjb3BpZWRDb25maWd1
cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilb
Y29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNj
cm9sbGluZyk7CisgICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgo
X19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNl
c10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZygpKTsKIAotICAgIE5TUmVjdCByZWN0
ID0gTlNNYWtlUmVjdCgwLCAwLCBUZXN0Q29udHJvbGxlcjo6dmlld1dpZHRoLCBUZXN0Q29udHJv
bGxlcjo6dmlld0hlaWdodCk7CisgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIG9w
dGlvbnMudmlld1dpZHRoKCksIG9wdGlvbnMudmlld0hlaWdodCgpKTsKICAgICBtX3ZpZXcgPSBb
W1Rlc3RSdW5uZXJXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBjb25maWd1cmF0
aW9uOmNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCldOwogICAgIFttX3ZpZXcgX3NldFdpbmRvd09j
Y2x1c2lvbkRldGVjdGlvbkVuYWJsZWQ6Tk9dOwogCiAgICAgTlNTY3JlZW4gKmZpcnN0U2NyZWVu
ID0gW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdOwotICAgIE5TUmVjdCB3aW5k
b3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID8gTlNPZmZzZXRSZWN0KHJlY3Qs
IDEwMCwgMTAwKSA6IE5TT2Zmc2V0UmVjdChyZWN0LCAtMTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFt
ZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOworICAgIE5TUmVjdCB3
aW5kb3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KCkgPyBOU09mZnNldFJlY3Qo
cmVjdCwgMTAwLCAxMDApIDogTlNPZmZzZXRSZWN0KHJlY3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVu
IGZyYW1lXS5zaXplLmhlaWdodCAtIHJlY3Quc2l6ZS5oZWlnaHQgKyAxMDAwMCk7CiAgICAgbV93
aW5kb3cgPSBbW1dlYktpdFRlc3RSdW5uZXJXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJl
Y3Q6d2luZG93UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tp
bmc6KE5TQmFja2luZ1N0b3JlVHlwZSlfTlNCYWNraW5nU3RvcmVVbmJ1ZmZlcmVkIGRlZmVyOllF
U107CiAgICAgbV93aW5kb3cucGxhdGZvcm1XZWJWaWV3ID0gdGhpczsKICAgICBbbV93aW5kb3cg
c2V0Q29sb3JTcGFjZTpbZmlyc3RTY3JlZW4gY29sb3JTcGFjZV1dOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDI2
ODExMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTEgKzE3MiwxMSBAQCBib29sIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGVzdENv
bnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9w
dGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29u
c3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxp
bmcgPSB0cnVlOwotICAgIG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gc2hvdWxkVXNlUmVt
b3RlTGF5ZXJUcmVlKCk7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IHNob3VsZFNo
b3dXZWJWaWV3KCk7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZlYXR1cmVzLmJv
b2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCB0cnVlIH0pOworICAg
IHJldHVybiBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29u
dGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJ
KHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3Jt
V2ViVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFBs
YXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSCiAgICAgICAgIFNXUF9OT01PVkUgfCBT
V1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT0NPUFlCSVRTKTsKIAogICAgIFVJ
TlQgZmxhZ3MgPSBTV1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT0NPUFlCSVRT
OwotICAgIGlmIChtX29wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcpCisgICAgaWYgKG1fb3B0aW9u
cy5zaG91bGRTaG93V2ViVmlldygpKQogICAgICAgICBmbGFncyB8PSBTV1BfTk9NT1ZFOwogICAg
IDo6U2V0V2luZG93UG9zKAogICAgICAgICBtX3dpbmRvdywKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDI2ODEx
MikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtUmVzZXRQcmVmZXIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRlc3RD
b250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RP
cHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
d3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAJKHJldmlzaW9uIDI2ODExMikKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDkgKzEzNiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJl
c2V0UHJlZmVyCiB7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3Bl
Y2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6
c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewot
ICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IGZhbHNlOworICAgIFRlc3RG
ZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVu
YWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBmYWxzZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410790</attachid>
            <date>2020-10-07 15:17:28 -0700</date>
            <delta_ts>2020-10-08 09:04:02 -0700</delta_ts>
            <desc>Path</desc>
            <filename>bug-217390-20201006204110.patch</filename>
            <type>text/plain</type>
            <size>101771</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODExMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1OSBAQAorMjAyMC0xMC0wNiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgVGVzdE9wdGlvbnMgY29kZSBpbiBXZWJLaXRUZXN0UnVubmVyIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHJhdGlvbmFsaXplIGFuZCBleHRlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzM5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBUZXN0T3B0aW9ucyBjb2Rl
IGluIFdlYktpdFRlc3RSdW5uZXIgdG8gbWFrZSBpdCBjbGVhciBob3cgb3B0aW9ucyBjb21pbmcg
aW4gYXQgCisgICAgICAgIGRpZmZlcmVudCBsZXZlbHMgYXJlIHRyZWF0ZWQgYW5kIHdoYXQgcHJl
Y2VkZW5jZSBlYWNoIGhhcy4gVGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAg
ICAgICAKKyAgICAgICAgLSBHbG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5u
ZXIgdmlhIHRoZSBjb21tYW5kIGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0g
SGFyZGNvZGVkIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1
biAoaG9wZWZ1bGx5IHdlIGNhbiByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVk
IHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09T
IGZvciB1c2VUaHJlYWRlZFNjcm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSB0aGUg
dGVzdCBoZWFkZXJzIHdpdGhpbiB0aGUgdGVzdCBpdHNlbGYuCisgICAgICAgIC0gRmluYWxseSwg
YSBzZWNvbmQgY2hhbmNlIGZvciBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJy
ZW5seSBvbmx5IHVzZWQgdGhlIENvY29hIHBvcnRzCisgICAgICAgICAgZm9yIHNldHRpbmcgZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gYW5kIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dP
cGVuIGJhc2VkIG9uIE5TVXNlckRlZmF1bHRzLikKKworICAgICAgICBUbyBtYWtlIHRoaXMgY2hh
bmdlIHdvcmssIGFuZCBwYXZlIHRoZSB3YXkgZm9yIGZ1dHVyZSBhdXRvZ2VuZXJhdGlvbiBvZiBz
b21lIG9mIHRoZXNlIHRlc3Qgb3B0aW9ucywKKyAgICAgICAgdGhlIFRlc3RPcHRpb25zIHN0cnVj
dCAobm93IGNsYXNzKSB3YXMgb3ZlcmhhdWxlZC4gSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBzdGF0
ZSBpdHNlbGYsIFRlc3RPcHRpb25zCisgICAgICAgIGlzIG5vdyBhbiBpbW11dGFibGUgb3duZXIg
b2YgYSBUZXN0RmVhdHVyZXMgb2JqZWN0LiBUZXN0RmVhdHVyZXMgaXMgYSBzaW1wbGUgc3RydWN0
IHRoYXQgY29udGFpbnMgbWFwcyAKKyAgICAgICAgb2Ygb3B0aW9uIGtleXMgdG8gdmFsdWVzIGFu
ZCBjYW4gYmUgbWVyZ2VkIHdpdGggb3RoZXIgVGVzdEZlYXR1cmVzIG9iamVjdHMuIFRlc3RPcHRp
b25zIHRha2VzIGEgCisgICAgICAgIFRlc3RGZWF0dXJlcyBhdCBjb25zdHJ1Y3Rpb24sIGFuZCBl
eHBvc2VzIGdldHRlcnMgZm9yIGFsbCBrZXlzLCBhcyB3ZWxsIGFzIGRlZmF1bHRzIGZvciB3aGVu
IHRoZXkgYXJlCisgICAgICAgIG5vdCBpbiB0aGUgbWFwcy4gSW4gZnV0dXJlIGNoYW5nZXMsIEkg
d291bGQgbGlrZSB0byByZW1vdmUgbWFueSBvZiB0aGVzZSAodGhlIG9uZXMgdGhhdCBjb3JyZXNw
b25kCisgICAgICAgIHdpdGggV2ViS2l0IHByZWZlcmVuY2VzIGFueXdheSkgYW5kIGhhdmUgdGhl
IGtleXMgYW5kIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGRlYWx0IHdpdGggYnkgV0tQcmVmZXJlbmNl
cy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHA6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmg6CisgICAgICAgIFN3aXRjaCB0byBzdGQ6OnVub3Jk
ZXJlZF9tYXAgZm9yIGNvbnNpc3RlbmN5IGFuZCBlYXNlIG9mIGNvbnZlcnNpb24uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gY2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAg
ICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAgQWRkIGNvbnZlcnNpb25zIGZvciBzdGQ6
OnN0cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICBSZXBsYWNlIHNvbWUg
Ym9vbHMgd2l0aCBhIG5ldyBnbG9iYWwgVGVzdEZlYXR1cmVzIGluc3RhbmNlIHRoYXQgZm9ybXMg
dGhlIGJhc2Ugb2YKKyAgICAgICAgYWxsIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
biBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdX
aXRoT3B0aW9ucyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNl
dFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwpOgorICAgICAgICBFeHBvc2UgYXMgYSBzdGF0
aWMgbWVtYmVyIGZ1bmN0aW9uIG9uIFRlc3RDb250cm9sbGVyIGZvciB1c2UgaW4gb3RoZXIgZmls
ZXMuCisgICAgICAgIAorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNG
b3JUZXN0IGNvbnN0KToKKyAgICAgICAgUmV3b3JrIHRvIGJlIGEgc2VxdWVuY2Ugb2YgVGVzdEZl
YXR1cmVzIG1lcmdlcy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRl
c3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmNyZWF0ZVRlc3RV
UkwpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVs
YXRpdmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVhZGVy
VmFsdWVBc1VSTCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnVwZGF0ZVRlc3RPcHRpb25zRnJv
bVRlc3RIZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGRUZXN0T3B0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmVkIFRlc3RP
cHRpb25zIHBhcnNpbmcgdG8gVGVzdE9wdGlvbnMuY3BwCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCBu
ZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0T3B0aW9ucy5oOgorICAgICAgICBSZXdvcmtzIFRlc3RPcHRpb25zIHRvIGJlIGFuIGltbXV0
YWJsZSBvd25lciBvZiBhIFRlc3RGZWF0dXJlcyBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2V0CisgICAg
ICAgIG9mIG1hcHMgdGhhdCBtYXAgZmVhdHVyZSBzdHJpbmcga2V5cywgdG8gdmFsdWVzIG9mIHR5
cGUgYm9vbCwgZG91YmxlLCBzdHJpbmcgb3Igc3RyaW5nIHZlY3Rvci4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjptZXJnZSk6Cisg
ICAgICAgIE1lcmdlcyB0d28gVGVzdEZlYXR1cmVzIG9iamVjdHMuIElmIGJvdGggY29udGFpbiB0
aGUgc2FtZSBrZXksIHRoZSAnYWRkaXRpb25hbCcKKyAgICAgICAgVGVzdEZlYXR1cmVzIG92ZXJy
aWRlcyB0aGUgJ2Jhc2UnIFRlc3RGZWF0dXJlcy4KKworICAgICAgICAoV1RSOjpkdW1wRmVhdHVy
ZXMpOgorICAgICAgICBIZWxwZXIgdG8gZHVtcCBmZWF0dXJlcyB0byBzdGRlcnIsIHVzZWZ1bCBm
b3IgZGVidWdnaW5nLgorCisgICAgICAgIChXVFI6OmtleVR5cGUpOgorICAgICAgICBIZWxwZXIg
Zm9yIHBhcnNlciB0byBrbm93IHdoaWNoIHZhbHVlIHBhcnNlciB0byB1c2UuCisKKyAgICAgICAg
KFdUUjo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKToKKyAgICAgICAgKFdUUjo6cGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6CisgICAgICAgIChXVFI6OnBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOgorICAgICAgICBWYWx1ZSBwYXJzZXJzIG1vdmVk
IGZyb20gVGVzdENvbnRyb2xsZXIuY3BwCisKKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVhZGVy
KToKKyAgICAgICAgSGVhZGVyIHBhcnNlciBtb3ZlZCBmcm9tIFRlc3RDb250cm9sbGVyLmNwcC4g
VXBkYXRlIHRvIG5vdyByZXR1cm4KKyAgICAgICAgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGFuZCB1
c2Uga2V5VHlwZSB0byBwaWNrIHZhbHVlIHBhcnNlciByYXRoZXIKKyAgICAgICAgdGhhbiBpbmxp
bmluZyB0aGUgaWYgc3RhdGVtZW50cy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmhhcmRjb2Rl
ZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KToKKyAgICAgICAgTW92ZWQgZnJvbSB0aGUgVGVz
dE9wdGlvbnMgY29udHJ1Y3RvciBhbmQgcmV3b3JrZWQgdG8gcmV0dXJuIGEgVGVzdEZlYXR1cmVz
CisgICAgICAgIG9iamVjdCB0byBiZSBtZXJnZWQgYnkgdGhlIGNhbGxlci4KKworICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVh
dGVzIGEgVGVzdEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRl
c3QuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVh
dHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRv
IG5vdyByZXR1cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJh
dGhlciB0aGFuIHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUlu
QXBwQnJvd3NlclByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVu
VGVzdAorICAgICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0
ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAg
ICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAg
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRh
dGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgTW92ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMg
bW9yZSBhcHByb3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFz
IHRoYXQgaXMgZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRv
IGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1v
dGVMYXllclRyZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUg
Z2xvYmFsbHksCisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGlu
ZyB0byB1c2UgYm9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4v
VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQ
bGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgVXBkYXRlZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvZ3RrL1Rlc3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9u
c0ZvclRlc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0
dXJlLgorCiAyMDIwLTEwLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVsb2FkaW5nIGEgdmlldyBpbiBpdHMgcHJvY2Vzc1Rlcm1pbmF0aW9uSGFuZGxlciBk
b2VzIG5vdCB3b3JrIHJlbGlhYmx5IHdoZW4gdXNpbmcgcmVsYXRlZCB2aWV3cwpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogCisjaW5jbHVkZSAi
U3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVFIg
ewpAQCAtMTEzLDE2ICsxMTQsMTYgQEAgc3RhdGljIGJvb2wgaGFuZGxlT3B0aW9uQWxsb3dlZEhv
c3QoT3B0aQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUZlYXR1cmUo
U3RyaW5nIGZlYXR1cmVTdHJpbmcsIEhhc2hNYXA8U3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCitz
dGF0aWMgYm9vbCBwYXJzZUZlYXR1cmUoc3RkOjpzdHJpbmdfdmlldyBmZWF0dXJlU3RyaW5nLCBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBmZWF0dXJlcykKIHsKLSAgICBh
dXRvIHN0cmluZ3MgPSBmZWF0dXJlU3RyaW5nLnNwbGl0KCc9Jyk7Ci0gICAgaWYgKHN0cmluZ3Mu
aXNFbXB0eSgpIHx8IHN0cmluZ3Muc2l6ZSgpID4gMikKKyAgICBhdXRvIHN0cmluZ3MgPSBzcGxp
dChmZWF0dXJlU3RyaW5nLCAnPScpOworICAgIGlmIChzdHJpbmdzLmVtcHR5KCkgfHwgc3RyaW5n
cy5zaXplKCkgPiAyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIGZlYXR1cmVO
YW1lID0gc3RyaW5nc1swXTsKICAgICBib29sIGVuYWJsZWQgPSBzdHJpbmdzLnNpemUoKSA9PSAx
IHx8IHN0cmluZ3NbMV0gPT0gInRydWUiOwogCi0gICAgZmVhdHVyZXMuc2V0KGZlYXR1cmVOYW1l
LCBlbmFibGVkKTsKKyAgICBmZWF0dXJlcy5pbnNlcnQoeyBzdGQ6OnN0cmluZyB7IGZlYXR1cmVO
YW1lIH0sIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3Myw3ICsxNzQs
MTIgQEAgY29uc3QgY2hhciAqIE9wdGlvbnNIYW5kbGVyOjp1c2FnZSA9ICJVcwogY29uc3QgY2hh
ciAqIE9wdGlvbnNIYW5kbGVyOjpoZWxwID0gIkRpc3BsYXlzIHRoaXMgaGVscC4iOwogCiBPcHRp
b246Ok9wdGlvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgc3Rk
OjpmdW5jdGlvbjxib29sKE9wdGlvbnMmLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopPiBwYXJh
bWV0ZXJIYW5kbGVyLCBib29sIGhhc0FyZ3VtZW50KQotICAgIDogbmFtZShuYW1lKSwgZGVzY3Jp
cHRpb24oZGVzY3JpcHRpb24pLCBwYXJhbWV0ZXJIYW5kbGVyKHBhcmFtZXRlckhhbmRsZXIpLCBo
YXNBcmd1bWVudChoYXNBcmd1bWVudCkgeyB9OworICAgIDogbmFtZShuYW1lKQorICAgICwgZGVz
Y3JpcHRpb24oZGVzY3JpcHRpb24pCisgICAgLCBwYXJhbWV0ZXJIYW5kbGVyKHBhcmFtZXRlckhh
bmRsZXIpCisgICAgLCBoYXNBcmd1bWVudChoYXNBcmd1bWVudCkKK3sKK30KIAogYm9vbCBPcHRp
b246Om1hdGNoZXMoY29uc3QgY2hhciogb3B0aW9uKQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmgJKHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8c2V0Pgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJl
ZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTU3LDggKzU3LDggQEAgc3RydWN0IE9w
dGlvbnMgewogI2VuZGlmCiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhdGhzOwogICAg
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBhbGxvd2VkSG9zdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IGJvb2w+IGludGVybmFsRmVhdHVyZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IGV4cGVy
aW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9v
bD4gaW50ZXJuYWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwogfTsKIAogY2xhc3MgT3B0aW9uIHsKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAkocmV2aXNpb24gMjY4MTEy
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUZyb21XaW5k
b3coKTsKICAgICB2b2lkIGFkZFRvV2luZG93KCk7CiAKLSAgICBib29sIHZpZXdTdXBwb3J0c09w
dGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25z
LnJ1blNpbmdseSAmJiBtX29wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRp
b25zKTsgfQorICAgIGJvb2wgdmlld1N1cHBvcnRzT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYg
b3B0aW9ucykgY29uc3QgeyByZXR1cm4gIW9wdGlvbnMucnVuU2luZ2x5KCkgJiYgbV9vcHRpb25z
Lmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucyk7IH0KIAogICAgIFBsYXRmb3Jt
SW1hZ2Ugd2luZG93U25hcHNob3RJbWFnZSgpOwogICAgIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zOyB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmdQcml2YXRlLmg+CiAjaW5jbHVkZSA8c3N0
cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KQEAgLTU5LDYgKzYwLDExIEBAIGlubGluZSBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9XSyhjb24KICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKIH0KIAoraW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0so
c3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0soY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykKIHsKICAgICByZXR1cm4gdG9XSyhzdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CkBAIC0xMTQsNiArMTIwLDExIEBAIGlubGluZSBXVEY6OlN0cmluZyB0
b1dURlN0cmluZyhjb25zdCBKU1IKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgp
KTsKIH0KIAoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
JiBzdHJpbmcpCit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuY19z
dHIoKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKICAgICByZXR1cm4gdG9X
SyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOwpAQCAtMTI1LDQgKzEzNiwy
NSBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0CiAgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFN0cmluZ1R5cGU+CitpbmxpbmUgc3RkOjp2ZWN0b3I8U3RyaW5nVHlwZT4g
c3BsaXQoY29uc3QgU3RyaW5nVHlwZSYgc3RyaW5nLCBjaGFyIGRlbGltaXRlcikKK3sKKyAgICBz
dGQ6OnZlY3RvcjxTdHJpbmdUeXBlPiByZXN1bHQ7CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAg
d2hpbGUgKGkgPCBzdHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IHN0
cmluZy5maW5kX2ZpcnN0X29mKGRlbGltaXRlciwgaSk7CisKKyAgICAgICAgaWYgKGZvdW5kSW5k
ZXggIT0gaSkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soc3RyaW5nLnN1YnN0cihpLCBm
b3VuZEluZGV4IC0gaSkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ID09IFN0cmluZ1R5cGU6
Om5wb3MpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpID0gZm91bmRJbmRleCArIDE7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSwxMiArMTA5LDYgQEAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHBh
dGhTZXBhcmF0b3IgPSAnXAogc3RhdGljIGNvbnN0ZXhwciBhdXRvIHBhdGhTZXBhcmF0b3IgPSAn
Lyc7CiAjZW5kaWYKIAotY29uc3QgdW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCA9
IDgwMDsKLWNvbnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0ID0gNjAwOwot
Ci1jb25zdCB1bnNpZ25lZCBUZXN0Q29udHJvbGxlcjo6dzNjU1ZHVmlld1dpZHRoID0gNDgwOwot
Y29uc3QgdW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnczY1NWR1ZpZXdIZWlnaHQgPSAzNjA7Ci0K
IGNvbnN0IFdURjo6U2Vjb25kcyBUZXN0Q29udHJvbGxlcjo6ZGVmYXVsdFNob3J0VGltZW91dCA9
IDVfczsKIGNvbnN0IFdURjo6U2Vjb25kcyBUZXN0Q29udHJvbGxlcjo6bm9UaW1lb3V0ID0gLTFf
czsKIApAQCAtNDY5LDE1ICs0NjMsMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6
ZShpbnQgYXJnYwogICAgIG1fc2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gb3B0aW9ucy5z
aG91bGREdW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAgICAgbV9mb3JjZUNvbXBsZXhUZXh0ID0gb3B0
aW9ucy5mb3JjZUNvbXBsZXhUZXh0OwogICAgIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5n
ID0gb3B0aW9ucy5zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmc7Ci0gICAgbV9zaG91bGRVc2VS
ZW1vdGVMYXllclRyZWUgPSBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVyVHJlZTsKICAgICBt
X3BhdGhzID0gb3B0aW9ucy5wYXRoczsKICAgICBtX2FsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxs
b3dlZEhvc3RzOwotICAgIG1fc2hvdWxkU2hvd1dlYlZpZXcgPSBvcHRpb25zLnNob3VsZFNob3dX
ZWJWaWV3OwotICAgIG1fc2hvdWxkU2hvd1RvdWNoZXMgPSBvcHRpb25zLnNob3VsZFNob3dUb3Vj
aGVzOwogICAgIG1fY2hlY2tGb3JXb3JsZExlYWtzID0gb3B0aW9ucy5jaGVja0ZvcldvcmxkTGVh
a3M7CiAgICAgbV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgPSBvcHRp
b25zLmFsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0czsKLSAgICBtX2ludGVy
bmFsRmVhdHVyZXMgPSBvcHRpb25zLmludGVybmFsRmVhdHVyZXM7Ci0gICAgbV9leHBlcmltZW50
YWxGZWF0dXJlcyA9IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgCisgICAgbV9n
bG9iYWxGZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgPSBvcHRpb25zLmludGVybmFsRmVh
dHVyZXM7CisgICAgbV9nbG9iYWxGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyA9IG9wdGlv
bnMuZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgbV9nbG9iYWxGZWF0dXJlcy5ib29sRmVhdHVy
ZXMuaW5zZXJ0KHsgInVzZVJlbW90ZUxheWVyVHJlZSIsIG9wdGlvbnMuc2hvdWxkVXNlUmVtb3Rl
TGF5ZXJUcmVlIH0pOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7
ICJzaG91bGRTaG93V2ViVmlldyIsIG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgfSk7CisgICAg
bV9nbG9iYWxGZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInNob3VsZFNob3dUb3VjaGVz
Iiwgb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlcyB9KTsKKwogI2lmIEVOQUJMRShBQ0NFU1NJQklM
SVRZX0lTT0xBVEVEX1RSRUUpCiAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9
IG9wdGlvbnMuYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGU7CiAjZW5kaWYKQEAgLTQ5OSw3
ICs0OTUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAg
bV9ldmVudFNlbmRlclByb3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNlbmRlclByb3h5Pih0aGlzKTsK
IH0KIAotV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gVGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnM6OkNvbnRl
eHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAorV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJh
dGlvblJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29u
c3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CiB7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHRXSyhXS0NvbnRleHRDb25maWd1cmF0aW9uQ3JlYXRlKCkpOwogICAgIFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25TZXRJbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQo
KSwgaW5qZWN0ZWRCdW5kbGVQYXRoKCkpOwpAQCAtNTYyLDEwICs1NTgsMTEgQEAgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIFRlc3RDb250cm9sbGVyOjp3ZQogCiBXS1JldGFpblB0cjxXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbihj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9j
b250ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRl
eHRPcHRpb25zKSkgewotICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0gZ2VuZXJh
dGVDb250ZXh0Q29uZmlndXJhdGlvbihvcHRpb25zLmNvbnRleHRPcHRpb25zKTsKKyAgICBhdXRv
IGNvbnRleHRPcHRpb25zID0gb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpOworICAgIGlmICghbV9j
b250ZXh0IHx8ICFtX2NvbnRleHRPcHRpb25zLT5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25z
KGNvbnRleHRPcHRpb25zKSkgeworICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0g
Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb250ZXh0T3B0aW9ucyk7CiAgICAgICAgIG1f
Y29udGV4dCA9IHBsYXRmb3JtQWRqdXN0Q29udGV4dChhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdp
dGhDb25maWd1cmF0aW9uKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpKSkuZ2V0KCksIGNvbnRl
eHRDb25maWd1cmF0aW9uLmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0T3B0aW9ucyA9IG9wdGlv
bnMuY29udGV4dE9wdGlvbnM7CisgICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBjb250ZXh0T3B0
aW9uczsKIAogICAgICAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBtYWtlVW5pcXVlPEdlb2xv
Y2F0aW9uUHJvdmlkZXJNb2NrPihtX2NvbnRleHQuZ2V0KCkpOwogCkBAIC02MjcsNyArNjI0LDcg
QEAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogICAgIFdLUGFnZUNv
bmZpZ3VyYXRpb25TZXRDb250ZXh0KHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBtX2NvbnRleHQu
Z2V0KCkpOwogICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRQYWdlR3JvdXAocGFnZUNvbmZpZ3Vy
YXRpb24uZ2V0KCksIG1fcGFnZUdyb3VwLmdldCgpKTsKICAgICAKLSAgICBpZiAob3B0aW9ucy51
c2VFcGhlbWVyYWxTZXNzaW9uKSB7CisgICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lv
bigpKSB7CiAgICAgICAgIGF1dG8gZXBoZW1lcmFsRGF0YVN0b3JlID0gYWRvcHRXSyhXS1dlYnNp
dGVEYXRhU3RvcmVDcmVhdGVOb25QZXJzaXN0ZW50RGF0YVN0b3JlKCkpOwogICAgICAgICBXS1Bh
Z2VDb25maWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShwYWdlQ29uZmlndXJhdGlvbi5nZXQo
KSwgZXBoZW1lcmFsRGF0YVN0b3JlLmdldCgpKTsKICAgICB9CkBAIC02MzksMTEgKzYzNiwxMiBA
QCBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBUZXN0CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0
aW9ucykKIHsKKyAgICBhdXRvIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG9wdGlvbnMu
YXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
aWYgKCFvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAoIWFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIC8v
IFRoZSBidW5kbGUgaWRlbnRpZmllciBjYW4gb25seSBiZSBzZXQgb25jZSBwZXIgdGVzdCwgYW5k
IGlzIGNsZWFyZWQgYmV0d2VlbiB0ZXN0cy4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFz
U2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKLSAgICAgICAgc2V0QXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyKG9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAg
ICAgICAgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGFwcGxpY2F0aW9uQnVuZGxlSWRl
bnRpZmllcik7CiAgICAgICAgIG1faGFzU2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0g
dHJ1ZTsKICAgICB9CiAjZW5kaWYKQEAgLTY4Niw3ICs2ODQsNyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wCiAgICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAg
MCwgLy8gcGFnZURpZFNjcm9sbAogICAgICAgICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEs
Ci0gICAgICAgIG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsID8gcnVuT3BlblBhbmVs
IDogMCwKKyAgICAgICAgb3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwoKSA/IHJ1bk9w
ZW5QYW5lbCA6IDAsCiAgICAgICAgIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QsCiAgICAgICAgIDAsIC8vIGhlYWRlckhlaWdodAogICAgICAgICAwLCAvLyBmb290
ZXJIZWlnaHQKQEAgLTc5NSw5ICs3OTMsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjcmVhdGVX
ZWJWaWV3V2l0aE9wCiAgICAgLy8gc29tZXRoaW5nIGVsc2UgZm9yIHNwZWNpZmljIHRlc3RzIHRo
YXQgbmVlZCB0byBydW4gYXQgYSBkaWZmZXJlbnQgd2luZG93IHNjYWxlLgogICAgIG1fbWFpbldl
YlZpZXctPmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQoMSk7CiAgICAgCi0gICAgaWYgKCFvcHRp
b25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIHJlaW5pdGlhbGl6
ZUFwcEJvdW5kRG9tYWlucygpOwotICAgICAgICB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2VzcyhvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAg
IHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcik7CiAgICAgfQogfQogCkBAIC04MDksNyArODA3LDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzTwogICAgICAgICAvLyBIYXZpbmcgY3JlYXRlZCBh
bm90aGVyIHBhZ2UgKHZpYSB3aW5kb3cub3BlbigpKSBwcmV2ZW50cyBwcm9jZXNzIHN3YXBwaW5n
IG9uIG5hdmlnYXRpb24gYW5kIGl0IG1heSB0aGVyZWZvcmUKICAgICAgICAgLy8gY2F1c2UgZmxh
a2luZXNzIHRvIHJldXNlIHRoZSB2aWV3LiBXZSBzaG91bGQgYWxzbyBhbHdheXMgbWFrZSBhIG5l
dyB2aWV3IGlmIHRoZSB0ZXN0IGlzIG1hcmtlZCBhcyBhcHAtYm91bmQsIGJlY2F1c2UKICAgICAg
ICAgLy8gdGhlIHZpZXcgY29uZmlndXJhdGlvbiBtdXN0IGNoYW5nZS4KLSAgICAgICAgaWYgKCFt
X2NyZWF0ZWRPdGhlclBhZ2UgJiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhv
cHRpb25zKSAmJiAhb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAgaWYgKCFtX2Ny
ZWF0ZWRPdGhlclBhZ2UgJiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhvcHRp
b25zKSAmJiAhb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldygpKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIHdpbGxEZXN0cm95V2ViVmlldygpOwpAQCAtODM2LDggKzgzNCw4IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2Vz
UmVzZXRUZXN0UnVubmVyT3ZlcnJpZGVzKHByZWZlcmVuY2VzKTsKIAogICAgIFdLUHJlZmVyZW5j
ZXNFbmFibGVBbGxFeHBlcmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBleHBlcmltZW50YWxGZWF0dXJlIDogb3B0aW9ucy5leHBlcmltZW50YWxGZWF0
dXJlcykKLSAgICAgICAgV0tQcmVmZXJlbmNlc1NldEV4cGVyaW1lbnRhbEZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIGV4cGVyaW1lbnRhbEZlYXR1cmUudmFsdWUsIHRvV0soZXhwZXJpbWVudGFs
RmVhdHVyZS5rZXkpLmdldCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZhbHVlXSA6
IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1Nl
dEV4cGVyaW1lbnRhbEZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSku
Z2V0KCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVz
KHByZWZlcmVuY2VzKTsKIApAQCAtODYyLDE3ICs4NjAsMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVn
RmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlV2Vla0VuYWJs
ZWQiKS5nZXQoKSk7CiAjZW5kaWYKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmUgOiBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAgICAgICAgV0tQcmVm
ZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBpbnRlcm5h
bERlYnVnRmVhdHVyZS52YWx1ZSwgdG9XSyhpbnRlcm5hbERlYnVnRmVhdHVyZS5rZXkpLmdldCgp
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZhbHVlXSAgOiBvcHRpb25zLmludGVybmFs
RGVidWdGZWF0dXJlcygpKQorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSkuZ2V0KCkpOwogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQcm9j
ZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJv
Y2Vzcyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzKTsK
LSAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywg
b3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRDYXB0dXJlVmlkZW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
ZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENh
cHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
Q2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJl
QXVkaW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVy
ZUF1ZGlvSW5VSVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0lu
R1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlv
SW5HUFVQcm9jZXNzKCkpOwogI2VuZGlmCi0gICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5z
aG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0UGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJlZmVyZW5j
ZXMsIG9wdGlvbnMuZW5hYmxlQXBwTmFwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmNvbnRleHRPcHRpb25z
KCkuc2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldFBhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUFwcE5hcCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBX
S1ByZWZlcmVuY2VzU2V0U3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQocHJlZmVy
ZW5jZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0WFNTQXVkaXRvckVuYWJsZWQocHJl
ZmVyZW5jZXMsIGZhbHNlKTsKQEAgLTg4MywxMCArODgxLDEwIEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdFJ1
bnRpbWVGbGFncyhwcmVmZXJlbmNlcywga1dLSmF2YVNjcmlwdFJ1bnRpbWVGbGFnc0FsbEVuYWJs
ZWQpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0
aWNhbGx5KHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlw
dENhbkFjY2Vzc0NsaXBib2FyZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldERPTVBhc3RlQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRET01QYXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZG9tUGFzdGVBbGxvd2VkKCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRVbml2ZXJzYWxBY2Nl
c3NGcm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVu
Y2VzU2V0RmlsZUFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIHRydWUpOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyk7CisgICAgV0tQcmVm
ZXJlbmNlc1NldFRvcE5hdmlnYXRpb25Ub0RhdGFVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0
aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkpOwogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKICAgICBXS1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQocHJlZmVyZW5j
ZXMsIHRydWUpOwogI2VuZGlmCkBAIC04OTksMTggKzg5NywxOCBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEN1c3RvbVBhc3Rl
Ym9hcmREYXRhRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dERpYWxvZ0VsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKIAotICAgIFdLUHJlZmVy
ZW5jZXNTZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9j
a1Njcm9sbGJhcnMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyhwcmVmZXJlbmNlcywgb3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVBdHRhY2htZW50RWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVt
RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50
KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1vZGVy
bk1lZGlhQ29udHJvbHNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1l
ZGlhQ29udHJvbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24pOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvckVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRp
Y2F0b3IpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENv
bG9yRmlsdGVyRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcik7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUo
cHJlZmVyZW5jZXMsIG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSk7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vY2tTY3Jv
bGxiYXJzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycygpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJlZmVyZW5jZXMs
IG9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBdHRh
Y2htZW50RWxlbWVudCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TWVudUl0ZW1FbGVtZW50RW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25z
LmVuYWJsZUtleWdlbkVsZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbigpKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNh
dG9yKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
Q29sb3JGaWx0ZXJFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVy
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlKHByZWZlcmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01v
ZGUoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNT
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTktMSIp
LmdldCgpKTsKIApAQCAtOTMyLDcgKzkzMCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0
UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0
SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKHByZWZlcmVuY2VzLCBmYWxz
ZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChwcmVm
ZXJlbmNlcywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51c2VBY2Nl
bGVyYXRlZERyYXdpbmcpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZERyYXdpbmdF
bmFibGVkKHByZWZlcmVuY2VzLCBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyB8fCBvcHRp
b25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZygpKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IHRlc3RpbmcgdGhlIGRlZmF1bHQuCiAgICAgV0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VCbG9ja2lu
Z1BvbGljeShwcmVmZXJlbmNlcywga1dLQWxsb3dBbGxTdG9yYWdlKTsKIApAQCAtOTUzLDcgKzk1
MSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICAKICAg
ICBXS1ByZWZlcmVuY2VzU2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKHByZWZlcmVu
Y2VzLCBmYWxzZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9ucygpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNT
ZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgCkBAIC05
NzIsNyArOTcwLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwog
ICAgIFdLUHJlZmVyZW5jZXNTZXRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShwcmVm
ZXJlbmNlcywgZmFsc2UpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVy
ZUZvcktleShwcmVmZXJlbmNlcywgZmFsc2UsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTcGVha2VyU2VsZWN0aW9uUmVxdWlyZXNVc2VyR2VzdHVyZSIpKTsKIAotICAgIFdLUHJlZmVy
ZW5jZXNTZXRTaG91bGRVc2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZlcmVuY2VzLCBv
cHRpb25zLmNvbnRleHRPcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRTaG91bGRVc2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZl
cmVuY2VzLCBvcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKSk7CiAKICNpZiBF
TkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRJ
c0FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKHByZWZlcmVuY2VzLCBhY2Nlc3NpYmls
aXR5SXNvbGF0ZWRUcmVlTW9kZSgpKTsKQEAgLTEwMDYsMTEgKzEwMDQsMTIgQEAgYm9vbCBUZXN0
Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAogICAgIHNldFZhbHVlKHJlc2V0TWVzc2Fn
ZUJvZHksICJBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlIiwgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0
ZWRUcmVlTW9kZSk7CiAjZW5kaWYKIAotICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3Ro
KCkpCi0gICAgICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwgb3B0
aW9ucy5qc2NPcHRpb25zLmNfc3RyKCkpOworICAgIGF1dG8ganNjT3B0aW9ucyA9IG9wdGlvbnMu
anNjT3B0aW9ucygpOworICAgIGlmICghanNjT3B0aW9ucy5lbXB0eSgpKQorICAgICAgICBzZXRW
YWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIGpzY09wdGlvbnMuY19zdHIoKSk7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRk
aXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsKICNlbmRpZgogCiAgICAgV0tQYWdlUG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIHRvV0soIlJlc2V0IikuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0
KCkpOwpAQCAtMTExOCw3ICsxMTE3LDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdAogCiAgICAgc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChmYWxzZSk7CiAg
ICAgCi0gICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5pZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWl0cyk7CisgICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0
aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpKTsKIAogICAgIG1fb3BlblBhbmVsRmls
ZVVSTHMgPSBudWxscHRyOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzE4LDcgKzEz
MTcsNyBAQCBzdGF0aWMgc3RkOjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYgdXJsCiAgICAgcmV0
dXJuIHN0ZDo6c3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXS1VSTFJlZiBjcmVhdGVUZXN0VVJMKGNv
bnN0IGNoYXIqIHBhdGhPclVSTCkKK1dLVVJMUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKIHsKICAgICBpZiAoc3Ryc3RyKHBhdGhPclVSTCwg
Imh0dHA6Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiaHR0cHM6Ly8iKSB8fCBzdHJzdHIocGF0
aE9yVVJMLCAiZmlsZTovLyIpKQogICAgICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENT
dHJpbmcocGF0aE9yVVJMKTsKQEAgLTEzNTYsMjIxICsxMzU1LDI1IEBAIHN0YXRpYyBXS1VSTFJl
ZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIKICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRG
OENTdHJpbmcoYnVmZmVyLmdldCgpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gInRydWUiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gImZhbHNl
IikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVj
dGVkIHZhbHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2Zh
bHNlJy4iLCB2YWx1ZS5jX3N0cigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBz
dGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0
IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAg
ICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkp
KTsKLSAgICBhdXRvIHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJM
KGJhc2VVUkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRX
SyhXS1VSTENvcHlQYXRoKHJlbGF0aXZlVVJMLmdldCgpKSkpOwotfQotCi1zdGF0aWMgc3RkOjpz
dHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0cmluZyYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGNyZWF0
ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZVRlc3RP
cHRpb25zRnJvbVRlc3RIZWFkZXIoVGVzdE9wdGlvbnMmIHRlc3RPcHRpb25zLCBjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1dGVQYXRoKQotewot
ICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwotICAgIGlmIChmaWxlbmFt
ZS5lbXB0eSgpKSB7Ci0gICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9u
cyBiZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICBmaWxlbmFt
ZSA9IHRlc3RQYXRoKGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpLmdl
dCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKLSAgICBzdGQ6Omlmc3RyZWFtIHRlc3RGaWxl
KGZpbGVuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCF0ZXN0RmlsZS5nb29kKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBnZXRsaW5lKHRlc3RGaWxlLCBvcHRpb25zKTsKLSAgICBzdGQ6OnN0cmluZyBi
ZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAgc3RkOjpzdHJpbmcgZW5k
U3RyaW5nKCIgXSIpOwotICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5kKGJl
Z2luU3RyaW5nKTsKLSAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykK
LSAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChl
bmRTdHJpbmcsIGJlZ2luTG9jYXRpb24pOwotICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0
cmluZzo6bnBvcykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0
ZXN0IGhlYWRlciBpbiAlcyIsIGZpbGVuYW1lLmNfc3RyKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxv
Y2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9u
ICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7Ci0gICAg
d2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAgICAgIHNpemVfdCBw
YWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKHBh
aXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0
cmluZy5zaXplKCk7Ci0gICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcu
ZmluZCgiPSIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6
OnN0cmluZzo6bnBvcykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9u
IGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIGZp
bGVuYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
YXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0g
cGFpclN0YXJ0KTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFs
c0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKLQotICAgICAg
ICBpZiAoIWtleS5yZmluZCgiZXhwZXJpbWVudGFsOiIpKSB7Ci0gICAgICAgICAgICBrZXkgPSBr
ZXkuc3Vic3RyKDEzKTsKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1
cmVzLmFkZChTdHJpbmcoa2V5LmNfc3RyKCkpLCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgha2V5LnJmaW5kKCJpbnRlcm5hbDoi
KSkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cig5KTsKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcy5hZGQoU3RyaW5nKGtleS5jX3N0cigpKSwgcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoa2V5ID09ICJsYW5ndWFnZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0
aW9ucy5vdmVycmlkZUxhbmd1YWdlcyA9IFN0cmluZyh2YWx1ZS5jX3N0cigpKS5zcGxpdCgnLCcp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZVRocmVhZGVkU2Nyb2xsaW5nIikKLSAgICAg
ICAgICAgIHRlc3RPcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VBY2NlbGVy
YXRlZERyYXdpbmciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3
aW5nID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LnVzZUZsZXhpYmxlVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZURhdGFEZXRlY3Rpb24iKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMudXNlRGF0YURldGVjdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlTW9ja1Njcm9sbGJhcnMi
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gIm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLm5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNl
Q2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50ID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5lbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRXBoZW1lcmFsU2Vzc2lvbiIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFi
bGVNZW51SXRlbUVsZW1lbnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTWVudUl0
ZW1FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJlbmFibGVLZXlnZW5FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZU1vZGVybk1lZGlhQ29udHJv
bHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAiZW5hYmxlUG9pbnRlckxvY2siKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
UG9pbnRlckxvY2sgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVXZWJBdXRo
ZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5l
bmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW5z
cGVjdG9yQWRkaXRpb25zIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKGtleSA9PSAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRpb25N
YW5pZmVzdCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0ID0g
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJM
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZG9tUGFzdGVBbGxv
d2VkIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmRvbVBhc3RlQWxsb3dlZCA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29u
dGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gPSBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBy
b2Nlc3NTd2FwT25XaW5kb3dPcGVuIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRP
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VTZXJ2aWNlV29y
a2VyU2hvcnRUaW1lb3V0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25z
LnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJwdW5jaE91
dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnB1
bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImpzY09wdGlvbnMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuanNjT3B0aW9ucyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzID0gdmFsdWU7Ci0gICAgICAg
IGVsc2UgaWYgKGtleSA9PSAicnVuU2luZ2x5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnJ1
blNpbmdseSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3BlbGxDaGVja2luZ0Rv
dHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3Rz
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
ZW5hYmxlU2VydmljZUNvbnRyb2xzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlZGl0YWJsZSIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lZGl0YWJsZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIikKLSAgICAg
ICAgICAgIHRlc3RPcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic2hvdWxk
UHJlc2VudFBvcG92ZXJzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFByZXNlbnRQ
b3BvdmVycyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiY29udGVudEluc2V0LnRvcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5jb250ZW50SW5zZXRUb3AgPSBzdGQ6OnN0b2QodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1l
b3V0cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiY29udGVudE1vZGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGVu
dE1vZGUgPSB7IHZhbHVlLmNfc3RyKCkgfTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyID0geyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZW5hYmxlQXBwTmFwIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJs
ZUFwcE5hcCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd3NMaW5rUHJldmlldyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxl
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJv
Y2VzcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVBy
b2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVD
YXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVS
THMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiKQotICAgICAgICAgICAgdGVzdE9w
dGlvbnMuZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3RhbmRhbG9uZVdlYkFwcGxp
Y2F0aW9uVVJMIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNh
dGlvblVSTCA9IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImlzQXBwQm91bmRXZWJWaWV3IikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmlzQXBwQm91bmRXZWJWaWV3ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQotfQotCiBUZXN0
T3B0aW9ucyBUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RDb21t
YW5kJiBjb21tYW5kKSBjb25zdAogewotICAgIFRlc3RPcHRpb25zIG9wdGlvbnMoY29tbWFuZC5w
YXRoT3JVUkwpOwotCi0gICAgb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUgPSBtX3Nob3VsZFVz
ZVJlbW90ZUxheWVyVHJlZTsKLSAgICBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gbV9zaG91
bGRTaG93V2ViVmlldzsKLQotICAgIGZvciAoYXV0byYgZmVhdHVyZSA6IG1faW50ZXJuYWxGZWF0
dXJlcykKLSAgICAgICAgb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKGZlYXR1cmUu
a2V5LCBmZWF0dXJlLnZhbHVlKTsKLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2V4cGVyaW1l
bnRhbEZlYXR1cmVzKQotICAgICAgICBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmFkZChm
ZWF0dXJlLmtleSwgZmVhdHVyZS52YWx1ZSk7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzID0g
bV9nbG9iYWxGZWF0dXJlczsKKyAgICBtZXJnZShmZWF0dXJlcywgaGFyZGNvZGVkRmVhdHVyZXNC
YXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9y
bVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVh
dHVyZXMsIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kKSk7Cisg
ICAgbWVyZ2UoZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVs
dHNGb3JUZXN0KGNvbW1hbmQpKTsKIAotICAgIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0
aW9uc0ZvclRlc3Qob3B0aW9ucywgY29tbWFuZC5wYXRoT3JVUkwpOwotICAgIHVwZGF0ZVRlc3RP
cHRpb25zRnJvbVRlc3RIZWFkZXIob3B0aW9ucywgY29tbWFuZC5wYXRoT3JVUkwsIGNvbW1hbmQu
YWJzb2x1dGVQYXRoKTsKLSAgICBwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKG9wdGlvbnMpOwotCi0g
ICAgcmV0dXJuIG9wdGlvbnM7CisgICAgcmV0dXJuIFRlc3RPcHRpb25zIHsgZmVhdHVyZXMgfTsK
IH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KGNvbnN0
IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewotICAgIHVuc2lnbmVkIHdpZHRoID0gdmlld1dpZHRo
OwotICAgIHVuc2lnbmVkIGhlaWdodCA9IHZpZXdIZWlnaHQ7Ci0gICAgaWYgKHRlc3Qub3B0aW9u
cygpLmlzU1ZHVGVzdCkgewotICAgICAgICB3aWR0aCA9IHczY1NWR1ZpZXdXaWR0aDsKLSAgICAg
ICAgaGVpZ2h0ID0gdzNjU1ZHVmlld0hlaWdodDsKLSAgICB9Ci0KLSAgICBtYWluV2ViVmlldygp
LT5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKKyAgICBtYWluV2ViVmlldygpLT5yZXNpemVUbyh0
ZXN0Lm9wdGlvbnMoKS52aWV3V2lkdGgoKSwgdGVzdC5vcHRpb25zKCkudmlld0hlaWdodCgpKTsK
IH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KFBsYXRm
b3JtV2ViVmlldyogdmlldywgY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7Ci0gICAgdmll
dy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMoKS5kZXZpY2VTY2FsZUZh
Y3Rvcik7CisgICAgdmlldy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmln
dXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCkBAIC0xNzY2LDYgKzE1
NjksMTIgQEAgc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IAogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKICAgICB9CisgICAgCisgICAgaWYg
KHJlc3VsdC5hYnNvbHV0ZVBhdGguZW1wdHkoKSkgeworICAgICAgICAvLyBHcm9zcy4gTmVlZCB0
byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJM
cy4KKyAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKGFkb3B0V0soVGVzdENv
bnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwocmVzdWx0LnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkp
OworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE3ODgsNyArMTU5Nyw3IEBA
IGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhcioKICAgICBpZiAoY29tbWFu
ZC50aW1lb3V0ID4gMF9zKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRDdXN0b21U
aW1lb3V0KGNvbW1hbmQudGltZW91dCk7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRE
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIg
fHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIG1fY3VycmVudEludm9j
YXRpb24tPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpKTsKIAogICAg
IHBsYXRmb3JtV2lsbFJ1blRlc3QoKm1fY3VycmVudEludm9jYXRpb24pOwogCkBAIC0zMDAzLDcg
KzI4MTIsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0CiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQorICAgIGlmICghb3B0aW9u
cy51c2VFcGhlbWVyYWxTZXNzaW9uKCkpCiAgICAgICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRX
ZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24sIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkp
OwogCiAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tQYWdlQ29uZmlndXJhdGlvbkdldFdlYnNp
dGVEYXRhU3RvcmUoY29uZmlndXJhdGlvbik7CkBAIC0zODE4LDcgKzM2MjcsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpyZWluaXRpYWxpemVBcHBCb3VuCiAgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0
b3JlKCkpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVy
SW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2b2lkIFRl
c3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25z
dCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2
YWN5Q2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAgIFdLV2Vic2l0ZURhdGFTdG9y
ZVVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3
ZWJzaXRlRGF0YVN0b3JlKCksIHRvV0soYnVuZGxlSWRlbnRpZmllcikuZ2V0KCksICZjb250ZXh0
LCBpbkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNrKTsKQEAgLTM4MzMsOCArMzY0
Miw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyQnVuZGxlSWRlbnRpZmkKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9w
dGlvbnMoVGVzdE9wdGlvbnMmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6aW5qZWN0VXNlclNjcmlwdChXS1N0cmluZ1JlZikKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHNldD4KICNp
bmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0
b3I+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KQEAgLTUwLDEyICs1MSwxMiBAQCBPQkpDX0NMQVNTIFdLV2ViVmlld0NvbmZpZ3VyYXRpb247
CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNzIEV2ZW50
U2VuZGVyUHJveHk7CiBjbGFzcyBPcmlnaW5TZXR0aW5nczsKIGNsYXNzIFBsYXRmb3JtV2ViVmll
dzsKLWNsYXNzIEV2ZW50U2VuZGVyUHJveHk7CitjbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNz
IFRlc3RPcHRpb25zOwogc3RydWN0IFRlc3RDb21tYW5kOwotc3RydWN0IFRlc3RPcHRpb25zOwog
CiBjbGFzcyBBc3luY1Rhc2sgewogcHVibGljOgpAQCAtOTEsMTEgKzkyLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVUZW1wb3JhcnlEaXJlY3Rv
cmllcyhXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uUmVmKTsKICAgICBzdGF0aWMgV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdmlld1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2
aWV3SGVpZ2h0OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHczY1NWR1ZpZXdXaWR0aDsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdzNjU1ZHVmlld0hlaWdodDsKKyAgICBzdGF0aWMg
V0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpOwogCiAgICAgc3Rh
dGljIGNvbnN0IFdURjo6U2Vjb25kcyBkZWZhdWx0U2hvcnRUaW1lb3V0OwogICAgIHN0YXRpYyBj
b25zdCBXVEY6OlNlY29uZHMgbm9UaW1lb3V0OwpAQCAtMTE1LDIwICsxMTIsMTUgQEAgcHVibGlj
OgogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3JlKCk7CiAKICAgICBF
dmVudFNlbmRlclByb3h5KiBldmVudFNlbmRlclByb3h5KCkgeyByZXR1cm4gbV9ldmVudFNlbmRl
clByb3h5LmdldCgpOyB9Ci0KLSAgICBib29sIHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOyB9CiAgICAgCiAgICAgLy8g
UnVucyB0aGUgcnVuIGxvb3AgdW50aWwgYGRvbmVgIGlzIHRydWUgb3IgdGhlIHRpbWVvdXQgZWxh
cHNlcy4KICAgICBib29sIHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgeyByZXR1cm4gbV91
c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcjsgfQogICAgIHZvaWQgcnVuVW50aWwoYm9vbCYgZG9u
ZSwgV1RGOjpTZWNvbmRzIHRpbWVvdXQpOwogICAgIHZvaWQgbm90aWZ5RG9uZSgpOwogCi0gICAg
Ym9vbCBzaG91bGRTaG93V2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd1dlYlZp
ZXc7IH0KICAgICBib29sIHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdT
ZXJ2ZXJNb2RlOyB9CiAgICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYpOwotICAgIAotICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFNob3dUb3VjaGVzOyB9Ci0gICAgCisKICAgICBib29sIGJlZm9yZVVubG9h
ZFJldHVyblZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZTsg
fQogICAgIHZvaWQgc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkgeyBtX2Jl
Zm9yZVVubG9hZFJldHVyblZhbHVlID0gdmFsdWU7IH0KIApAQCAtMjc1LDcgKzI2Nyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyTG9hZGVkU3VicmVzb3VyY2VEb21haW5zKCk7CiAgICAgdm9p
ZCBjbGVhckFwcEJvdW5kU2Vzc2lvbigpOwogICAgIHZvaWQgcmVpbml0aWFsaXplQXBwQm91bmRE
b21haW5zKCk7Ci0gICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vz
cyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOworICAgIHZvaWQgdXBkYXRlQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcygp
OwogCiAgICAgV0tBcnJheVJlZiBvcGVuUGFuZWxGaWxlVVJMcygpIGNvbnN0IHsgcmV0dXJuIG1f
b3BlblBhbmVsRmlsZVVSTHMuZ2V0KCk7IH0KQEAgLTM2Miw3ICszNTQsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gZ2VuZXJh
dGVQYWdlQ29uZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9ucyYpOwotICAgIFdLUmV0YWluUHRy
PFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24o
Y29uc3QgVGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zJikgY29uc3Q7CisgICAgV0tSZXRhaW5Q
dHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
bihjb25zdCBDb250ZXh0T3B0aW9ucyYpIGNvbnN0OwogICAgIHZvaWQgaW5pdGlhbGl6ZShpbnQg
YXJnYywgY29uc3QgY2hhciogYXJndltdKTsKICAgICB2b2lkIGNyZWF0ZVdlYlZpZXdXaXRoT3B0
aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHZvaWQgcnVuKCk7CkBAIC0zODAsNyArMzcy
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogICAgIFdLQ29udGV4
dFJlZiBwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmLCBXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKTsKLSAgICB2
b2lkIHBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmKSBjb25zdDsKICAgICB2b2lk
IHBsYXRmb3JtQ3JlYXRlV2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0
T3B0aW9ucyYpOwogICAgIHN0YXRpYyBQbGF0Zm9ybVdlYlZpZXcqIHBsYXRmb3JtQ3JlYXRlT3Ro
ZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50VmlldywgV0tQYWdlQ29uZmlndXJhdGlvblJl
ZiwgY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHBsYXRmb3JtUmVzZXRQcmVmZXJlbmNl
c1RvQ29uc2lzdGVudFZhbHVlcygpOwpAQCAtMzg5LDcgKzM4MCw3IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBjb2NvYVBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogICAg
IHZvaWQgY29jb2FSZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25z
Jik7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qgc3RkOjpz
dHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyVGVzdGlu
Z092ZXJyaWRlKCk7CiAjZW5kaWYKICAgICB2b2lkIHBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRl
c3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKQEAgLTQwMyw3ICszOTQsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBlbnN1cmVWaWV3U3VwcG9ydHNPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYpOwogICAgIFRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdChUZXN0T3B0aW9ucyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpIGNv
bnN0OworICAgIFRlc3RGZWF0dXJlcyBnbG9iYWxGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVzdEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNG
ZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVz
dEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXdTaXpl
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlV2luZG93U2Nh
bGVGb3JUZXN0KFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CkBAIC01
MzgsOCArNTMxLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NyZWF0ZWRPdGhlclBhZ2UgeyBm
YWxzZSB9OwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3BhdGhzOwogICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtX2FsbG93ZWRIb3N0czsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9v
bD4gbV9pbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBtX2V4cGVy
aW1lbnRhbEZlYXR1cmVzOworICAgIFRlc3RGZWF0dXJlcyBtX2dsb2JhbEZlYXR1cmVzOworCisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2ludGVybmFsRmVhdHVy
ZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2V4cGVyaW1l
bnRhbEZlYXR1cmVzOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1faW5qZWN0ZWRC
dW5kbGVQYXRoOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX3Rlc3RQbHVnaW5EaXJl
Y3Rvcnk7CkBAIC01NDgsNyArNTQzLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybVdlYlZpZXc+IG1fbWFpbldlYlZpZXc7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250
ZXh0UmVmPiBtX2NvbnRleHQ7Ci0gICAgT3B0aW9uYWw8VGVzdE9wdGlvbnM6OkNvbnRleHRPcHRp
b25zPiBtX2NvbnRleHRPcHRpb25zOworICAgIE9wdGlvbmFsPENvbnRleHRPcHRpb25zPiBtX2Nv
bnRleHRPcHRpb25zOwogICAgIFdLUmV0YWluUHRyPFdLUGFnZUdyb3VwUmVmPiBtX3BhZ2VHcm91
cDsKICAgICBXS1JldGFpblB0cjxXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZj4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXI7CiAKQEAgLTYwNSwxNCArNjAwLDEwIEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1fZm9yY2VDb21wbGV4VGV4dCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZFVzZUFj
Y2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFVzZVJlbW90ZUxh
eWVyVHJlZSB7IGZhbHNlIH07Ci0KKyAgICAKICAgICBib29sIG1fc2hvdWxkTG9nQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3Vs
ZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9nSGlz
dG9yeUNsaWVudENhbGxiYWNrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFNob3dXZWJW
aWV3IHsgZmFsc2UgfTsKLSAgICAKLSAgICBib29sIG1fc2hvdWxkU2hvd1RvdWNoZXMgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9jaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwogCiAgICAgYm9v
bCBtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyB7IGZhbHNlIH07Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24g
MjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNo
b3VsZExvZ0hpc3RvcnlDbGkKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRl
c3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKICAgICBhdXRv
IGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3
cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdp
blRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxl
eGlibGVWaWV3cG9ydCgpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1
bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VC
b2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVvdXQubWlsbGlzZWNv
bmRzKCkpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKLSAgICBzZXRWYWx1
ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwg
b3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIHNl
dFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMiLCBvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsK
ICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzQgKzI2
LDI2OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25zLmgiCiAK
KyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lz
dGVtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNkZWZpbmUgRFVNUF9G
RUFUVVJFUyAwCisKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQorI2lm
IERVTVBfRkVBVFVSRVMKK3N0YXRpYyB2b2lkIGR1bXBGZWF0dXJlcyhjb25zdCBUZXN0RmVhdHVy
ZXMmIGZlYXR1cmVzKQogewotICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5jX3N0cigpKTsKLSAg
ICByZXR1cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWluc2Vuc2l0aXZlLgor
ICAgIGlmIChmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVz
LmludGVybmFsRGVidWdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5l
bXB0eSgpICYmIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3Ry
aW5nRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0
eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBbRU1QVFldXG4iOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmICghZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMu
ZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgRXhwZXJpbWVudGFsIEZlYXR1cmVz
OiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5leHBlcmlt
ZW50YWxGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8
ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgSW50ZXJu
YWwgRmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1
cmVzLmludGVybmFsRGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAg
ICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0
dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgQm9v
bCBGZWF0dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVy
ZXMuYm9vbEZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkg
PDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIERvdWJsZSBGZWF0
dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZG91
YmxlRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAi
OiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nRmVh
dHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIEZlYXR1cmVz
OiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdG
ZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIg
PDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdWZWN0b3JG
ZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgVmVjdG9y
IEZlYXR1cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJl
cy5zdHJpbmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIg
PDwga2V5IDw8ICI6IE51bWJlciBvZiBzdHJpbmdzICIgPDwgdmFsdWUuc2l6ZSgpIDw8ICdcbic7
CisgICAgfQogfQorI2VuZGlmCiAKLXN0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhp
YmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJl
cyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpCiB7Ci0gICAgcmV0dXJuIHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
InZpc3VhbC12aWV3cG9ydC8iKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHN0ZDo6
dW5vcmRlcmVkX21hcDo6bWVyZ2Ugd2hlbiBpdCBpcyBhdmFpbGFibGUgZm9yIGFsbCBwb3J0cy4K
KworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZl
YXR1cmVzKQorICAgICAgICBiYXNlLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3Np
Z24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwu
aW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQorICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJl
cy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1
ZV0gOiBhZGRpdGlvbmFsLmJvb2xGZWF0dXJlcykKKyAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMu
aW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVd
IDogYWRkaXRpb25hbC5kb3VibGVGZWF0dXJlcykKKyAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJl
cy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1
ZV0gOiBhZGRpdGlvbmFsLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1
cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZh
bHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3Ry
aW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKK30KKworZW51
bSBjbGFzcyBLZXlUeXBlIDogdWludDhfdCB7CisgICAgQm9vbCwKKyAgICBEb3VibGUsCisgICAg
U3RyaW5nLAorICAgIFN0cmluZ1JlbGF0aXZlUGF0aCwKKyAgICBTdHJpbmdVUkwsCisgICAgU3Ry
aW5nVmVjdG9yLAorICAgIFVua25vd24KK307CisKK3N0YXRpYyBLZXlUeXBlIGtleVR5cGUoc3Rk
OjpzdHJpbmcga2V5KQoreworICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIEtleVR5cGU+IGtleVR5cGVNYXAgeworICAgICAgICB7ICJ1c2VUaHJlYWRlZFNjcm9sbGlu
ZyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFNob3dXZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJ1c2VEYXRhRGV0ZWN0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1
c2VNb2NrU2Nyb2xsYmFycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3
cG9ydFNjYWxlTGltaXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0
ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5h
YmxlQXR0YWNobWVudEVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJs
ZUludGVyc2VjdGlvbk9ic2VydmVyIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VF
cGhlbWVyYWxTZXNzaW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNZW51
SXRlbUVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUtleWdlbkVs
ZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVBvaW50ZXJMb2NrIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1
dGhlbnRpY2F0b3IiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNo
ZXMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRv
bVBhc3RlQWxsb3dlZCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JG
aWx0ZXIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3Jv
dW5kc0luRGFya01vZGUiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInNwZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVkaXRhYmxlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRI
YW5kbGVSdW5PcGVuUGFuZWwiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFBy
ZXNlbnRQb3BvdmVycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFw
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nl
c3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BV
UHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9u
VG9EYXRhVVJMcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93
c2VyUHJpdmFjeSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZp
ZXciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2Fn
aW5nVGltZW91dHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2Vy
dmljZVdvcmtlclNob3J0VGltZW91dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAg
eyAiY29udGVudEluc2V0LnRvcCIsIEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZp
Y2VTY2FsZUZhY3RvciIsIEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJ2aWV3V2lkdGgi
LCBLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAidmlld0hlaWdodCIsIEtleVR5cGU6OkRv
dWJsZSB9LAorCisgICAgICAgIHsgImpzY09wdGlvbnMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAg
ICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBLZXlUeXBlOjpTdHJpbmcg
fSwKKyAgICAgICAgeyAiY29udGVudE1vZGUiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAg
eyAiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAg
ICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3QiLCBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGgg
fSwKKyAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgS2V5VHlwZTo6U3Ry
aW5nVVJMIH0sCisKKyAgICAgICAgeyAibGFuZ3VhZ2UiLCBLZXlUeXBlOjpTdHJpbmdWZWN0b3Ig
fSwKKyAgICB9OworICAgIAorICAgIGF1dG8gaXQgPSBrZXlUeXBlTWFwLmZpbmQoa2V5KTsKKyAg
ICBpZiAoaXQgPT0ga2V5VHlwZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEtleVR5cGU6OlVu
a25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFVz
ZUZpeGVkTGF5b3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgYm9vbCBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogewot
I2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgaWYgKHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJkZXZpY2UtYWRhcHQvIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImRl
dmljZS1hZGFwdFxcIikpCisgICAgaWYgKHZhbHVlID09ICJ0cnVlIikKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0jZW5kaWYKKyAgICBpZiAodmFsdWUgPT0gImZhbHNlIikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVlICclcycgZm9y
IGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2YWx1ZS5jX3N0
cigpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGlzU1ZHVGVzdFBhdGgo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0
cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1
ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICBhdXRvIGJhc2VVUkwgPSBh
ZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7
CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChi
YXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgcmV0dXJuIHRvU1REKGFkb3B0V0so
V0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKK30KKworc3RhdGljIHN0ZDo6c3Ry
aW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZh
bHVlKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnL1czQy1TVkct
MS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzNDLVNWRy0xLjEiKTsKKyAg
ICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoVGVzdENvbnRyb2xsZXI6OmNy
ZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7Cit9CisKK3N0YXRpYyBUZXN0RmVhdHVyZXMg
cGFyc2VUZXN0SGVhZGVyKHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKQoreworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBpZiAo
IXN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3RzKHBhdGgpKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7
CisKKyAgICBzdGQ6Omlmc3RyZWFtIGZpbGUocGF0aCk7CisgICAgaWYgKCFmaWxlLmdvb2QoKSkg
eworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBvcGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0
IGhlYWRlcnMgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7
CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgb3B0aW9uczsKKyAgICBnZXRsaW5lKGZpbGUsIG9w
dGlvbnMpOworICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIg
WyAiKTsKKyAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7CisgICAgc2l6ZV90IGJlZ2lu
TG9jYXRpb24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOworICAgIGlmIChiZWdpbkxvY2F0
aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAg
c2l6ZV90IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlv
bik7CisgICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgcGF0
aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIH0KKyAgICBzdGQ6OnN0
cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3Ry
aW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNp
emUoKSkpOworICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOworICAgIHdoaWxlIChwYWlyU3RhcnQg
PCBwYWlyU3RyaW5nLnNpemUoKSkgeworICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJp
bmcuZmluZCgiICIsIHBhaXJTdGFydCk7CisgICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3Ry
aW5nOjpucG9zKQorICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOworICAg
ICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3Rh
cnQpOworICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAo
Y291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBrZXkgPSBwYWlyU3RyaW5n
LnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0gcGFpclN0YXJ0KTsKKyAgICAgICAg
YXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFsc0xvY2F0aW9uICsgMSwgcGFpckVu
ZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKKworICAgICAgICBpZiAoa2V5LnJmaW5kKCJleHBl
cmltZW50YWw6IikgPT0gMCkgeworICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7Cisg
ICAgICAgICAgICBmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0gZWxzZSBpZiAo
a2V5LnJmaW5kKCJpbnRlcm5hbDoiKSA9PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vi
c3RyKDkpOworICAgICAgICAgICAgZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2Vy
dCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAoa2V5VHlwZShrZXkpKSB7CisgICAgICAgIGNhc2UgS2V5VHlw
ZTo6Qm9vbDoKKyAgICAgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyBrZXks
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpEb3VibGU6CisgICAgICAgICAgICBmZWF0dXJlcy5k
b3VibGVGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHN0ZDo6c3RvZCh2YWx1ZSkgfSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICBm
ZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHZhbHVlIH0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgorICAg
ICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpIH0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVVJMOgorICAgICAg
ICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rl
c3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEtleVR5cGU6OlN0cmluZ1ZlY3RvcjoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzLmluc2VydCh7IGtleSwgc3BsaXQodmFsdWUsICcsJykgfSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpVbmtub3duOgorICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmtub3duIGtleSwgJyVzLCBpbiB0ZXN0IGhlYWRlciBpbiAlcyIsIGtl
eS5jX3N0cigpLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBwYWlyU3RhcnQgPSBwYWlyRW5kICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBib29sIHBhdGhDb250YWlucyhjb25zdCBzdGQ6OnN0cmlu
ZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFyKiBzdWJzdHJpbmcpCit7CisgICAgU3RyaW5nIHBhdGgo
cGF0aE9yVVJMLmNfc3RyKCkpOworICAgIHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7
IC8vIENhc2UtaW5zZW5zaXRpdmUuCit9CisKK3N0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9y
dEZsZXhpYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBh
dGhDb250YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInZpc3VhbC12aWV3cG9ydC8iKTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkVXNlRXBo
ZW1lcmFsU2Vzc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQpAQCAtNjEsMTMgKzI5
NiwyMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvCiAgICAgcmV0
dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3Np
bmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1i
cm93c2luZyIpOwogfQogCi1zdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRv
dWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0Mt
U1ZHLTEuMSIpKQorICAgICAgICByZXR1cm4geyB7IDQ4MCwgMzYwIH0gfTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmlj
ZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewogICAg
IGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQogICAgICAgICByZXR1
cm4gMzsKICAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0iKSkKICAgICAg
ICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAogc3RhdGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6
c3RyaW5nJiBwYXRoT3JVUkwpCkBAIC04MywxNCArMzI1LDM4IEBAIHN0YXRpYyBib29sIHNob3Vs
ZER1bXBKU0NvbnNvbGVMb2dJblN0ZEUKICAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo4ODAwL3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAibG9jYWxob3N0Ojk0NDMvd2Vic29ja2V0cyIpOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9w
dGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLSAgICA6IHVzZUZsZXhpYmxlVmll
d3BvcnQoc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUocGF0aE9yVVJMKSkKLSAgICAsIHVzZUZp
eGVkTGF5b3V0KHNob3VsZFVzZUZpeGVkTGF5b3V0KHBhdGhPclVSTCkpCi0gICAgLCBpc1NWR1Rl
c3QoaXNTVkdUZXN0UGF0aChwYXRoT3JVUkwpKQotICAgICwgdXNlRXBoZW1lcmFsU2Vzc2lvbihz
aG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKHBhdGhPclVSTCkpCi0gICAgLCBkdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnIoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKHBhdGhPclVSTCkpCi0g
ICAgLCBkZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QocGF0aE9yVVJM
KSkKK1Rlc3RGZWF0dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25z
dCBUZXN0Q29tbWFuZCYgY29tbWFuZCkKIHsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisK
KyAgICBpZiAoc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQor
ICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3Bv
cnQiLCB0cnVlIH0pOworICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQu
cGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VF
cGhlbWVyYWxTZXNzaW9uIiwgdHJ1ZSB9KTsKKyAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1
cmVzLmluc2VydCh7ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOworICAgIGlm
IChhdXRvIGRldmljZVNjYWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRl
c3QoY29tbWFuZC5wYXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQp
CisgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZh
Y3RvciIsIGRldmljZVNjYWxlRmFjdG9yLnZhbHVlKCkgfSk7CisgICAgaWYgKGF1dG8gdmlld1dp
ZHRoQW5kSGVpZ2h0ID0gb3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbW1hbmQu
cGF0aE9yVVJMKTsgdmlld1dpZHRoQW5kSGVpZ2h0ICE9IFdURjo6bnVsbG9wdCkgeworICAgICAg
ICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAidmlld1dpZHRoIiwgdmlld1dpZHRo
QW5kSGVpZ2h0LT5maXJzdCB9KTsKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5z
ZXJ0KHsgInZpZXdIZWlnaHQiLCB2aWV3V2lkdGhBbmRIZWlnaHQtPnNlY29uZCB9KTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVs
dHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7Cisg
ICAgcmV0dXJuIHBhcnNlVGVzdEhlYWRlcihjb21tYW5kLmFic29sdXRlUGF0aCwgY29tbWFuZC5w
YXRoT3JVUkwpOworfQorCitUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZl
YXR1cmVzKQorICAgIDogbV9mZWF0dXJlcyB7IGZlYXR1cmVzIH0KK3sKKyNpZiBEVU1QX0ZFQVRV
UkVTCisgICAgc3RkOjpjZXJyIDw8ICJEVU1QSU5HIEZFQVRVUkVTXG4iOworICAgIGR1bXBGZWF0
dXJlcyhtX2ZlYXR1cmVzKTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0T3B0aW9ucy5oCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RPcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE2NSArMjUsMTc2IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHN0cmlu
Zz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNw
YWNlIFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgc3RydWN0IENvbnRleHRPcHRp
b25zIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7Ci0gICAgICAg
IGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyB7IGZhbHNlIH07Ci0gICAg
ICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24geyB0cnVlIH07Ci0gICAgICAg
IGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4geyBmYWxzZSB9OwotICAgICAgICBi
b29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQgeyBmYWxzZSB9OwotCi0gICAgICAgIGJv
b2wgaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb25zdCBDb250ZXh0T3B0aW9ucyYgb3B0
aW9ucykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlnbm9yZVN5bmNocm9ub3Vz
TWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1Rp
bWVvdXRzCi0gICAgICAgICAgICAgICAgfHwgb3ZlcnJpZGVMYW5ndWFnZXMgIT0gb3B0aW9ucy5v
dmVycmlkZUxhbmd1YWdlcwotICAgICAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24KLSAgICAg
ICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBvcHRpb25zLmVu
YWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCi0gICAgICAgICAgICAgICAgfHwgdXNlU2Vydmlj
ZVdvcmtlclNob3J0VGltZW91dCAhPSBvcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVv
dXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIGJvb2wgdXNlVGhyZWFkZWRTY3JvbGxpbmcgeyBmYWxz
ZSB9OwotICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5nIHsgZmFsc2UgfTsKLSAgICBib29s
IHVzZVJlbW90ZUxheWVyVHJlZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBzaG91bGRTaG93V2ViVmll
dyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VGbGV4aWJsZVZpZXdwb3J0IHsgZmFsc2UgfTsKLSAg
ICBib29sIHVzZUZpeGVkTGF5b3V0IHsgZmFsc2UgfTsKLSAgICBib29sIGlzU1ZHVGVzdCB7IGZh
bHNlIH07Ci0gICAgYm9vbCB1c2VEYXRhRGV0ZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIHVz
ZU1vY2tTY3JvbGxiYXJzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MgeyBmYWxzZSB9OwotICAgIGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgeyBmYWxz
ZSB9OwotICAgIGJvb2wgdXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgeyBmYWxzZSB9
OwotICAgIGJvb2wgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNlRXBoZW1l
cmFsU2Vzc2lvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlS2V5Z2VuRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlUG9p
bnRlckxvY2sgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb24geyB0
cnVlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRv
ciB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7IGZhbHNlIH07
Ci0gICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZG9tUGFz
dGVBbGxvd2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlQ29sb3JGaWx0ZXIgeyBmYWxzZSB9
OwotICAgIGJvb2wgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBydW5TaW5nbHkgeyBmYWxzZSB9OwotICAgIGJvb2wgY2hlY2tGb3JXb3JsZExl
YWtzIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgeyBmYWxzZSB9OwotICAg
IGJvb2wgZW5hYmxlU2VydmljZUNvbnRyb2xzIHsgZmFsc2UgfTsKLSAgICBib29sIGVkaXRhYmxl
IHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCB7IHRydWUgfTsK
LSAgICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVycyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJs
ZUFwcE5hcCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFs
c2UgfTsKLSAgICBib29sIGFsbG93c0xpbmtQcmV2aWV3IHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5h
YmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2Fw
dHVyZVZpZGVvSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVB
dWRpb0luVUlQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0lu
R1BVUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBpc0FwcEJvdW5kV2ViVmlldyB7IGZhbHNlIH07Ci0KLSAgICBkb3VibGUg
Y29udGVudEluc2V0VG9wIHsgMCB9OwotCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgeyAx
IH07Ci0gICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVzdDsKLSAgICBzdGQ6OnN0cmlu
ZyBqc2NPcHRpb25zOwotICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzOwotICAgIHN0ZDo6c3RyaW5nIHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTDsKLSAgICBI
YXNoTWFwPFN0cmluZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVyZXM7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIGJvb2w+IGludGVybmFsRGVidWdGZWF0dXJlczsKLSAgICBTdHJpbmcgY29udGVudE1v
ZGU7Ci0gICAgU3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKLSAgICAKLSAgICBD
b250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9uczsKLQotICAgIFRlc3RPcHRpb25zKGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpOwotCi0gICAgLy8gQWRkIGhlcmUgb3B0aW9ucyB0aGF0IGNh
biBvbmx5IGJlIHNldCB1cG9uIFBsYXRmb3JtV2ViVmlldwotICAgIC8vIGluaXRpYWxpemF0aW9u
IGFuZCBtYWtlIHN1cmUgaXQncyB1cCB0byBkYXRlIHdoZW4gYWRkaW5nIG5ldwotICAgIC8vIG9w
dGlvbnMgdG8gdGhpcyBzdHJ1Y3QuIE90aGVyd2lzZSwgdGVzdHMgdXNpbmcgdGhvc2Ugb3B0aW9u
cwotICAgIC8vIG1pZ2h0IGZhaWwgaWYgV1RSIGlzIHJldXNpbmcgYW4gZXhpc3RpbmcgUGxhdGZv
cm1XZWJWaWV3LgotICAgIGJvb2wgaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb25zdCBU
ZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK3N0cnVjdCBUZXN0Q29tbWFuZDsKKworc3RydWN0
IFRlc3RGZWF0dXJlcyB7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29s
PiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIGJvb2w+IGludGVybmFsRGVidWdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIGJvb2w+IGJvb2xGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIGRvdWJsZT4gZG91YmxlRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gc3RyaW5nRmVhdHVyZXM7CisgICAgc3RkOjp1
bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IHN0cmlu
Z1ZlY3RvckZlYXR1cmVzOworfTsKKwordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRl
c3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKKworVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVz
QmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CitUZXN0RmVhdHVyZXMgZmVh
dHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CisK
K3N0cnVjdCBDb250ZXh0T3B0aW9ucyB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG92
ZXJyaWRlTGFuZ3VhZ2VzOworICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1l
b3V0czsKKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uOworICAgIGJvb2wg
ZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47CisgICAgYm9vbCB1c2VTZXJ2aWNlV29ya2Vy
U2hvcnRUaW1lb3V0OworCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNv
bnN0IENvbnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKHVz
ZVRocmVhZGVkU2Nyb2xsaW5nICE9IG9wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcKLSAgICAg
ICAgICAgIHx8IHVzZUFjY2VsZXJhdGVkRHJhd2luZyAhPSBvcHRpb25zLnVzZUFjY2VsZXJhdGVk
RHJhd2luZwotICAgICAgICAgICAgfHwgdXNlTW9ja1Njcm9sbGJhcnMgIT0gb3B0aW9ucy51c2VN
b2NrU2Nyb2xsYmFycwotICAgICAgICAgICAgfHwgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgIT0g
b3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcwotICAgICAgICAgICAgfHwgdXNlQ2hhcmFj
dGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0gb3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25H
cmFudWxhcml0eQotICAgICAgICAgICAgfHwgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgIT0gb3B0
aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudAotICAgICAgICAgICAgfHwgZW5hYmxlSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIgIT0gb3B0aW9ucy5lbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlcgotICAg
ICAgICAgICAgfHwgdXNlRXBoZW1lcmFsU2Vzc2lvbiAhPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNl
c3Npb24KLSAgICAgICAgICAgIHx8IGVuYWJsZU1lbnVJdGVtRWxlbWVudCAhPSBvcHRpb25zLmVu
YWJsZU1lbnVJdGVtRWxlbWVudAotICAgICAgICAgICAgfHwgZW5hYmxlS2V5Z2VuRWxlbWVudCAh
PSBvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQKLSAgICAgICAgICAgIHx8IGVuYWJsZU1vZGVy
bk1lZGlhQ29udHJvbHMgIT0gb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzCi0gICAg
ICAgICAgICB8fCBlbmFibGVQb2ludGVyTG9jayAhPSBvcHRpb25zLmVuYWJsZVBvaW50ZXJMb2Nr
Ci0gICAgICAgICAgICB8fCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbiAhPSBvcHRpb25zLmVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uCi0gICAgICAgICAgICB8fCBlbmFibGVXZWJBdXRoZW50aWNhdGlv
bkxvY2FsQXV0aGVudGljYXRvciAhPSBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9j
YWxBdXRoZW50aWNhdG9yCi0gICAgICAgICAgICB8fCBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMg
IT0gb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMKLSAgICAgICAgICAgIHx8IGR1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciAhPSBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycgot
ICAgICAgICAgICAgfHwgYXBwbGljYXRpb25NYW5pZmVzdCAhPSBvcHRpb25zLmFwcGxpY2F0aW9u
TWFuaWZlc3QKLSAgICAgICAgICAgIHx8IGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fz
a0ZvckNyZWRlbnRpYWxzICE9IG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1Rv
QXNrRm9yQ3JlZGVudGlhbHMKLSAgICAgICAgICAgIHx8IGRvbVBhc3RlQWxsb3dlZCAhPSBvcHRp
b25zLmRvbVBhc3RlQWxsb3dlZAotICAgICAgICAgICAgfHwgZW5hYmxlQ29sb3JGaWx0ZXIgIT0g
b3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcgotICAgICAgICAgICAgfHwgcHVuY2hPdXRXaGl0ZUJh
Y2tncm91bmRzSW5EYXJrTW9kZSAhPSBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0lu
RGFya01vZGUKLSAgICAgICAgICAgIHx8IGpzY09wdGlvbnMgIT0gb3B0aW9ucy5qc2NPcHRpb25z
Ci0gICAgICAgICAgICB8fCBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyAhPSBvcHRpb25z
LmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzCi0gICAgICAgICAgICB8fCBydW5TaW5nbHkg
IT0gb3B0aW9ucy5ydW5TaW5nbHkKLSAgICAgICAgICAgIHx8IGNoZWNrRm9yV29ybGRMZWFrcyAh
PSBvcHRpb25zLmNoZWNrRm9yV29ybGRMZWFrcwotICAgICAgICAgICAgfHwgc2hvdWxkU2hvd1Nw
ZWxsQ2hlY2tpbmdEb3RzICE9IG9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzCi0g
ICAgICAgICAgICB8fCBlbmFibGVTZXJ2aWNlQ29udHJvbHMgIT0gb3B0aW9ucy5lbmFibGVTZXJ2
aWNlQ29udHJvbHMKLSAgICAgICAgICAgIHx8IHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCAhPSBv
cHRpb25zLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydAotICAgICAgICAgICAgfHwgZWRpdGFibGUg
IT0gb3B0aW9ucy5lZGl0YWJsZQotICAgICAgICAgICAgfHwgc2hvdWxkSGFuZGxlUnVuT3BlblBh
bmVsICE9IG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsCi0gICAgICAgICAgICB8fCBz
aG91bGRQcmVzZW50UG9wb3ZlcnMgIT0gb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMKLSAg
ICAgICAgICAgIHx8IGNvbnRlbnRJbnNldFRvcCAhPSBvcHRpb25zLmNvbnRlbnRJbnNldFRvcAot
ICAgICAgICAgICAgfHwgY29udGVudE1vZGUgIT0gb3B0aW9ucy5jb250ZW50TW9kZQotICAgICAg
ICAgICAgfHwgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyICE9IG9wdGlvbnMuYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyCi0gICAgICAgICAgICB8fCBlbmFibGVBcHBOYXAgIT0gb3B0aW9u
cy5lbmFibGVBcHBOYXAKLSAgICAgICAgICAgIHx8IGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgIT0g
b3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlCi0gICAgICAgICAgICB8fCBhbGxvd3NMaW5r
UHJldmlldyAhPSBvcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3Ci0gICAgICAgICAgICB8fCBlbmFi
bGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0lu
VUlQcm9jZXNzCi0gICAgICAgICAgICB8fCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3Mg
IT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MKLSAgICAgICAgICAgIHx8
IGVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1
ZGlvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcwotICAgICAgICAg
ICAgfHwgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyAhPSBvcHRpb25zLmFsbG93VG9wTmF2
aWdhdGlvblRvRGF0YVVSTHMKLSAgICAgICAgICAgIHx8IGVuYWJsZUluQXBwQnJvd3NlclByaXZh
Y3kgIT0gb3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5Ci0gICAgICAgICAgICB8fCBz
dGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwgIT0gb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGlj
YXRpb25VUkwKLSAgICAgICAgICAgIHx8IGlzQXBwQm91bmRXZWJWaWV3ICE9IG9wdGlvbnMuaXNB
cHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmIChpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1Rp
bWVvdXRzICE9IG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cworICAg
ICAgICAgICAgfHwgb3ZlcnJpZGVMYW5ndWFnZXMgIT0gb3B0aW9ucy5vdmVycmlkZUxhbmd1YWdl
cworICAgICAgICAgICAgfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gIT0gb3B0aW9u
cy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbgorICAgICAgICAgICAgfHwgZW5hYmxlUHJv
Y2Vzc1N3YXBPbldpbmRvd09wZW4gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbgorICAgICAgICAgICAgfHwgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCAhPSBvcHRp
b25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgICAgICBpZiAoIWNvbnRleHRP
cHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0aW9u
cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBzaG91bGRFbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47
CisgICAgfQorfTsKIAotICAgICAgICBpZiAoZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9u
cy5leHBlcmltZW50YWxGZWF0dXJlcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKK2NsYXNz
IFRlc3RPcHRpb25zIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBUZXN0T3B0aW9ucyhUZXN0RmVh
dHVyZXMpOwogCi0gICAgICAgIGlmIChpbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5p
bnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29u
dGV4dE9wdGlvbnMgY29udGV4dE9wdGlvbnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIG92ZXJyaWRlTGFuZ3VhZ2VzKCksCisgICAgICAgICAgICBpZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzKCksCisgICAgICAgICAgICBlbmFibGVQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbigpLAorICAgICAgICAgICAgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRv
d09wZW4oKSwKKyAgICAgICAgICAgIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKQorICAg
ICAgICB9OworICAgIH0KKworICAgIGJvb2wgdXNlVGhyZWFkZWRTY3JvbGxpbmcoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIGZhbHNlKTsg
fQorICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5nKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1
c2VSZW1vdGVMYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VS
ZW1vdGVMYXllclRyZWUiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dXZWJWaWV3KCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1dlYlZpZXciLCBmYWxz
ZSk7IH0KKyAgICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgZmFsc2UpOyB9CisgICAgYm9vbCB1
c2VEYXRhRGV0ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRGF0
YURldGVjdGlvbiIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlTW9ja1Njcm9sbGJhcnMoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VNb2NrU2Nyb2xsYmFycyIsIHRydWUpOyB9
CisgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoIm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIiwgZmFsc2UpOyB9CisgICAgYm9v
bCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJl
VmFsdWUoImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1
c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5IiwgZmFsc2UpOyB9Cisg
ICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgZmFsc2UpOyB9CisgICAgYm9vbCBl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VF
cGhlbWVyYWxTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRXBo
ZW1lcmFsU2Vzc2lvbiIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlTWVudUl0ZW1FbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlTWVudUl0ZW1FbGVtZW50
IiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIGZhbHNlKTsgfQorICAg
IGJvb2wgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCB0cnVlKTsgfQorICAgIGJvb2wg
ZW5hYmxlUG9pbnRlckxvY2soKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVQb2ludGVyTG9jayIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRp
b24oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVXZWJBdXRoZW50aWNh
dGlvbiIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0
aGVudGljYXRvcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVdlYkF1
dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJs
ZUluc3BlY3RvckFkZGl0aW9ucygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVu
YWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1Rv
dWNoZXMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93VG91Y2hl
cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgZmFs
c2UpOyB9CisgICAgYm9vbCBhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFscygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBk
b21QYXN0ZUFsbG93ZWQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJkb21QYXN0
ZUFsbG93ZWQiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlQ29sb3JGaWx0ZXIoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDb2xvckZpbHRlciIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUi
LCBmYWxzZSk7IH0KKyAgICBib29sIHJ1blNpbmdseSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoInJ1blNpbmdseSIsIGZhbHNlKTsgfQorICAgIGJvb2wgY2hlY2tGb3JXb3JsZExl
YWtzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiY2hlY2tGb3JXb3JsZExlYWtz
IiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBmYWxz
ZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNwZWxsQ2hlY2tpbmdEb3RzIiwgZmFsc2UpOyB9CisgICAg
Ym9vbCBlbmFibGVTZXJ2aWNlQ29udHJvbHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVkaXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZWRpdGFibGUiLCBmYWxzZSk7IH0K
KyAgICBib29sIHNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIsIHRydWUpOyB9CisgICAgYm9v
bCBzaG91bGRQcmVzZW50UG9wb3ZlcnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJzaG91bGRQcmVzZW50UG9wb3ZlcnMiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlQXBwTmFw
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQXBwTmFwIiwgZmFsc2Up
OyB9CisgICAgYm9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlKTsgfQorICAgIGJv
b2wgYWxsb3dzTGlua1ByZXZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJh
bGxvd3NMaW5rUHJldmlldyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9J
blVJUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1
cmVWaWRlb0luVUlQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlk
ZW9JbkdQVVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVD
YXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1
cmVBdWRpb0luVUlQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5h
YmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNh
cHR1cmVBdWRpb0luR1BVUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
ImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgYWxs
b3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5h
YmxlSW5BcHBCcm93c2VyUHJpdmFjeSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
ImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiLCBmYWxzZSk7IH0KKyAgICBib29sIGlzQXBwQm91
bmRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaXNBcHBCb3VuZFdl
YlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGlt
ZW91dHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVTeW5jaHJvbm91
c01lc3NhZ2luZ1RpbWVvdXRzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dh
cE9uTmF2aWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NT
d2FwT25XaW5kb3dPcGVuKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
UHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVNlcnZpY2VX
b3JrZXJTaG9ydFRpbWVvdXQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0IiwgZmFsc2UpOyB9CisgICAgZG91YmxlIGNvbnRlbnRJ
bnNldFRvcCgpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1cmVWYWx1ZSgiY29udGVudEluc2V0
LnRvcCIsIDApOyB9CisgICAgZG91YmxlIGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1
cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJkZXZpY2VTY2FsZUZhY3RvciIsIDEpOyB9CisgICAgZG91
YmxlIHZpZXdXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1cmVWYWx1ZSgidmlld1dp
ZHRoIiwgODAwKTsgfQorICAgIGRvdWJsZSB2aWV3SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gZG91
YmxlRmVhdHVyZVZhbHVlKCJ2aWV3SGVpZ2h0IiwgNjAwKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFw
cGxpY2F0aW9uTWFuaWZlc3QoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFw
cGxpY2F0aW9uTWFuaWZlc3QiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcganNjT3B0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgianNjT3B0aW9ucyIsIHsgfSk7IH0K
KyAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpIGNvbnN0IHsg
cmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMi
LCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMKCkg
Y29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJzdGFuZGFsb25lV2ViQXBwbGljYXRp
b25VUkwiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgY29udGVudE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImNvbnRlbnRNb2RlIiwgeyB9KTsgfQorICAgIHN0ZDo6
c3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIHN0cmlu
Z0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgeyB9KTsgfQorICAg
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlcygpIGNvbnN0IHsgcmV0
dXJuIHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZSgibGFuZ3VhZ2UiLCB7IH0pOyB9CiAKKyAgICBj
b25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBleHBlcmltZW50YWxG
ZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXM7
IH0KKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBpbnRl
cm5hbERlYnVnRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmludGVybmFsRGVi
dWdGZWF0dXJlczsgfQorCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNv
bnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmVh
dHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmV4cGVyaW1l
bnRhbEZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9m
ZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KG1fZmVhdHVyZXMuYm9vbEZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5ib29sRmVhdHVy
ZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmRv
dWJsZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5kb3VibGVGZWF0dXJlcykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nRmVhdHVy
ZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcyAh
PSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtl
eSwgVCBkZWZhdWx0VmFsdWUsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
VD4mIG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtYXAuZmluZChrZXkpOwor
ICAgICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisgICAgfQorCisgICAgYm9vbCBib29s
RmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2Zl
YXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgfQorICAgIGRvdWJsZSBkb3VibGVGZWF0dXJlVmFs
dWUoc3RkOjpzdHJpbmcga2V5LCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5k
b3VibGVGZWF0dXJlcyk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHN0cmluZ0ZlYXR1cmVWYWx1
ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVy
ZXMuc3RyaW5nRmVhdHVyZXMpOworICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
c3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmZWF0
dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVy
ZXMpOworICAgIH0KKworICAgIFRlc3RGZWF0dXJlcyBtX2ZlYXR1cmVzOwogfTsKIAogfQpJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJD
b2NvYS5tbQkocmV2aXNpb24gMjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMjcgKzExNCwy
OCBAQCBXS1ByZWZlcmVuY2VzUmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9yCiAgICAgcmV0dXJu
IChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKWdsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLnBy
ZWZlcmVuY2VzOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRp
b25zKFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25z
dCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworCiAg
ICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6
QCJFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiJdKQotICAgICAgICBvcHRpb25zLmNvbnRl
eHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAg
ZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiIsIHRydWUgfSk7CiAgICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiJdKQotICAg
ICAgICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVu
ID0gdHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIHRydWUgfSk7CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmIChvcHRpb25zLmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kpCi0gICAgICAg
IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJvb2w6WUVTIGZvcktl
eTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCJdOwotI2VuZGlmCisg
ICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUlu
aXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiB8fCBv
cHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkgewotICAgICAgICBh
dXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWcgPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24g
PyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdE5vblBlcnNp
c3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgICAgICBpZiAoIW9w
dGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24g
PSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsKKyAgICBhdXRvIHN0YW5kYWxvbmVXZWJB
cHBsaWNhdGlvblVSTCA9IG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMKCk7Cisg
ICAgaWYgKHVzZUVwaGVtZXJhbFNlc3Npb24gfHwgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJM
Lmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyA9IHVzZUVw
aGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBpZiAoIXVzZUVwaGVtZXJhbFNlc3Npb24pCiAgICAgICAgICAgICBjb25maWd1cmVX
ZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3JpZXMoKFdLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb25SZWYpd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyk7Ci0gICAgICAgIGlmIChvcHRp
b25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKLSAgICAgICAgICAgIFt3
ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvblVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6b3B0aW9ucy5zdGFu
ZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1dXTsKKyAgICAgICAgaWYgKHN0YW5kYWxv
bmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKKyAgICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0
b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvblVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMLmNfc3RyKCldXV07CiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IChfX2JyaWRnZSBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYpW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdp
dGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWddIGF1dG9yZWxlYXNlXTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gKF9fYnJpZGdlIFdLV2Vic2l0
ZURhdGFTdG9yZVJlZilnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3Jl
OwpAQCAtMTQ1LDMyICsxNDYsMzMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVh
dGVXZWJWaQogICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdl
YlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKKyAgICBpZiAob3B0aW9ucy51c2VEYXRh
RGV0ZWN0aW9uKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldERhdGFEZXRlY3Rv
clR5cGVzOldLRGF0YURldGVjdG9yVHlwZUFsbF07Ci0gICAgaWYgKG9wdGlvbnMuaWdub3Jlc1Zp
ZXdwb3J0U2NhbGVMaW1pdHMpCisgICAgaWYgKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVM
aW1pdHMoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0SWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHM6WUVTXTsKLSAgICBpZiAob3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25H
cmFudWxhcml0eSkKKyAgICBpZiAob3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxh
cml0eSgpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRTZWxlY3Rpb25HcmFudWxh
cml0eTpXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFjdGVyXTsKLSAgICBpZiAob3B0aW9ucy5p
c0FwcEJvdW5kV2ViVmlldykKKyAgICBpZiAob3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldygpKQog
ICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRMaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91
bmREb21haW5zOllFU107CiAjZWxzZQotICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRTZXJ2
aWNlQ29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxlU2VydmljZUNvbnRyb2xzXTsKKyAgICBb
Y29waWVkQ29uZmlndXJhdGlvbiBfc2V0U2VydmljZUNvbnRyb2xzRW5hYmxlZDpvcHRpb25zLmVu
YWJsZVNlcnZpY2VDb250cm9scygpXTsKICNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQpCisgICAgaWYgKG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1l
bnQoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50
RW5hYmxlZDpZRVNdOwogCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpCisgICAg
aWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3Vy
YXRpb24gX3NldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNdOwogCiAgICAgW2NvcGllZENvbmZpZ3Vy
YXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopd2Vic2l0ZURh
dGFTdG9yZSgpXTsKIAotICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmln
YXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc107Cisg
ICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6
b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCldOwogCiAgICAgY29uZmlndXJl
Q29udGVudE1vZGUoY29waWVkQ29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBp
ZiAob3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIGF1dG8g
bWFuaWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm9wdGlvbnMuYXBw
bGljYXRpb25NYW5pZmVzdC5jX3N0cigpXTsKKyAgICBhdXRvIGFwcGxpY2F0aW9uTWFuaWZlc3Qg
PSBvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QoKTsKKyAgICBpZiAoYXBwbGljYXRpb25NYW5p
ZmVzdC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIG1hbmlmZXN0UGF0aCA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoVVRGOFN0cmluZzphcHBsaWNhdGlvbk1hbmlmZXN0LmNfc3RyKCldOwogICAgICAg
ICBOU1N0cmluZyAqdGV4dCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6bWFu
aWZlc3RQYXRoIHVzZWRFbmNvZGluZzpudWxscHRyIGVycm9yOm51bGxwdHJdOwogICAgICAgICBb
Y29waWVkQ29uZmlndXJhdGlvbiBfc2V0QXBwbGljYXRpb25NYW5pZmVzdDpbX1dLQXBwbGljYXRp
b25NYW5pZmVzdCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJvbUpTT046dGV4dCBtYW5pZmVzdFVSTDpu
aWwgZG9jdW1lbnRVUkw6bmlsXV07CiAgICAgfQpAQCAtMTc4LDEzICsxODAsMTMgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaQogICAgIG1fbWFpbldlYlZpZXcgPSBt
YWtlVW5pcXVlPFBsYXRmb3JtV2ViVmlldz4oY29waWVkQ29uZmlndXJhdGlvbi5nZXQoKSwgb3B0
aW9ucyk7CiAgICAgZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXcobV9tYWluV2ViVmlldy5n
ZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3Vu
ZHNJbkRhcmtNb2RlKQorICAgIGlmIChvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0lu
RGFya01vZGUoKSkKICAgICAgICAgbV9tYWluV2ViVmlldy0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZh
bHNlKTsKIAotICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKQorICAgIGlmIChvcHRpb25zLmVkaXRh
YmxlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNldEVkaXRhYmxlKHRydWUpOwogCi0gICAg
bV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxsb3dzTGlua1ByZXZpZXcgPSBvcHRpb25z
LmFsbG93c0xpbmtQcmV2aWV3OworICAgIG1fbWFpbldlYlZpZXctPnBsYXRmb3JtVmlldygpLmFs
bG93c0xpbmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldygpOwogICAgIFttX21h
aW5XZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKSBfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0
ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOllFU107CiB9CiAKQEAgLTIwMyw3ICsyMDUsNyBA
QCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9yCiB2b2lkIFRlc3RDb250
cm9sbGVyOjpmaW5pc2hDcmVhdGluZ1BsYXRmb3JtV2ViVmlldyhQbGF0Zm9ybVdlYlZpZXcqIHZp
ZXcsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBpZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldykKKyAgICBpZiAob3B0aW9ucy5zaG91bGRT
aG93V2ViVmlldygpKQogICAgICAgICBbdmlldy0+cGxhdGZvcm1XaW5kb3coKSBvcmRlckZyb250
Om5pbF07CiAgICAgZWxzZQogICAgICAgICBbdmlldy0+cGxhdGZvcm1XaW5kb3coKSBvcmRlckJh
Y2s6bmlsXTsKQEAgLTI2MywxMiArMjY1LDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0
Q29udGVudEV4dGVuc2kKICAgICB9CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
c3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGJ1bmRsZUlkZW50aWZp
ZXIuaXNFbXB0eSgpKQorICAgIGlmIChidW5kbGVJZGVudGlmaWVyLmVtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBbVGVzdFJ1bm5lcldLV2ViVmlldyBfc2V0QXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1bmRsZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKV07CisgICAgW1Rlc3RSdW5uZXJXS1dlYlZpZXcgX3NldEFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0b1dURlN0cmluZyhidW5kbGVJZGVudGlmaWVyKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3ZlcnJpZGUoKQpAQCAtMjg2LDcgKzI4
OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29hUmVzZXRTdGF0ZVRvQ28KICAgICAgICAg
VGVzdFJ1bm5lcldLV2ViVmlldyAqcGxhdGZvcm1WaWV3ID0gd2ViVmlldy0+cGxhdGZvcm1WaWV3
KCk7CiAgICAgICAgIHBsYXRmb3JtVmlldy5fdmlld1NjYWxlID0gMTsKICAgICAgICAgcGxhdGZv
cm1WaWV3Ll9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGggPSAwOwotICAgICAgICBbcGxhdGZv
cm1WaWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlv
bnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzXTsKKyAgICAgICAgW3BsYXRmb3JtVmlldyBf
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpvcHRpb25zLnNob3Vs
ZFNob3dTcGVsbENoZWNraW5nRG90cygpXTsKICAgICAgICAgW3BsYXRmb3JtVmlldyByZXNldElu
dGVyYWN0aW9uQ2FsbGJhY2tzXTsKICAgICAgICAgW3BsYXRmb3JtVmlldyBfcmVzZXROYXZpZ2F0
aW9uR2VzdHVyZVN0YXRlRm9yVGVzdGluZ107CiAgICAgfQpAQCAtMjk3LDYgKzI5OSwxMSBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0SW52b2Nh
dGlvbikKIHsKICAgICBzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlv
blRvVVJMKHRlc3RJbnZvY2F0aW9uLnVybCgpKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgaWYgKHRlc3RJbnZvY2F0aW9uLm9wdGlvbnMoKS5lbmFibGVJbkFwcEJyb3dzZXJQcml2
YWN5KCkpCisgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNl
dEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxl
ZCJdOworI2VuZGlmCiB9CiAKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9h
cmRUeXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOwpAQCAtNDg3LDEy
ICs0OTQsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6aXNEb2luZ01lZGlhQ2FwdHVyZQogCiBz
dGF0aWMgV0tDb250ZW50TW9kZSBjb250ZW50TW9kZShjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9kZSA9PSAiZGVza3RvcCJfcykKKyAgICBh
dXRvIG1vZGUgPSBvcHRpb25zLmNvbnRlbnRNb2RlKCk7CisgICAgaWYgKG1vZGUgPT0gImRlc2t0
b3AiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZURlc2t0b3A7Ci0KLSAgICBpZiAob3B0
aW9ucy5jb250ZW50TW9kZSA9PSAibW9iaWxlIl9zKQorICAgIGlmIChtb2RlID09ICJtb2JpbGUi
KQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZU1vYmlsZTsKLQogICAgIHJldHVybiBXS0Nv
bnRlbnRNb2RlUmVjb21tZW5kZWQ7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Z3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2ODExMikKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTUwLDkgKzE1MCwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJl
c2V0UHJlZmVyCiAgICAgbV9tYWluV2ViVmlldy0+ZGlzbWlzc0FsbFBvcHVwTWVudXMoKTsKIH0K
IAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25z
Rm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAor
VGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFi
bGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVz
OworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFD
b250cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZp
ZXdJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvUGxhdGZv
cm1XZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjgxMTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsx
ODksNyBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS1dlYlZpCiAgICAgOiBt
X3dpbmRvd0lzS2V5KHRydWUpCiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKIHsKLSAgICBDR1Jl
Y3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCwgVGVz
dENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOworICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgw
LCAwLCBvcHRpb25zLnZpZXdXaWR0aCgpLCBvcHRpb25zLnZpZXdIZWlnaHQoKSk7CiAKICAgICBt
X3dpbmRvdyA9IFtbV2ViS2l0VGVzdFJ1bm5lcldpbmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpy
ZWN0XTsKICAgICBtX3dpbmRvdy5iYWNrZ3JvdW5kQ29sb3IgPSBbVUlDb2xvciBsaWdodEdyYXlD
b2xvcl07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJv
bGxlcklPUy5tbQkocmV2aXNpb24gMjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBA
QCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgfQogCiAgICAg
bV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5jbGVhcigpOwotICAgIGlmICghb3B0aW9ucy5zaG91
bGRQcmVzZW50UG9wb3ZlcnMpIHsKKyAgICBpZiAoIW9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92
ZXJzKCkpIHsKICNpZiBVU0UoVUlDT05URVhUTUVOVSkKICAgICAgICAgbV9wcmVzZW50UG9wb3Zl
clN3aXp6bGVycy5hcHBlbmQobWFrZVVuaXF1ZTxJbnN0YW5jZU1ldGhvZFN3aXp6bGVyPihbVUlD
b250ZXh0TWVudUludGVyYWN0aW9uIGNsYXNzXSwgQHNlbGVjdG9yKF9wcmVzZW50TWVudUF0TG9j
YXRpb246KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlUHJlc2VudE1lbnVPclBvcG92
ZXJPclZpZXdDb250cm9sbGVyKSkpOwogI2VuZGlmCkBAIC0yMTMsOCArMjEzLDEwIEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAgICAgICAgVUlTY3JvbGxWaWV3
ICpzY3JvbGxWaWV3ID0gd2ViVmlldy5zY3JvbGxWaWV3OwogICAgICAgICBbc2Nyb2xsVmlldyBf
cmVtb3ZlQWxsQW5pbWF0aW9uczpZRVNdOwogICAgICAgICBbc2Nyb2xsVmlldyBzZXRab29tU2Nh
bGU6MSBhbmltYXRlZDpOT107Ci0gICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gVUlF
ZGdlSW5zZXRzTWFrZShvcHRpb25zLmNvbnRlbnRJbnNldFRvcCwgMCwgMCwgMCk7Ci0gICAgICAg
IHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IENHUG9pbnRNYWtlKDAsIC1vcHRpb25zLmNvbnRl
bnRJbnNldFRvcCk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvbnRlbnRJbnNldFRvcCA9IG9w
dGlvbnMuY29udGVudEluc2V0VG9wKCk7CisgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0
ID0gVUlFZGdlSW5zZXRzTWFrZShjb250ZW50SW5zZXRUb3AsIDAsIDAsIDApOworICAgICAgICBz
Y3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgwLCAtY29udGVudEluc2V0VG9w
KTsKIAogICAgICAgICBpZiAod2ViVmlldy5pbnRlcmFjdGluZ1dpdGhGb3JtQ29udHJvbCkKICAg
ICAgICAgICAgIHNob3VsZFJlc3RvcmVGaXJzdFJlc3BvbmRlciA9IFt3ZWJWaWV3IHJlc2lnbkZp
cnN0UmVzcG9uZGVyXTsKQEAgLTI2NSwxMiArMjY3LDE0IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25m
aWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKKyAgICBbW0dl
bmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5k
b3ddIHNldFNob3VsZFNob3dUb3VjaGVzOnRlc3Qub3B0aW9ucygpLnNob3VsZFNob3dUb3VjaGVz
KCldOworCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IG1haW5XZWJWaWV3KCkt
PnBsYXRmb3JtVmlldygpOwogCi0gICAgaWYgKHRlc3Qub3B0aW9ucygpLnNob3VsZElnbm9yZU1l
dGFWaWV3cG9ydCkKKyAgICBpZiAodGVzdC5vcHRpb25zKCkuc2hvdWxkSWdub3JlTWV0YVZpZXdw
b3J0KCkpCiAgICAgICAgIHdlYlZpZXcuY29uZmlndXJhdGlvbi5wcmVmZXJlbmNlcy5fc2hvdWxk
SWdub3JlTWV0YVZpZXdwb3J0ID0gWUVTOwogCi0gICAgaWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VG
bGV4aWJsZVZpZXdwb3J0KQorICAgIGlmICghdGVzdC5vcHRpb25zKCkudXNlRmxleGlibGVWaWV3
cG9ydCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR1JlY3Qgc2NyZWVuQm91bmRzID0gW1VJ
U2NyZWVuIG1haW5TY3JlZW5dLmJvdW5kczsKQEAgLTI5MSwxMCArMjk1LDkgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQogICAgIC8vIFdLQnVuZGxlUGFnZVNldFVz
ZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFsc2UpLgogfQogCi12b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRp
b25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzID0g
c2hvdWxkU2hvd1RvdWNoZXMoKTsKLSAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBz
aGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHNldFNob3VsZFNob3dUb3VjaGVzOm9w
dGlvbnMuc2hvdWxkU2hvd1RvdWNoZXNdOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQkocmV2aXNpb24g
MjY4MTEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEsMTggQEAgUGxhdGZvcm1XZWJWaWV3OjpQ
bGF0Zm9ybVdlYlZpZXcoV0tXZWJWaQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCBzdXJlIHRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgZm9yIHRoaXM7IG1heWJl
IHdlIHNob3VsZCBoYXZlIEFQSSB0byBzZXQgdGhpcyBzbyB3ZSBjYW4gZG8gaXQgZnJvbSBUZXN0
Q29udHJvbGxlcj8KLSAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSkKKyAgICBp
ZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSgpKQogICAgICAgICBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRWYWx1ZTpAWUVTIGZvcktleTpAIldlYktpdDJV
c2VSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSJdOwogCiAgICAgYXV0byBjb3BpZWRDb25maWd1
cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilb
Y29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNj
cm9sbGluZyk7CisgICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgo
X19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNl
c10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZygpKTsKIAotICAgIE5TUmVjdCByZWN0
ID0gTlNNYWtlUmVjdCgwLCAwLCBUZXN0Q29udHJvbGxlcjo6dmlld1dpZHRoLCBUZXN0Q29udHJv
bGxlcjo6dmlld0hlaWdodCk7CisgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIG9w
dGlvbnMudmlld1dpZHRoKCksIG9wdGlvbnMudmlld0hlaWdodCgpKTsKICAgICBtX3ZpZXcgPSBb
W1Rlc3RSdW5uZXJXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBjb25maWd1cmF0
aW9uOmNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCldOwogICAgIFttX3ZpZXcgX3NldFdpbmRvd09j
Y2x1c2lvbkRldGVjdGlvbkVuYWJsZWQ6Tk9dOwogCiAgICAgTlNTY3JlZW4gKmZpcnN0U2NyZWVu
ID0gW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdOwotICAgIE5TUmVjdCB3aW5k
b3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID8gTlNPZmZzZXRSZWN0KHJlY3Qs
IDEwMCwgMTAwKSA6IE5TT2Zmc2V0UmVjdChyZWN0LCAtMTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFt
ZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOworICAgIE5TUmVjdCB3
aW5kb3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KCkgPyBOU09mZnNldFJlY3Qo
cmVjdCwgMTAwLCAxMDApIDogTlNPZmZzZXRSZWN0KHJlY3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVu
IGZyYW1lXS5zaXplLmhlaWdodCAtIHJlY3Quc2l6ZS5oZWlnaHQgKyAxMDAwMCk7CiAgICAgbV93
aW5kb3cgPSBbW1dlYktpdFRlc3RSdW5uZXJXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJl
Y3Q6d2luZG93UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tp
bmc6KE5TQmFja2luZ1N0b3JlVHlwZSlfTlNCYWNraW5nU3RvcmVVbmJ1ZmZlcmVkIGRlZmVyOllF
U107CiAgICAgbV93aW5kb3cucGxhdGZvcm1XZWJWaWV3ID0gdGhpczsKICAgICBbbV93aW5kb3cg
c2V0Q29sb3JTcGFjZTpbZmlyc3RTY3JlZW4gY29sb3JTcGFjZV1dOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDI2
ODExMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTEgKzE3MiwxMSBAQCBib29sIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGVzdENv
bnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9w
dGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29u
c3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxp
bmcgPSB0cnVlOwotICAgIG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gc2hvdWxkVXNlUmVt
b3RlTGF5ZXJUcmVlKCk7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IHNob3VsZFNo
b3dXZWJWaWV3KCk7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZlYXR1cmVzLmJv
b2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCB0cnVlIH0pOworICAg
IHJldHVybiBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29u
dGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJ
KHJldmlzaW9uIDI2ODExMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3Jt
V2ViVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFBs
YXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSCiAgICAgICAgIFNXUF9OT01PVkUgfCBT
V1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT0NPUFlCSVRTKTsKIAogICAgIFVJ
TlQgZmxhZ3MgPSBTV1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT0NPUFlCSVRT
OwotICAgIGlmIChtX29wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcpCisgICAgaWYgKG1fb3B0aW9u
cy5zaG91bGRTaG93V2ViVmlldygpKQogICAgICAgICBmbGFncyB8PSBTV1BfTk9NT1ZFOwogICAg
IDo6U2V0V2luZG93UG9zKAogICAgICAgICBtX3dpbmRvdywKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDI2ODEx
MikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtUmVzZXRQcmVmZXIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRlc3RD
b250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RP
cHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
d3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAJKHJldmlzaW9uIDI2ODExMikKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDkgKzEzNiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJl
c2V0UHJlZmVyCiB7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3Bl
Y2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6
c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewot
ICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IGZhbHNlOworICAgIFRlc3RG
ZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVu
YWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBmYWxzZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410848</attachid>
            <date>2020-10-08 09:04:04 -0700</date>
            <delta_ts>2020-10-08 13:19:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217390-20201008090403.patch</filename>
            <type>text/plain</type>
            <size>105671</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1OSBAQAorMjAyMC0xMC0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgVGVzdE9wdGlvbnMgY29kZSBpbiBXZWJLaXRUZXN0UnVubmVyIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHJhdGlvbmFsaXplIGFuZCBleHRlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzM5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBUZXN0T3B0aW9ucyBjb2Rl
IGluIFdlYktpdFRlc3RSdW5uZXIgdG8gbWFrZSBpdCBjbGVhciBob3cgb3B0aW9ucyBjb21pbmcg
aW4gYXQgCisgICAgICAgIGRpZmZlcmVudCBsZXZlbHMgYXJlIHRyZWF0ZWQgYW5kIHdoYXQgcHJl
Y2VkZW5jZSBlYWNoIGhhcy4gVGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAg
ICAgICAKKyAgICAgICAgLSBHbG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5u
ZXIgdmlhIHRoZSBjb21tYW5kIGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0g
SGFyZGNvZGVkIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1
biAoaG9wZWZ1bGx5IHdlIGNhbiByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVk
IHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09T
IGZvciB1c2VUaHJlYWRlZFNjcm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSB0aGUg
dGVzdCBoZWFkZXJzIHdpdGhpbiB0aGUgdGVzdCBpdHNlbGYuCisgICAgICAgIC0gRmluYWxseSwg
YSBzZWNvbmQgY2hhbmNlIGZvciBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJy
ZW5seSBvbmx5IHVzZWQgdGhlIENvY29hIHBvcnRzCisgICAgICAgICAgZm9yIHNldHRpbmcgZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gYW5kIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dP
cGVuIGJhc2VkIG9uIE5TVXNlckRlZmF1bHRzLikKKworICAgICAgICBUbyBtYWtlIHRoaXMgY2hh
bmdlIHdvcmssIGFuZCBwYXZlIHRoZSB3YXkgZm9yIGZ1dHVyZSBhdXRvZ2VuZXJhdGlvbiBvZiBz
b21lIG9mIHRoZXNlIHRlc3Qgb3B0aW9ucywKKyAgICAgICAgdGhlIFRlc3RPcHRpb25zIHN0cnVj
dCAobm93IGNsYXNzKSB3YXMgb3ZlcmhhdWxlZC4gSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBzdGF0
ZSBpdHNlbGYsIFRlc3RPcHRpb25zCisgICAgICAgIGlzIG5vdyBhbiBpbW11dGFibGUgb3duZXIg
b2YgYSBUZXN0RmVhdHVyZXMgb2JqZWN0LiBUZXN0RmVhdHVyZXMgaXMgYSBzaW1wbGUgc3RydWN0
IHRoYXQgY29udGFpbnMgbWFwcyAKKyAgICAgICAgb2Ygb3B0aW9uIGtleXMgdG8gdmFsdWVzIGFu
ZCBjYW4gYmUgbWVyZ2VkIHdpdGggb3RoZXIgVGVzdEZlYXR1cmVzIG9iamVjdHMuIFRlc3RPcHRp
b25zIHRha2VzIGEgCisgICAgICAgIFRlc3RGZWF0dXJlcyBhdCBjb25zdHJ1Y3Rpb24sIGFuZCBl
eHBvc2VzIGdldHRlcnMgZm9yIGFsbCBrZXlzLCBhcyB3ZWxsIGFzIGRlZmF1bHRzIGZvciB3aGVu
IHRoZXkgYXJlCisgICAgICAgIG5vdCBpbiB0aGUgbWFwcy4gSW4gZnV0dXJlIGNoYW5nZXMsIEkg
d291bGQgbGlrZSB0byByZW1vdmUgbWFueSBvZiB0aGVzZSAodGhlIG9uZXMgdGhhdCBjb3JyZXNw
b25kCisgICAgICAgIHdpdGggV2ViS2l0IHByZWZlcmVuY2VzIGFueXdheSkgYW5kIGhhdmUgdGhl
IGtleXMgYW5kIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGRlYWx0IHdpdGggYnkgV0tQcmVmZXJlbmNl
cy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHA6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmg6CisgICAgICAgIFN3aXRjaCB0byBzdGQ6OnVub3Jk
ZXJlZF9tYXAgZm9yIGNvbnNpc3RlbmN5IGFuZCBlYXNlIG9mIGNvbnZlcnNpb24uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gY2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAg
ICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAgQWRkIGNvbnZlcnNpb25zIGZvciBzdGQ6
OnN0cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICBSZXBsYWNlIHNvbWUg
Ym9vbHMgd2l0aCBhIG5ldyBnbG9iYWwgVGVzdEZlYXR1cmVzIGluc3RhbmNlIHRoYXQgZm9ybXMg
dGhlIGJhc2Ugb2YKKyAgICAgICAgYWxsIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
biBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdX
aXRoT3B0aW9ucyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNl
dFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwpOgorICAgICAgICBFeHBvc2UgYXMgYSBzdGF0
aWMgbWVtYmVyIGZ1bmN0aW9uIG9uIFRlc3RDb250cm9sbGVyIGZvciB1c2UgaW4gb3RoZXIgZmls
ZXMuCisgICAgICAgIAorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNG
b3JUZXN0IGNvbnN0KToKKyAgICAgICAgUmV3b3JrIHRvIGJlIGEgc2VxdWVuY2Ugb2YgVGVzdEZl
YXR1cmVzIG1lcmdlcy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRl
c3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmNyZWF0ZVRlc3RV
UkwpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVs
YXRpdmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVhZGVy
VmFsdWVBc1VSTCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnVwZGF0ZVRlc3RPcHRpb25zRnJv
bVRlc3RIZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGRUZXN0T3B0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmVkIFRlc3RP
cHRpb25zIHBhcnNpbmcgdG8gVGVzdE9wdGlvbnMuY3BwCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCBu
ZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0T3B0aW9ucy5oOgorICAgICAgICBSZXdvcmtzIFRlc3RPcHRpb25zIHRvIGJlIGFuIGltbXV0
YWJsZSBvd25lciBvZiBhIFRlc3RGZWF0dXJlcyBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2V0CisgICAg
ICAgIG9mIG1hcHMgdGhhdCBtYXAgZmVhdHVyZSBzdHJpbmcga2V5cywgdG8gdmFsdWVzIG9mIHR5
cGUgYm9vbCwgZG91YmxlLCBzdHJpbmcgb3Igc3RyaW5nIHZlY3Rvci4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjptZXJnZSk6Cisg
ICAgICAgIE1lcmdlcyB0d28gVGVzdEZlYXR1cmVzIG9iamVjdHMuIElmIGJvdGggY29udGFpbiB0
aGUgc2FtZSBrZXksIHRoZSAnYWRkaXRpb25hbCcKKyAgICAgICAgVGVzdEZlYXR1cmVzIG92ZXJy
aWRlcyB0aGUgJ2Jhc2UnIFRlc3RGZWF0dXJlcy4KKworICAgICAgICAoV1RSOjpkdW1wRmVhdHVy
ZXMpOgorICAgICAgICBIZWxwZXIgdG8gZHVtcCBmZWF0dXJlcyB0byBzdGRlcnIsIHVzZWZ1bCBm
b3IgZGVidWdnaW5nLgorCisgICAgICAgIChXVFI6OmtleVR5cGUpOgorICAgICAgICBIZWxwZXIg
Zm9yIHBhcnNlciB0byBrbm93IHdoaWNoIHZhbHVlIHBhcnNlciB0byB1c2UuCisKKyAgICAgICAg
KFdUUjo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKToKKyAgICAgICAgKFdUUjo6cGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6CisgICAgICAgIChXVFI6OnBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOgorICAgICAgICBWYWx1ZSBwYXJzZXJzIG1vdmVk
IGZyb20gVGVzdENvbnRyb2xsZXIuY3BwCisKKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVhZGVy
KToKKyAgICAgICAgSGVhZGVyIHBhcnNlciBtb3ZlZCBmcm9tIFRlc3RDb250cm9sbGVyLmNwcC4g
VXBkYXRlIHRvIG5vdyByZXR1cm4KKyAgICAgICAgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGFuZCB1
c2Uga2V5VHlwZSB0byBwaWNrIHZhbHVlIHBhcnNlciByYXRoZXIKKyAgICAgICAgdGhhbiBpbmxp
bmluZyB0aGUgaWYgc3RhdGVtZW50cy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmhhcmRjb2Rl
ZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KToKKyAgICAgICAgTW92ZWQgZnJvbSB0aGUgVGVz
dE9wdGlvbnMgY29udHJ1Y3RvciBhbmQgcmV3b3JrZWQgdG8gcmV0dXJuIGEgVGVzdEZlYXR1cmVz
CisgICAgICAgIG9iamVjdCB0byBiZSBtZXJnZWQgYnkgdGhlIGNhbGxlci4KKworICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVh
dGVzIGEgVGVzdEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRl
c3QuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVh
dHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRv
IG5vdyByZXR1cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJh
dGhlciB0aGFuIHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUlu
QXBwQnJvd3NlclByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVu
VGVzdAorICAgICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0
ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAg
ICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAg
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRh
dGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgTW92ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMg
bW9yZSBhcHByb3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFz
IHRoYXQgaXMgZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRv
IGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1v
dGVMYXllclRyZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUg
Z2xvYmFsbHksCisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGlu
ZyB0byB1c2UgYm9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4v
VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQ
bGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgVXBkYXRlZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvZ3RrL1Rlc3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9u
c0ZvclRlc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0
dXJlLgorCiAyMDIwLTEwLTA3ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4K
IAogICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gRW5zdXJlIHRoYXQgYnVpbGRlciBuYW1lcyBh
cmUgdmFsaWQgQnVpbGRib3QgaWRlbnRpZmllcnMKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRp
b25zLmNwcAkocmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAorI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5o
IgogI2luY2x1ZGUgPHN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RSIHsKQEAgLTExMywxNiArMTE0
LDE2IEBAIHN0YXRpYyBib29sIGhhbmRsZU9wdGlvbkFsbG93ZWRIb3N0KE9wdGkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlU3Ry
aW5nLCBIYXNoTWFwPFN0cmluZywgYm9vbD4mIGZlYXR1cmVzKQorc3RhdGljIGJvb2wgcGFyc2VG
ZWF0dXJlKHN0ZDo6c3RyaW5nX3ZpZXcgZmVhdHVyZVN0cmluZywgc3RkOjp1bm9yZGVyZWRfbWFw
PHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7Ci0gICAgYXV0byBzdHJpbmdzID0gZmVh
dHVyZVN0cmluZy5zcGxpdCgnPScpOwotICAgIGlmIChzdHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJp
bmdzLnNpemUoKSA+IDIpCisgICAgYXV0byBzdHJpbmdzID0gc3BsaXQoZmVhdHVyZVN0cmluZywg
Jz0nKTsKKyAgICBpZiAoc3RyaW5ncy5lbXB0eSgpIHx8IHN0cmluZ3Muc2l6ZSgpID4gMikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBmZWF0dXJlTmFtZSA9IHN0cmluZ3NbMF07
CiAgICAgYm9vbCBlbmFibGVkID0gc3RyaW5ncy5zaXplKCkgPT0gMSB8fCBzdHJpbmdzWzFdID09
ICJ0cnVlIjsKIAotICAgIGZlYXR1cmVzLnNldChmZWF0dXJlTmFtZSwgZW5hYmxlZCk7CisgICAg
ZmVhdHVyZXMuaW5zZXJ0KHsgc3RkOjpzdHJpbmcgeyBmZWF0dXJlTmFtZSB9LCBlbmFibGVkIH0p
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNzMsNyArMTc0LDEyIEBAIGNvbnN0IGNoYXIg
KiBPcHRpb25zSGFuZGxlcjo6dXNhZ2UgPSAiVXMKIGNvbnN0IGNoYXIgKiBPcHRpb25zSGFuZGxl
cjo6aGVscCA9ICJEaXNwbGF5cyB0aGlzIGhlbHAuIjsKIAogT3B0aW9uOjpPcHRpb24oY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIHN0ZDo6ZnVuY3Rpb248Ym9vbChP
cHRpb25zJiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKT4gcGFyYW1ldGVySGFuZGxlciwgYm9v
bCBoYXNBcmd1bWVudCkKLSAgICA6IG5hbWUobmFtZSksIGRlc2NyaXB0aW9uKGRlc2NyaXB0aW9u
KSwgcGFyYW1ldGVySGFuZGxlcihwYXJhbWV0ZXJIYW5kbGVyKSwgaGFzQXJndW1lbnQoaGFzQXJn
dW1lbnQpIHsgfTsKKyAgICA6IG5hbWUobmFtZSkKKyAgICAsIGRlc2NyaXB0aW9uKGRlc2NyaXB0
aW9uKQorICAgICwgcGFyYW1ldGVySGFuZGxlcihwYXJhbWV0ZXJIYW5kbGVyKQorICAgICwgaGFz
QXJndW1lbnQoaGFzQXJndW1lbnQpCit7Cit9CiAKIGJvb2wgT3B0aW9uOjptYXRjaGVzKGNvbnN0
IGNoYXIqIG9wdGlvbikKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lv
biAyNjgxNTkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUg
PHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBAIHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgog
ICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0
cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZl
YXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVy
ZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50
YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlvbiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsx
MTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBh
ZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RP
cHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVybiAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9v
cHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29s
IHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsg
cmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYmIG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6
YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAgICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBz
aG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5j
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0
aW9ucy5oCShyZXZpc2lvbiAyNjgxNTkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8
V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8
c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+
CkBAIC01OSw2ICs2MCwxMSBAQCBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0so
Y29uCiAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3Ry
aW5nKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBz
dGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dLKHN0cmluZy5jX3N0cigpKTsK
K30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3Ry
aW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIHRvV0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwpA
QCAtMTE0LDYgKzEyMCwxMSBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3Qg
SlNSCiAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBX
VEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAg
IHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxp
bmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHRvV0soY3JlYXRlSlNTdHJpbmco
Y29udGV4dCwgdmFsdWUpLmdldCgpKTsKQEAgLTEyNSw0ICsxMzYsMjUgQEAgaW5saW5lIFdURjo6
U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dAogICAgIHJldHVybiB0b1dURlN0cmluZyhjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJp
bmdUeXBlPgoraW5saW5lIHN0ZDo6dmVjdG9yPFN0cmluZ1R5cGU+IHNwbGl0KGNvbnN0IFN0cmlu
Z1R5cGUmIHN0cmluZywgY2hhciBkZWxpbWl0ZXIpCit7CisgICAgc3RkOjp2ZWN0b3I8U3RyaW5n
VHlwZT4gcmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChpIDwgc3RyaW5n
LnNpemUoKSkgeworICAgICAgICBhdXRvIGZvdW5kSW5kZXggPSBzdHJpbmcuZmluZF9maXJzdF9v
ZihkZWxpbWl0ZXIsIGkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ICE9IGkpCisgICAgICAg
ICAgICByZXN1bHQucHVzaF9iYWNrKHN0cmluZy5zdWJzdHIoaSwgZm91bmRJbmRleCAtIGkpKTsK
KworICAgICAgICBpZiAoZm91bmRJbmRleCA9PSBTdHJpbmdUeXBlOjpucG9zKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaSA9IGZvdW5kSW5kZXggKyAxOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDksMTIgKzEwOSw2IEBAIHN0YXRpYyBjb25zdGV4cHIgYXV0byBwYXRoU2VwYXJhdG9yID0gJ1wK
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBwYXRoU2VwYXJhdG9yID0gJy8nOwogI2VuZGlmCiAKLWNv
bnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGggPSA4MDA7Ci1jb25zdCB1bnNp
Z25lZCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdodCA9IDYwMDsKLQotY29uc3QgdW5zaWduZWQg
VGVzdENvbnRyb2xsZXI6OnczY1NWR1ZpZXdXaWR0aCA9IDQ4MDsKLWNvbnN0IHVuc2lnbmVkIFRl
c3RDb250cm9sbGVyOjp3M2NTVkdWaWV3SGVpZ2h0ID0gMzYwOwotCiBjb25zdCBXVEY6OlNlY29u
ZHMgVGVzdENvbnRyb2xsZXI6OmRlZmF1bHRTaG9ydFRpbWVvdXQgPSA1X3M7CiBjb25zdCBXVEY6
OlNlY29uZHMgVGVzdENvbnRyb2xsZXI6Om5vVGltZW91dCA9IC0xX3M7CiAKQEAgLTQ2OSwxNSAr
NDYzLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICBt
X3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IG9wdGlvbnMuc2hvdWxkRHVtcFBpeGVsc0Zv
ckFsbFRlc3RzOwogICAgIG1fZm9yY2VDb21wbGV4VGV4dCA9IG9wdGlvbnMuZm9yY2VDb21wbGV4
VGV4dDsKICAgICBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IG9wdGlvbnMuc2hvdWxk
VXNlQWNjZWxlcmF0ZWREcmF3aW5nOwotICAgIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlID0g
b3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7CiAgICAgbV9wYXRocyA9IG9wdGlvbnMu
cGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRIb3N0czsKLSAgICBt
X3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldzsKLSAgICBtX3No
b3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsKICAgICBtX2NoZWNr
Rm9yV29ybGRMZWFrcyA9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzOwogICAgIG1fYWxsb3dB
bnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzID0gb3B0aW9ucy5hbGxvd0FueUhUVFBT
Q2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHM7Ci0gICAgbV9pbnRlcm5hbEZlYXR1cmVzID0gb3B0
aW9ucy5pbnRlcm5hbEZlYXR1cmVzOwotICAgIG1fZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBvcHRp
b25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIAorICAgIG1fZ2xvYmFsRmVhdHVyZXMuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVzOworICAgIG1fZ2xv
YmFsRmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZl
YXR1cmVzOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VS
ZW1vdGVMYXllclRyZWUiLCBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSB9KTsKKyAg
ICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAic2hvdWxkU2hvd1dlYlZp
ZXciLCBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3IH0pOworICAgIG1fZ2xvYmFsRmVhdHVyZXMu
Ym9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91bGRTaG93VG91Y2hlcyIsIG9wdGlvbnMuc2hvdWxk
U2hvd1RvdWNoZXMgfSk7CisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVF
KQogICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBvcHRpb25zLmFjY2Vzc2li
aWxpdHlJc29sYXRlZFRyZWVNb2RlOwogI2VuZGlmCkBAIC00OTksNyArNDk1LDcgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwogICAgIG1fZXZlbnRTZW5kZXJQcm94
eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhpcyk7CiB9CiAKLVdLUmV0YWluUHRy
PFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRl
eHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9ucyYgb3B0aW9u
cykgY29uc3QKK1dLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250
cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IENvbnRleHRPcHRpb25z
JiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tD
b250ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKICAgICBXS0NvbnRleHRDb25maWd1cmF0aW9u
U2V0SW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCksIGluamVjdGVkQnVuZGxl
UGF0aCgpKTsKQEAgLTU2MiwxMCArNTU4LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBUZXN0
Q29udHJvbGxlcjo6d2UKIAogV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVz
dENvbnRyb2xsZXI6OmdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dE9wdGlvbnMtPmhh
c1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0aW9ucykpIHsKLSAg
ICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRlQ29udGV4dENvbmZpZ3Vy
YXRpb24ob3B0aW9ucy5jb250ZXh0T3B0aW9ucyk7CisgICAgYXV0byBjb250ZXh0T3B0aW9ucyA9
IG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKTsKKyAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9jb250
ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb250ZXh0T3B0aW9ucykp
IHsKKyAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRlQ29udGV4dENv
bmZpZ3VyYXRpb24oY29udGV4dE9wdGlvbnMpOwogICAgICAgICBtX2NvbnRleHQgPSBwbGF0Zm9y
bUFkanVzdENvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihj
b250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpLmdldCgpLCBjb250ZXh0Q29uZmlndXJhdGlvbi5n
ZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBvcHRpb25zLmNvbnRleHRPcHRpb25z
OworICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnM7CiAKICAgICAgICAg
bV9nZW9sb2NhdGlvblByb3ZpZGVyID0gbWFrZVVuaXF1ZTxHZW9sb2NhdGlvblByb3ZpZGVyTW9j
az4obV9jb250ZXh0LmdldCgpKTsKIApAQCAtNjI3LDcgKzYyNCw3IEBAIFdLUmV0YWluUHRyPFdL
UGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QKICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0Q29u
dGV4dChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKICAgICBXS1Bh
Z2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBtX3Bh
Z2VHcm91cC5nZXQoKSk7CiAgICAgCi0gICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lv
bikgeworICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKSkgewogICAgICAgICBh
dXRvIGVwaGVtZXJhbERhdGFTdG9yZSA9IGFkb3B0V0soV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRl
Tm9uUGVyc2lzdGVudERhdGFTdG9yZSgpKTsKICAgICAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNl
dFdlYnNpdGVEYXRhU3RvcmUocGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIGVwaGVtZXJhbERhdGFT
dG9yZS5nZXQoKSk7CiAgICAgfQpAQCAtNjM5LDExICs2MzYsMTIgQEAgV0tSZXRhaW5QdHI8V0tQ
YWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjcmVhdGVX
ZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CisgICAgYXV0
byBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcigpOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghb3B0aW9ucy5hcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFhcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgYnVuZGxlIGlkZW50
aWZpZXIgY2FuIG9ubHkgYmUgc2V0IG9uY2UgcGVyIHRlc3QsIGFuZCBpcyBjbGVhcmVkIGJldHdl
ZW4gdGVzdHMuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc1NldEFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllcik7Ci0gICAgICAgIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihv
cHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAgIHNldEFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcihhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwogICAgICAg
ICBtX2hhc1NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHRydWU7CiAgICAgfQogI2Vu
ZGlmCkBAIC02ODYsNyArNjg0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmll
d1dpdGhPcAogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8vIHBhZ2VEaWRTY3Jv
bGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAgICAgICBvcHRpb25z
LnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA/IHJ1bk9wZW5QYW5lbCA6IDAsCisgICAgICAgIG9w
dGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgPyBydW5PcGVuUGFuZWwgOiAwLAogICAg
ICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0LAogICAgICAg
ICAwLCAvLyBoZWFkZXJIZWlnaHQKICAgICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CkBAIC03OTUs
OSArNzkzLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmlld1dpdGhPcAogICAg
IC8vIHNvbWV0aGluZyBlbHNlIGZvciBzcGVjaWZpYyB0ZXN0cyB0aGF0IG5lZWQgdG8gcnVuIGF0
IGEgZGlmZmVyZW50IHdpbmRvdyBzY2FsZS4KICAgICBtX21haW5XZWJWaWV3LT5jaGFuZ2VXaW5k
b3dTY2FsZUlmTmVlZGVkKDEpOwogICAgIAotICAgIGlmICghb3B0aW9ucy5hcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFhcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICByZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMo
KTsKLSAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mob3B0aW9u
cy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgICAgICB1cGRhdGVCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2VzcyhhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwogICAg
IH0KIH0KIApAQCAtODA5LDcgKzgwNyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmVuc3VyZVZp
ZXdTdXBwb3J0c08KICAgICAgICAgLy8gSGF2aW5nIGNyZWF0ZWQgYW5vdGhlciBwYWdlICh2aWEg
d2luZG93Lm9wZW4oKSkgcHJldmVudHMgcHJvY2VzcyBzd2FwcGluZyBvbiBuYXZpZ2F0aW9uIGFu
ZCBpdCBtYXkgdGhlcmVmb3JlCiAgICAgICAgIC8vIGNhdXNlIGZsYWtpbmVzcyB0byByZXVzZSB0
aGUgdmlldy4gV2Ugc2hvdWxkIGFsc28gYWx3YXlzIG1ha2UgYSBuZXcgdmlldyBpZiB0aGUgdGVz
dCBpcyBtYXJrZWQgYXMgYXBwLWJvdW5kLCBiZWNhdXNlCiAgICAgICAgIC8vIHRoZSB2aWV3IGNv
bmZpZ3VyYXRpb24gbXVzdCBjaGFuZ2UuCi0gICAgICAgIGlmICghbV9jcmVhdGVkT3RoZXJQYWdl
ICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykgJiYgIW9wdGlv
bnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmICghbV9jcmVhdGVkT3RoZXJQYWdlICYm
IG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykgJiYgIW9wdGlvbnMu
aXNBcHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB3aWxs
RGVzdHJveVdlYlZpZXcoKTsKQEAgLTgzNiw4ICs4MzQsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0VGVzdFJ1bm5lck92
ZXJyaWRlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBXS1ByZWZlcmVuY2VzRW5hYmxlQWxsRXhwZXJp
bWVudGFsRmVhdHVyZXMocHJlZmVyZW5jZXMpOwotICAgIGZvciAoY29uc3QgYXV0byYgZXhwZXJp
bWVudGFsRmVhdHVyZSA6IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAgIFdL
UHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBleHBl
cmltZW50YWxGZWF0dXJlLnZhbHVlLCB0b1dLKGV4cGVyaW1lbnRhbEZlYXR1cmUua2V5KS5nZXQo
KSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiBvcHRpb25zLmV4cGVyaW1l
bnRhbEZlYXR1cmVzKCkpCisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0
dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAogICAgIFdL
UHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAK
QEAgLTg2MiwxNyArODYwLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5j
ZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJl
ZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIikuZ2V0KCkpOwogI2Vu
ZGlmCiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0dXJlIDogb3B0aW9u
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5h
bERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUudmFs
dWUsIHRvV0soaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUua2V5KS5nZXQoKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBba2V5LCB2YWx1ZV0gIDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMoKSkK
KyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MpOwotICAgIFdLUHJl
ZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vzcyk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5l
bmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1
cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVv
SW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRl
b0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVBy
b2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BV
UHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NF
bmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNz
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3NFbmFibGVk
KHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcygpKTsK
ICNlbmRpZgotICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbkVuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuc2hvdWxkRW5hYmxlUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24oKSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VWaXNpYmlsaXR5
QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJs
ZUFwcE5hcCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpLnNob3VsZEVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlVmlzaWJp
bGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5l
bmFibGVBcHBOYXAoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFN1
YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAg
ICAgV0tQcmVmZXJlbmNlc1NldFhTU0F1ZGl0b3JFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7
CkBAIC04ODMsMTAgKzg4MSwxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVu
Y2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MocHJlZmVy
ZW5jZXMsIGtXS0phdmFTY3JpcHRSdW50aW1lRmxhZ3NBbGxFbmFibGVkKTsKICAgICBXS1ByZWZl
cmVuY2VzU2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShwcmVmZXJlbmNl
cywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRET01QYXN0ZUFsbG93
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0RE9NUGFzdGVBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmRvbVBhc3RlQWxsb3dl
ZCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzQWxs
b3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEZpbGVBY2Nlc3NG
cm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmFs
bG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMpOworICAgIFdLUHJlZmVyZW5jZXNTZXRUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcygpKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgV0tQ
cmVmZXJlbmNlc1NldEZ1bGxTY3JlZW5FbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICNlbmRp
ZgpAQCAtODk5LDE4ICs4OTcsMTggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJl
bmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQo
cHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXREaWFsb2dFbGVtZW50RW5h
YmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0TW9ja1Njcm9s
bGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzKTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJlZmVyZW5jZXMsIG9w
dGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRBdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXR0YWNobWVu
dEVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNZW51SXRlbUVsZW1lbnRFbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUtl
eWdlbkVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0V2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDb2xvckZpbHRlckVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZlcmVuY2VzLCBvcHRp
b25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRpb25zLm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBdHRhY2htZW50RWxlbWVu
dEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQoKSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRL
ZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVLZXlnZW5FbGVt
ZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKCkpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24oKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1
dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcigpKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENvbG9yRmlsdGVyRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcigpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywg
b3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUJh
Y2tGb3J3YXJkQ2FjaGUoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5nZXQoKSk7CiAKQEAgLTkz
Miw3ICs5MzAsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAg
ICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKHBy
ZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VDU1NBbmlt
YXRpb25TdXNwZW5zaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogCi0gICAgV0tQcmVm
ZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIG1fc2hvdWxk
VXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChwcmVmZXJlbmNl
cywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51c2VBY2NlbGVyYXRl
ZERyYXdpbmcoKSk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSB0ZXN0aW5nIHRoZSBkZWZh
dWx0LgogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3kocHJlZmVyZW5j
ZXMsIGtXS0FsbG93QWxsU3RvcmFnZSk7CiAKQEAgLTk1Myw3ICs5NTEsNyBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgCiAgICAgV0tQcmVmZXJlbmNlc1Nl
dExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogCi0g
ICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0U3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIApAQCAtOTcyLDcgKzk3MCw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2Vz
U2V0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUocHJlZmVyZW5jZXMsIGZhbHNlKTsK
ICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5j
ZXMsIGZhbHNlLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3BlYWtlclNlbGVjdGlv
blJlcXVpcmVzVXNlckdlc3R1cmUiKSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0U2hvdWxkVXNl
U2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0
aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywgb3B0aW9ucy51
c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KCkpOwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFlfSVNPTEFURURfVFJFRSkKICAgICBXS1ByZWZlcmVuY2VzU2V0SXNBY2Nlc3NpYmlsaXR5SXNv
bGF0ZWRUcmVlRW5hYmxlZChwcmVmZXJlbmNlcywgYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1v
ZGUoKSk7CkBAIC0xMDA2LDExICsxMDA0LDEyIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0
U3RhdGVUb0NvbnNpc3QKICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiQWNjZXNzaWJp
bGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUpOwogI2Vu
ZGlmCiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKQotICAgICAgICBzZXRW
YWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlvbnMuanNjT3B0aW9ucy5j
X3N0cigpKTsKKyAgICBhdXRvIGpzY09wdGlvbnMgPSBvcHRpb25zLmpzY09wdGlvbnMoKTsKKyAg
ICBpZiAoIWpzY09wdGlvbnMuZW1wdHkoKSkKKyAgICAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdl
Qm9keSwgIkpTQ09wdGlvbnMiLCBqc2NPcHRpb25zLmNfc3RyKCkpOwogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5j
X3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVz
KCkuY19zdHIoKSk7CiAjZW5kaWYKIAogICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0
b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKQEAgLTExMTgsNyAr
MTExNyw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKIAogICAg
IHNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoZmFsc2UpOwogICAgIAotICAgIHNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMp
OworICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdw
b3J0U2NhbGVMaW1pdHMoKSk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVVUkxzID0gbnVsbHB0cjsK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTMxOCw3ICsxMzE3LDcgQEAgc3RhdGljIHN0
ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVmIHVybAogICAgIHJldHVybiBzdGQ6OnN0cmluZygp
OwogfQogCi1zdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JV
UkwpCitXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBw
YXRoT3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRoT3JVUkwsICJodHRwOi8vIikgfHwgc3Ry
c3RyKHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImZpbGU6Ly8i
KSkKICAgICAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHBhdGhPclVSTCk7
CkBAIC0xMzU2LDIyMSArMTM1NSwyNSBAQCBzdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChj
b25zdCBjaGFyCiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1ZmZlci5n
ZXQoKSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJ0cnVlIikKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMnIGZv
ciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUuY19z
dHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgdmFs
dWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgYXV0byBiYXNlVVJMID0g
YWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgYXV0byByZWxh
dGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2
YWx1ZS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChy
ZWxhdGl2ZVVSTC5nZXQoKSkpKTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5n
VGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIHJl
dHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhjcmVhdGVUZXN0VVJMKHZhbHVlLmNf
c3RyKCkpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVh
ZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKLXsKLSAgICBzdGQ6OnN0cmluZyBm
aWxlbmFtZSA9IGFic29sdXRlUGF0aDsKLSAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkgewotICAg
ICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhl
IHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgZmlsZW5hbWUgPSB0ZXN0UGF0aChhZG9w
dFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0ZDo6c3Ry
aW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0RmlsZShmaWxlbmFtZS5kYXRhKCkp
OwotICAgIGlmICghdGVzdEZpbGUuZ29vZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZ2V0bGlu
ZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtp
dC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKLSAg
ICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7Ci0gICAg
aWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHJldHVybjsK
LSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxv
Y2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMi
LCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdGQ6OnN0
cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3Ry
aW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNp
emUoKSkpOwotICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOwotICAgIHdoaWxlIChwYWlyU3RhcnQg
PCBwYWlyU3RyaW5nLnNpemUoKSkgewotICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJp
bmcuZmluZCgiICIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3Ry
aW5nOjpucG9zKQotICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOwotICAg
ICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3Rh
cnQpOwotICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAo
Y291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBmaWxlbmFtZS5jX3N0cigpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8ga2V5ID0gcGFpclN0
cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFydCk7Ci0gICAg
ICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlvbiArIDEsIHBh
aXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0KLSAgICAgICAgaWYgKCFrZXkucmZpbmQo
ImV4cGVyaW1lbnRhbDoiKSkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7Ci0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQoU3RyaW5nKGtl
eS5jX3N0cigpKSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWtleS5yZmluZCgiaW50ZXJuYWw6IikpIHsKLSAgICAgICAgICAg
IGtleSA9IGtleS5zdWJzdHIoOSk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5pbnRlcm5hbERl
YnVnRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19zdHIoKSksIHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtleSA9PSAibGFuZ3Vh
Z2UiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMub3ZlcnJpZGVMYW5n
dWFnZXMgPSBTdHJpbmcodmFsdWUuY19zdHIoKSkuc3BsaXQoJywnKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRmxl
eGlibGVWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VGbGV4aWJsZVZpZXdw
b3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJ1c2VEYXRhRGV0ZWN0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVz
ZURhdGFEZXRlY3Rpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInVzZU1vY2tTY3JvbGxiYXJzIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
aWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUNoYXJhY3RlclNlbGVjdGlvbkdy
YW51bGFyaXR5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlv
bkdyYW51bGFyaXR5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Npb24iKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlTWVudUl0ZW1FbGVtZW50
IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVLZXln
ZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBvaW50
ZXJMb2NrIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVBvaW50ZXJMb2NrID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFi
bGVXZWJBdXRoZW50aWNhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1
dGhlbnRpY2F0b3IiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGlj
YXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5kdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0aW9uTWFuaWZlc3QiKQotICAgICAg
ICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdCA9IHBhcnNlU3RyaW5nVGVzdEhl
YWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNl
c1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImRvbVBhc3RlQWxsb3dlZCIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJs
ZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy51c2VTZXJ2aWNlV29ya2Vy
U2hvcnRUaW1lb3V0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRz
SW5EYXJrTW9kZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dy
b3VuZHNJbkRhcmtNb2RlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
InJ1blNpbmdseSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5ydW5TaW5nbHkgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNo
b3VsZElnbm9yZU1ldGFWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRJ
Z25vcmVNZXRhVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNwZWxsQ2hlY2tpbmdEb3RzIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlU2Vy
dmljZUNvbnRyb2xzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVNlcnZpY2VDb250
cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZWRpdGFibGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZWRpdGFibGUg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNob3VsZFByZXNlbnRQb3BvdmVycyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImNv
bnRlbnRJbnNldC50b3AiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGVudEluc2V0VG9w
ID0gc3RkOjpzdG9kKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJpZ25vcmVTeW5j
aHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRl
eHRPcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImNvbnRl
bnRNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRlbnRNb2RlID0geyB2YWx1ZS5j
X3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllciA9IHsgdmFsdWUuY19zdHIoKSB9OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJs
ZUFwcE5hcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBcHBOYXAgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dzTGlua1ByZXZpZXciKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFi
bGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFi
bGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQ
cm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BV
UHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVJ
bkFwcEJyb3dzZXJQcml2YWN5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwgPSBwYXJzZVN0
cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJpc0FwcEJvdW5kV2ViVmlldyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5pc0FwcEJvdW5k
V2ViVmlldyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHBh
aXJTdGFydCA9IHBhaXJFbmQgKyAxOwotICAgIH0KLX0KLQogVGVzdE9wdGlvbnMgVGVzdENvbnRy
b2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkgY29u
c3QKIHsKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zKGNvbW1hbmQucGF0aE9yVVJMKTsKLQotICAg
IG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gbV9zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7
Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IG1fc2hvdWxkU2hvd1dlYlZpZXc7Ci0K
LSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2ludGVybmFsRmVhdHVyZXMpCi0gICAgICAgIG9w
dGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmFkZChmZWF0dXJlLmtleSwgZmVhdHVyZS52YWx1
ZSk7Ci0gICAgZm9yIChhdXRvJiBmZWF0dXJlIDogbV9leHBlcmltZW50YWxGZWF0dXJlcykKLSAg
ICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQoZmVhdHVyZS5rZXksIGZlYXR1
cmUudmFsdWUpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFsRmVhdHVyZXM7
CisgICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0
KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVE
ZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVm
YXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVz
LCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb21tYW5k
KSk7CiAKLSAgICB1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KG9wdGlv
bnMsIGNvbW1hbmQucGF0aE9yVVJMKTsKLSAgICB1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVh
ZGVyKG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJMLCBjb21tYW5kLmFic29sdXRlUGF0aCk7Ci0g
ICAgcGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhvcHRpb25zKTsKLQotICAgIHJldHVybiBvcHRpb25z
OworICAgIHJldHVybiBUZXN0T3B0aW9ucyB7IGZlYXR1cmVzIH07CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnVwZGF0ZVdlYlZpZXdTaXplRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYg
dGVzdCkKIHsKLSAgICB1bnNpZ25lZCB3aWR0aCA9IHZpZXdXaWR0aDsKLSAgICB1bnNpZ25lZCBo
ZWlnaHQgPSB2aWV3SGVpZ2h0OwotICAgIGlmICh0ZXN0Lm9wdGlvbnMoKS5pc1NWR1Rlc3QpIHsK
LSAgICAgICAgd2lkdGggPSB3M2NTVkdWaWV3V2lkdGg7Ci0gICAgICAgIGhlaWdodCA9IHczY1NW
R1ZpZXdIZWlnaHQ7Ci0gICAgfQotCi0gICAgbWFpbldlYlZpZXcoKS0+cmVzaXplVG8od2lkdGgs
IGhlaWdodCk7CisgICAgbWFpbldlYlZpZXcoKS0+cmVzaXplVG8odGVzdC5vcHRpb25zKCkudmll
d1dpZHRoKCksIHRlc3Qub3B0aW9ucygpLnZpZXdIZWlnaHQoKSk7CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdChQbGF0Zm9ybVdlYlZpZXcqIHZpZXcs
IGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewotICAgIHZpZXctPmNoYW5nZVdpbmRvd1Nj
YWxlSWZOZWVkZWQodGVzdC5vcHRpb25zKCkuZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHZpZXct
PmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQodGVzdC5vcHRpb25zKCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNv
bnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQpAQCAtMTc2Niw2ICsxNTY5LDEyIEBAIHN0YXRpYyBU
ZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCAKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZGllKGlucHV0TGluZSk7CiAgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQuYWJzb2x1dGVQ
YXRoLmVtcHR5KCkpIHsKKyAgICAgICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNp
b25zIGJldHdlZW4gYWxsIHRoZSBzdHJpbmcgdHlwZXMgYW5kIFVSTHMuCisgICAgICAgIHJlc3Vs
dC5hYnNvbHV0ZVBhdGggPSB0ZXN0UGF0aChhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVU
ZXN0VVJMKHJlc3VsdC5wYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKKyAgICB9CisKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNzg4LDcgKzE1OTcsNyBAQCBib29sIFRlc3RDb250cm9s
bGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqCiAgICAgaWYgKGNvbW1hbmQudGltZW91dCA+IDBfcykK
ICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRp
bWVvdXQpOwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0RHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXREdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0
aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSk7CiAKICAgICBwbGF0Zm9ybVdpbGxSdW5U
ZXN0KCptX2N1cnJlbnRJbnZvY2F0aW9uKTsKIApAQCAtMzAwMyw3ICsyODEyLDcgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAogCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25m
aWd1cmF0aW9uLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW9wdGlv
bnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vz
c2lvbigpKQogICAgICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShj
b25maWd1cmF0aW9uLCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsKIAogICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IFdLUGFnZUNvbmZpZ3VyYXRpb25HZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZp
Z3VyYXRpb24pOwpAQCAtMzgxOCw3ICszNjI3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVp
bml0aWFsaXplQXBwQm91bgogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlaW5pdGlhbGl6ZUFwcEJv
dW5kRG9tYWlucyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAotdm9p
ZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQordm9pZCBUZXN0Q29udHJvbGxlcjo6dXBk
YXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNhbGxiYWNrQ29udGV4
dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgp
LCB0b1dLKGJ1bmRsZUlkZW50aWZpZXIpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJp
dmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CkBAIC0zODMzLDggKzM2NDIsOSBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpjbGVhckJ1bmRsZUlkZW50aWZpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25z
JikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0Zl
YXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAog
eworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluamVjdFVzZXJT
Y3JpcHQoV0tTdHJpbmdSZWYpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyNjgxNTkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxX
ZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTEs
MTIgQEAgT0JKQ19DTEFTUyBXS1dlYlZpZXdDb25maWd1cmF0aW9uOwogCiBuYW1lc3BhY2UgV1RS
IHsKIAotY2xhc3MgVGVzdEludm9jYXRpb247CitjbGFzcyBFdmVudFNlbmRlclByb3h5OwogY2xh
c3MgT3JpZ2luU2V0dGluZ3M7CiBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7Ci1jbGFzcyBFdmVudFNl
bmRlclByb3h5OworY2xhc3MgVGVzdEludm9jYXRpb247CitjbGFzcyBUZXN0T3B0aW9uczsKIHN0
cnVjdCBUZXN0Q29tbWFuZDsKLXN0cnVjdCBUZXN0T3B0aW9uczsKIAogY2xhc3MgQXN5bmNUYXNr
IHsKIHB1YmxpYzoKQEAgLTkxLDExICs5Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBj
b25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3JpZXMoV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvblJlZik7CiAgICAgc3RhdGljIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHZpZXdXaWR0aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmlld0hlaWdodDsKLQotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB3M2NTVkdWaWV3V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHczY1NWR1ZpZXdIZWlnaHQ7CisgICAgc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRl
c3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKTsKIAogICAgIHN0YXRpYyBjb25zdCBXVEY6OlNl
Y29uZHMgZGVmYXVsdFNob3J0VGltZW91dDsKICAgICBzdGF0aWMgY29uc3QgV1RGOjpTZWNvbmRz
IG5vVGltZW91dDsKQEAgLTExNSwyMCArMTEyLDE1IEBAIHB1YmxpYzoKICAgICBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSgpOwogCiAgICAgRXZlbnRTZW5kZXJQcm94eSog
ZXZlbnRTZW5kZXJQcm94eSgpIHsgcmV0dXJuIG1fZXZlbnRTZW5kZXJQcm94eS5nZXQoKTsgfQot
Ci0gICAgYm9vbCBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFVzZVJlbW90ZUxheWVyVHJlZTsgfQogICAgIAogICAgIC8vIFJ1bnMgdGhlIHJ1biBsb29w
IHVudGlsIGBkb25lYCBpcyB0cnVlIG9yIHRoZSB0aW1lb3V0IGVsYXBzZXMuCiAgICAgYm9vbCB1
c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpIHsgcmV0dXJuIG1fdXNlV2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXI7IH0KICAgICB2b2lkIHJ1blVudGlsKGJvb2wmIGRvbmUsIFdURjo6U2Vjb25kcyB0
aW1lb3V0KTsKICAgICB2b2lkIG5vdGlmeURvbmUoKTsKIAotICAgIGJvb2wgc2hvdWxkU2hvd1dl
YlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNob3dXZWJWaWV3OyB9CiAgICAgYm9vbCB1
c2luZ1NlcnZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VzaW5nU2VydmVyTW9kZTsgfQogICAg
IHZvaWQgY29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKLSAgICAK
LSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTaG93
VG91Y2hlczsgfQotICAgIAorCiAgICAgYm9vbCBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWU7IH0KICAgICB2b2lkIHNldEJl
Zm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpIHsgbV9iZWZvcmVVbmxvYWRSZXR1cm5W
YWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTI3NSw3ICsyNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhckxvYWRlZFN1YnJlc291cmNlRG9tYWlucygpOwogICAgIHZvaWQgY2xlYXJBcHBCb3VuZFNl
c3Npb24oKTsKICAgICB2b2lkIHJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpOwotICAgIHZv
aWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdv
cmtQcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKICAgICB2b2lk
IGNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoKTsKIAogICAgIFdLQXJyYXlS
ZWYgb3BlblBhbmVsRmlsZVVSTHMoKSBjb25zdCB7IHJldHVybiBtX29wZW5QYW5lbEZpbGVVUkxz
LmdldCgpOyB9CkBAIC0zNjIsNyArMzU0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFdL
UmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRp
b24oY29uc3QgVGVzdE9wdGlvbnMmKTsKLSAgICBXS1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25z
OjpDb250ZXh0T3B0aW9ucyYpIGNvbnN0OworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZp
Z3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3QgQ29udGV4dE9w
dGlvbnMmKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIq
IGFyZ3ZbXSk7CiAgICAgdm9pZCBjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9w
dGlvbnMmKTsKICAgICB2b2lkIHJ1bigpOwpAQCAtMzgwLDcgKzM3Miw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKICAgICBXS0NvbnRleHRSZWYgcGxhdGZvcm1BZGp1
c3RDb250ZXh0KFdLQ29udGV4dFJlZiwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZik7CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFkZFRl
c3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZVdl
YlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICBz
dGF0aWMgUGxhdGZvcm1XZWJWaWV3KiBwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdl
YlZpZXcqIHBhcmVudFZpZXcsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRp
b25zJik7CiAgICAgdm9pZCBwbGF0Zm9ybVJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1
ZXMoKTsKQEAgLTM4OSw3ICszODAsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgY29jb2FQbGF0Zm9ybUluaXRpYWxpemUoKTsKICAgICB2b2lkIGNvY29hUmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYpOwotICAgIHZvaWQgc2V0
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IHN0ZDo6c3RyaW5nJik7CiAgICAgdm9p
ZCBjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllclRlc3RpbmdPdmVycmlkZSgpOwogI2Vu
ZGlmCiAgICAgdm9pZCBwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZv
Y2F0aW9uJik7CkBAIC00MDMsNyArMzk0LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZW5zdXJl
Vmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKICAgICBU
ZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsK
LSAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9w
dGlvbnMmLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKSBjb25zdDsKKyAgICBUZXN0RmVh
dHVyZXMgZ2xvYmFsRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNv
bnN0OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9y
bVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QoY29uc3QgVGVz
dEludm9jYXRpb24mKTsKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdChQbGF0Zm9y
bVdlYlZpZXcqLCBjb25zdCBUZXN0SW52b2NhdGlvbiYpOwpAQCAtNTM4LDggKzUzMSwxMCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9jcmVhdGVkT3RoZXJQYWdlIHsgZmFsc2UgfTsKICAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4gbV9wYXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4g
bV9hbGxvd2VkSG9zdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IG1faW50ZXJuYWxGZWF0
dXJlczsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gbV9leHBlcmltZW50YWxGZWF0dXJlczsK
KyAgICBUZXN0RmVhdHVyZXMgbV9nbG9iYWxGZWF0dXJlczsKKworICAgIHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbV9pbnRlcm5hbEZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbV9leHBlcmltZW50YWxGZWF0dXJlczsKIAog
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX2luamVjdGVkQnVuZGxlUGF0aDsKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbV90ZXN0UGx1Z2luRGlyZWN0b3J5OwpAQCAtNTQ4LDcg
KzU0Myw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1XZWJWaWV3
PiBtX21haW5XZWJWaWV3OwogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0
OwotICAgIE9wdGlvbmFsPFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9ucz4gbV9jb250ZXh0T3B0
aW9uczsKKyAgICBPcHRpb25hbDxDb250ZXh0T3B0aW9ucz4gbV9jb250ZXh0T3B0aW9uczsKICAg
ICBXS1JldGFpblB0cjxXS1BhZ2VHcm91cFJlZj4gbV9wYWdlR3JvdXA7CiAgICAgV0tSZXRhaW5Q
dHI8V0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWY+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwog
CkBAIC02MDUsMTQgKzYwMCwxMCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2ZvcmNlQ29tcGxl
eFRleHQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRVc2VSZW1vdGVMYXllclRyZWUgeyBmYWxzZSB9
OwotCisgICAgCiAgICAgYm9vbCBtX3Nob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRMb2dEb3dubG9hZENhbGxi
YWNrcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFj
a3MgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRTaG93V2ViVmlldyB7IGZhbHNlIH07Ci0g
ICAgCi0gICAgYm9vbCBtX3Nob3VsZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKICAgICBib29sIG1f
Y2hlY2tGb3JXb3JsZExlYWtzIHsgZmFsc2UgfTsKIAogICAgIGJvb2wgbV9hbGxvd0FueUhUVFBT
Q2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgeyBmYWxzZSB9OwpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzEsMTEgKzEzMSwxMSBAQCBib29sIFRlc3RJbnZvY2F0aW9uOjpzaG91bGRMb2dIaXN0b3J5Q2xp
CiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBUZXN0SW52b2NhdGlvbjo6Y3Jl
YXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7CiAgICAgYXV0byBiZWdpblRlc3RNZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICBzZXRWYWx1
ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCku
dXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHks
ICJVc2VGbGV4aWJsZVZpZXdwb3J0Iiwgb3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQoKSk7
CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1w
UGl4ZWxzKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7CiAgICAgc2V0
VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBt
X2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7Ci0gICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2Fn
ZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RN
ZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgb3B0aW9ucygpLmFk
ZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCkuY19zdHIoKSk7CiAgICAgcmV0dXJuIGJlZ2lu
VGVzdE1lc3NhZ2VCb2R5OwogfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRp
b25zLmNwcAkocmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDM0ICsyNiwzNjIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0T3B0aW9ucy5oIgogCisjaW5jbHVkZSAiU3RyaW5n
RnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxmc3Ry
ZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkRmlsZXN5c3RlbS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjZGVmaW5lIERVTVBfRkVBVFVSRVMgMAorCiBuYW1l
c3BhY2UgV1RSIHsKIAotc3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKKyNpZiBEVU1QX0ZFQVRVUkVTCitz
dGF0aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29uc3QgVGVzdEZlYXR1cmVzJiBmZWF0dXJlcykKIHsK
LSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHBhdGguY29u
dGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KKyAgICBpZiAoZmVhdHVyZXMu
ZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJl
cy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5
KCkgJiYgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBz
dGQ6OmNlcnIgPDwgIiAgW0VNUFRZXVxuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoIWZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAg
ICAgc3RkOjpjZXJyIDw8ICIgIEV4cGVyaW1lbnRhbCBGZWF0dXJlczogXG4iOworICAgICAgICBm
b3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisg
ICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8
ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVt
cHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEludGVybmFsIEZlYXR1cmVzOiBcbiI7
CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5pbnRlcm5hbERlYnVn
RmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAi
IDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuYm9vbEZlYXR1cmVz
LmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEJvb2wgRmVhdHVyZXM6IFxuIjsK
KyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmJvb2xGZWF0dXJlcykK
KyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUg
PDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgp
KSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBEb3VibGUgRmVhdHVyZXM6IFxuIjsKKyAgICAg
ICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKQorICAg
ICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAn
XG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkpIHsK
KyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmluZyBGZWF0dXJlczogXG4iOworICAgICAgICBm
b3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpCisgICAgICAg
ICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7
CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkg
eworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIFZlY3RvciBGZWF0dXJlczogXG4iOwor
ICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVh
dHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiBOdW1i
ZXIgb2Ygc3RyaW5ncyAiIDw8IHZhbHVlLnNpemUoKSA8PCAnXG4nOworICAgIH0KIH0KKyNlbmRp
ZgogCi1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKQordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0
dXJlcyBhZGRpdGlvbmFsKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAi
dmlld3BvcnQvIikgJiYgIXBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aXN1YWwtdmlld3BvcnQv
Iik7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzdGQ6OnVub3JkZXJlZF9tYXA6Om1l
cmdlIHdoZW4gaXQgaXMgYXZhaWxhYmxlIGZvciBhbGwgcG9ydHMuCisKKyAgICBmb3IgKGF1dG8g
W2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5leHBlcmltZW50YWxGZWF0dXJlcykKKyAgICAgICAg
YmFzZS5leHBlcmltZW50YWxGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwor
ICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmludGVybmFsRGVidWdGZWF0
dXJlcykKKyAgICAgICAgYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2ln
bihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5i
b29sRmVhdHVyZXMpCisgICAgICAgIGJhc2UuYm9vbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24o
a2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZG91
YmxlRmVhdHVyZXMpCisgICAgICAgIGJhc2UuZG91YmxlRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2ln
bihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5z
dHJpbmdGZWF0dXJlcykKKyAgICAgICAgYmFzZS5zdHJpbmdGZWF0dXJlcy5pbnNlcnRfb3JfYXNz
aWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFs
LnN0cmluZ1ZlY3RvckZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ1ZlY3RvckZlYXR1cmVz
Lmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdGQ6OnVu
b3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sRGVmYXVsdHNNYXAoKQoreworICAg
IHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1hcCB7CisgICAg
ICAgIHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlQWNj
ZWxlcmF0ZWREcmF3aW5nIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJUcmVl
IiwgZmFsc2UgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1dlYlZpZXciLCBmYWxzZSB9LAorICAg
ICAgICB7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlRGF0
YURldGVjdGlvbiIsIGZhbHNlIH0sCisgICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJzIiwgdHJ1
ZSB9LAorICAgICAgICB7ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIGZhbHNlIH0sCisgICAg
ICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgZmFsc2UgfSwKKyAgICAgICAgeyAi
dXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBmYWxzZSB9LAorICAgICAgICB7ICJl
bmFibGVBdHRhY2htZW50RWxlbWVudCIsIGZhbHNlIH0sCisgICAgICAgIHsgImVuYWJsZUludGVy
c2VjdGlvbk9ic2VydmVyIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlRXBoZW1lcmFsU2Vzc2lv
biIsIGZhbHNlIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIGZhbHNlIH0s
CisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBmYWxzZSB9LAorICAgICAgICB7ICJl
bmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgdHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVQb2lu
dGVyTG9jayIsIGZhbHNlIH0sCisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwg
dHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGlj
YXRvciIsIHRydWUgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgZmFs
c2UgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBmYWxzZSB9LAorICAgICAgICB7
ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBmYWxzZSB9LAorICAgICAgICB7ICJhbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlIH0sCisgICAg
ICAgIHsgImRvbVBhc3RlQWxsb3dlZCIsIHRydWUgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JG
aWx0ZXIiLCBmYWxzZSB9LAorICAgICAgICB7ICJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRh
cmtNb2RlIiwgZmFsc2UgfSwKKyAgICAgICAgeyAicnVuU2luZ2x5IiwgZmFsc2UgfSwKKyAgICAg
ICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgZmFsc2UgfSwKKyAgICAgICAgeyAic2hvdWxkSWdu
b3JlTWV0YVZpZXdwb3J0IiwgZmFsc2UgfSwKKyAgICAgICAgeyAic3BlbGxDaGVja2luZ0RvdHMi
LCBmYWxzZSB9LAorICAgICAgICB7ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBmYWxzZSB9LAor
ICAgICAgICB7ICJlZGl0YWJsZSIsIGZhbHNlIH0sCisgICAgICAgIHsgInNob3VsZEhhbmRsZVJ1
bk9wZW5QYW5lbCIsIHRydWUgfSwKKyAgICAgICAgeyAic2hvdWxkUHJlc2VudFBvcG92ZXJzIiwg
dHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVBcHBOYXAiLCBmYWxzZSB9LAorICAgICAgICB7ICJl
bmFibGVCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UgfSwKKyAgICAgICAgeyAiYWxsb3dzTGlua1By
ZXZpZXciLCB0cnVlIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNz
IiwgZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIiwg
ZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBmYWxz
ZSB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBmYWxzZSB9
LAorICAgICAgICB7ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSB9LAorICAg
ICAgICB7ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IiwgZmFsc2UgfSwKKyAgICAgICAgeyAi
aXNBcHBCb3VuZFdlYlZpZXciLCBmYWxzZSB9LAorICAgICAgICB7ICJpZ25vcmVTeW5jaHJvbm91
c01lc3NhZ2luZ1RpbWVvdXRzIiwgZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24iLCB0cnVlIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25X
aW5kb3dPcGVuIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNob3J0VGlt
ZW91dCIsIGZhbHNlIH0KKyAgICB9OworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGRvdWJsZT4mIGRvdWJsZURlZmF1bHRz
TWFwKCkKK3sKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3Vi
bGU+IG1hcCB7CisgICAgICAgIHsgImNvbnRlbnRJbnNldC50b3AiLCAwIH0sCisgICAgICAgIHsg
ImRldmljZVNjYWxlRmFjdG9yIiwgMSB9LAorICAgICAgICB7ICJ2aWV3V2lkdGgiLCA4MDAgfSwK
KyAgICAgICAgeyAidmlld0hlaWdodCIsIDYwMCB9CisgICAgfTsKKyAgICByZXR1cm4gbWFwOwor
fQorCitzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0
cmluZz4mIHN0cmluZ0RlZmF1bHRzTWFwKCkKK3sKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gbWFwIHsKKyAgICAgICAgeyAiYXBwbGljYXRp
b25NYW5pZmVzdCIsIHsgfSB9LAorICAgICAgICB7ICJqc2NPcHRpb25zIiwgeyB9IH0sCisgICAg
ICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgeyB9IH0sCisgICAgICAgIHsg
InN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIHsgfSB9LAorICAgICAgICB7ICJjb250ZW50
TW9kZSIsIHsgfSB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiLCB7
IH0gfQorICAgIH07CisgICAgcmV0dXJuIG1hcDsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkVXNl
Rml4ZWRMYXlvdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBjb25zdCBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4m
IHN0cmluZ1ZlY3RvckRlZmF1bHRzTWFwKCkKIHsKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQotICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiZGV2aWNlLWFkYXB0LyIp
IHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHRcXCIpKQorICAgIHN0YXRp
YyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
Pj4gbWFwIHsKKyAgICAgICAgeyAibGFuZ3VhZ2UiLCB7IH0gfQorICAgIH07CisgICAgcmV0dXJu
IG1hcDsKK30KKworZW51bSBjbGFzcyBLZXlUeXBlIDogdWludDhfdCB7CisgICAgQm9vbCwKKyAg
ICBEb3VibGUsCisgICAgU3RyaW5nLAorICAgIFN0cmluZ1JlbGF0aXZlUGF0aCwKKyAgICBTdHJp
bmdVUkwsCisgICAgU3RyaW5nVmVjdG9yLAorICAgIFVua25vd24KK307CisKK3N0YXRpYyBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIEtleVR5cGU+JiBrZXlUeXBlTWFwKCkK
K3sKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBLZXlUeXBlPiBt
YXAgeworICAgICAgICB7ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
InNob3VsZFNob3dXZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VGbGV4
aWJsZVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VEYXRhRGV0ZWN0
aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VNb2NrU2Nyb2xsYmFycyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0
eSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVy
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNZW51SXRlbUVsZW1lbnQiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZVBvaW50ZXJMb2NrIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRvbVBhc3RlQWxsb3dlZCIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0ZXIiLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
InNwZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVT
ZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVkaXRhYmxlIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiLCBL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFByZXNlbnRQb3BvdmVycyIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAi
ZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNob3J0VGltZW91
dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAgeyAiY29udGVudEluc2V0LnRvcCIs
IEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZpY2VTY2FsZUZhY3RvciIsIEtleVR5
cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJ2aWV3V2lkdGgiLCBLZXlUeXBlOjpEb3VibGUgfSwK
KyAgICAgICAgeyAidmlld0hlaWdodCIsIEtleVR5cGU6OkRvdWJsZSB9LAorCisgICAgICAgIHsg
ImpzY09wdGlvbnMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiY29udGVu
dE1vZGUiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uTWFu
aWZlc3QiLCBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGggfSwKKyAgICAgICAgeyAic3RhbmRh
bG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgS2V5VHlwZTo6U3RyaW5nVVJMIH0sCisKKyAgICAgICAg
eyAibGFuZ3VhZ2UiLCBLZXlUeXBlOjpTdHJpbmdWZWN0b3IgfSwKKyAgICB9OworCisgICAgcmV0
dXJuIG1hcDsKK30KKworc3RhdGljIEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCit7
CisgICAgYXV0byBtYXAgPSBrZXlUeXBlTWFwKCk7CisgICAgYXV0byBpdCA9IG1hcC5maW5kKGtl
eSk7CisgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEtleVR5cGU6OlVu
a25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09ICJ0cnVlIikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKKyAgICBpZiAo
dmFsdWUgPT0gImZhbHNlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX0VSUk9S
KCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3Rl
ZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2YWx1ZS5jX3N0cigpKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBib29sIGlzU1ZHVGVzdFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCkKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVs
YXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBh
dGhPclVSTCkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0Mt
U1ZHLTEuMSIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdcXFczQy1TVkctMS4xIik7
CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVS
TChwYXRoT3JVUkwuY19zdHIoKSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdL
VVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOworICAg
IHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7
Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJM
KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhX
S1VSTENvcHlTdHJpbmcoVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIo
KSkpKSk7Cit9CisKK3N0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6Zmls
ZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAg
IFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBpZiAoIXN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3Rz
KHBhdGgpKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisKKyAgICBzdGQ6Omlmc3RyZWFtIGZp
bGUocGF0aCk7CisgICAgaWYgKCFmaWxlLmdvb2QoKSkgeworICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBvcGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0IGhlYWRlcnMgaW4gJXMiLCBwYXRoLmNf
c3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorCisgICAgc3RkOjpzdHJp
bmcgb3B0aW9uczsKKyAgICBnZXRsaW5lKGZpbGUsIG9wdGlvbnMpOworICAgIHN0ZDo6c3RyaW5n
IGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAiKTsKKyAgICBzdGQ6OnN0cmluZyBl
bmRTdHJpbmcoIiBdIik7CisgICAgc2l6ZV90IGJlZ2luTG9jYXRpb24gPSBvcHRpb25zLmZpbmQo
YmVnaW5TdHJpbmcpOworICAgIGlmIChiZWdpbkxvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9z
KQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgc2l6ZV90IGVuZExvY2F0aW9uID0gb3B0
aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlvbik7CisgICAgaWYgKGVuZExvY2F0aW9u
ID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGZp
bmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0
dXJuIGZlYXR1cmVzOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9u
cy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24g
LSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSkpOworICAgIHNpemVfdCBwYWly
U3RhcnQgPSAwOworICAgIHdoaWxlIChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgewor
ICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7
CisgICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAg
cGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOworICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRp
b24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3RhcnQpOworICAgICAgICBpZiAoZXF1YWxz
TG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
TWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJh
Y3RlcikgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFs
c0xvY2F0aW9uIC0gcGFpclN0YXJ0KTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcu
c3Vic3RyKGVxdWFsc0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEp
KTsKKworICAgICAgICBpZiAoa2V5LnJmaW5kKCJleHBlcmltZW50YWw6IikgPT0gMCkgeworICAg
ICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7CisgICAgICAgICAgICBmZWF0dXJlcy5leHBl
cmltZW50YWxGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5LnJmaW5kKCJpbnRlcm5hbDoiKSA9
PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDkpOworICAgICAgICAgICAgZmVh
dHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoa2V5
VHlwZShrZXkpKSB7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6Qm9vbDoKKyAgICAgICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBl
OjpEb3VibGU6CisgICAgICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyBr
ZXksIHN0ZDo6c3RvZCh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBLZXlUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5p
bnNlcnQoeyBrZXksIHZhbHVlIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
S2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5n
RmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRp
dmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgS2V5VHlwZTo6U3RyaW5nVVJMOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVh
dHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVl
KSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1Zl
Y3RvcjoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmluc2VydCh7
IGtleSwgc3BsaXQodmFsdWUsICcsJykgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBLZXlUeXBlOjpVbmtub3duOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGtl
eSwgJyVzLCBpbiB0ZXN0IGhlYWRlciBpbiAlcyIsIGtleS5jX3N0cigpLCBwYXRoLmNfc3RyKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwYWlyU3RhcnQgPSBw
YWlyRW5kICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBi
b29sIHBhdGhDb250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFy
KiBzdWJzdHJpbmcpCit7CisgICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOworICAg
IHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7IC8vIENhc2UtaW5zZW5zaXRpdmUuCit9
CisKK3N0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2
aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3cG9ydC8i
KTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQpAQCAtNjEsMTMgKzM4OSwyMCBAQCBzdGF0aWMgYm9vbCBzaG91
bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvCiAgICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwogfQogCi1zdGF0aWMg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JV
UkwpCitzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVW
aWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7
CisgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQorICAgICAgICByZXR1
cm4geyB7IDQ4MCwgMzYwIH0gfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitzdGF0
aWMgT3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewogICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9y
VVJMLCAiL2hpZHBpLTN4LSIpKQogICAgICAgICByZXR1cm4gMzsKICAgICBpZiAocGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgIi9oaWRwaS0iKSkKICAgICAgICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJu
IDE7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkRHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCkBAIC04
MywxNCArNDE4LDEwMSBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRF
CiAgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJz
b2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNv
Y2tldHMiKTsKIH0KIAotVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwpCi0gICAgOiB1c2VGbGV4aWJsZVZpZXdwb3J0KHNob3VsZE1ha2VWaWV3cG9y
dEZsZXhpYmxlKHBhdGhPclVSTCkpCi0gICAgLCB1c2VGaXhlZExheW91dChzaG91bGRVc2VGaXhl
ZExheW91dChwYXRoT3JVUkwpKQotICAgICwgaXNTVkdUZXN0KGlzU1ZHVGVzdFBhdGgocGF0aE9y
VVJMKSkKLSAgICAsIHVzZUVwaGVtZXJhbFNlc3Npb24oc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lv
bihwYXRoT3JVUkwpKQotICAgICwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKHNob3VsZER1bXBK
U0NvbnNvbGVMb2dJblN0ZEVycihwYXRoT3JVUkwpKQotICAgICwgZGV2aWNlU2NhbGVGYWN0b3Io
ZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KHBhdGhPclVSTCkpCitUZXN0RmVhdHVyZXMgaGFyZGNv
ZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQp
Cit7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworCisgICAgaWYgKHNob3VsZE1ha2VWaWV3
cG9ydEZsZXhpYmxlKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgdHJ1ZSB9KTsKKyAgICBpZiAo
c2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRydWUg
fSk7CisgICAgaWYgKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhP
clVSTCkpCisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgdHJ1ZSB9KTsKKyAgICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3Rv
ciA9IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsg
ZGV2aWNlU2NhbGVGYWN0b3IgIT0gV1RGOjpudWxsb3B0KQorICAgICAgICBmZWF0dXJlcy5kb3Vi
bGVGZWF0dXJlcy5pbnNlcnQoeyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBkZXZpY2VTY2FsZUZhY3Rv
ci52YWx1ZSgpIH0pOworICAgIGlmIChhdXRvIHZpZXdXaWR0aEFuZEhlaWdodCA9IG92ZXJyaWRl
Vmlld1dpZHRoQW5kSGVpZ2h0Rm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IHZpZXdXaWR0aEFu
ZEhlaWdodCAhPSBXVEY6Om51bGxvcHQpIHsKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVy
ZXMuaW5zZXJ0KHsgInZpZXdXaWR0aCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+Zmlyc3QgfSk7Cisg
ICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3SGVpZ2h0Iiwgdmll
d1dpZHRoQW5kSGVpZ2h0LT5zZWNvbmQgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVz
OworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQoreworICAgIHJldHVybiBwYXJzZVRlc3RIZWFk
ZXIoY29tbWFuZC5hYnNvbHV0ZVBhdGgsIGNvbW1hbmQucGF0aE9yVVJMKTsKK30KKworVGVzdE9w
dGlvbnM6OlRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyBmZWF0dXJlcykKKyAgICA6IG1fZmVhdHVy
ZXMgeyBmZWF0dXJlcyB9Cit7CisjaWYgRFVNUF9GRUFUVVJFUworICAgIHN0ZDo6Y2VyciA8PCAi
RFVNUElORyBGRUFUVVJFU1xuIjsKKyAgICBkdW1wRmVhdHVyZXMobV9mZWF0dXJlcyk7CisjZW5k
aWYKK30KKworYm9vbCBUZXN0T3B0aW9uczo6aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK3sKKyAgICBpZiAobV9mZWF0dXJlcy5l
eHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVh
dHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJl
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIFtrZXksIGtleVR5cGVd
IDoga2V5VHlwZU1hcCgpKSB7CisgICAgICAgIHN3aXRjaCAoa2V5VHlwZSkgeworICAgICAgICBj
YXNlIEtleVR5cGU6OkJvb2w6CisgICAgICAgICAgICBpZiAoYm9vbEZlYXR1cmVWYWx1ZShrZXkp
ICE9IG9wdGlvbnMuYm9vbEZlYXR1cmVWYWx1ZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OkRvdWJs
ZToKKyAgICAgICAgICAgIGlmIChkb3VibGVGZWF0dXJlVmFsdWUoa2V5KSAhPSBvcHRpb25zLmRv
dWJsZUZlYXR1cmVWYWx1ZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKKyAgICAgICAg
Y2FzZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAgIGNhc2UgS2V5VHlwZTo6
U3RyaW5nVVJMOgorICAgICAgICAgICAgaWYgKHN0cmluZ0ZlYXR1cmVWYWx1ZShrZXkpICE9IG9w
dGlvbnMuc3RyaW5nRmVhdHVyZVZhbHVlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVmVj
dG9yOgorICAgICAgICAgICAgaWYgKHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZShrZXkpICE9IG9w
dGlvbnMuc3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6VW5r
bm93bjoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBmZWF0dXJl
VmFsdWUoc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFQ+JiBtYXAsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVD4mIGRl
ZmF1bHRzTWFwKQoreworICAgIGF1dG8gaXQgPSBtYXAuZmluZChrZXkpOworICAgIGlmIChpdCAh
PSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIAorICAgIGF1dG8g
ZGVmYXVsdHNNYXBJdCA9IGRlZmF1bHRzTWFwLmZpbmQoa2V5KTsKKyAgICBBU1NFUlQoZGVmYXVs
dHNNYXBJdCAhPSBkZWZhdWx0c01hcC5lbmQoKSk7CisgICAgcmV0dXJuIGRlZmF1bHRzTWFwSXQt
PnNlY29uZDsKK30KKworYm9vbCBUZXN0T3B0aW9uczo6Ym9vbEZlYXR1cmVWYWx1ZShzdGQ6OnN0
cmluZyBrZXkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIG1fZmVhdHVy
ZXMuYm9vbEZlYXR1cmVzLCBib29sRGVmYXVsdHNNYXAoKSk7Cit9Citkb3VibGUgVGVzdE9wdGlv
bnM6OmRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXkpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZlYXR1cmVWYWx1ZShrZXksIG1fZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMsIGRvdWJsZURl
ZmF1bHRzTWFwKCkpOworfQorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ0ZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShr
ZXksIG1fZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMsIHN0cmluZ0RlZmF1bHRzTWFwKCkpOworfQor
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFRlc3RPcHRpb25zOjpzdHJpbmdWZWN0b3JGZWF0dXJl
VmFsdWUoc3RkOjpzdHJpbmcga2V5KSBjb25zdAogeworICAgIHJldHVybiBmZWF0dXJlVmFsdWUo
a2V5LCBtX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLCBzdHJpbmdWZWN0b3JEZWZhdWx0
c01hcCgpKTsKIH0KIAogfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAko
cmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNjUgKzI1LDE0MCBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdHJ1
Y3QgVGVzdE9wdGlvbnMgewotICAgIHN0cnVjdCBDb250ZXh0T3B0aW9ucyB7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOwotICAgICAgICBib29sIGlnbm9yZVN5bmNo
cm9ub3VzTWVzc2FnaW5nVGltZW91dHMgeyBmYWxzZSB9OwotICAgICAgICBib29sIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIHsgdHJ1ZSB9OwotICAgICAgICBib29sIGVuYWJsZVByb2Nl
c3NTd2FwT25XaW5kb3dPcGVuIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCB1c2VTZXJ2aWNlV29y
a2VyU2hvcnRUaW1lb3V0IHsgZmFsc2UgfTsKLQotICAgICAgICBib29sIGhhc1NhbWVJbml0aWFs
aXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRz
ICE9IG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cwotICAgICAgICAg
ICAgICAgIHx8IG92ZXJyaWRlTGFuZ3VhZ2VzICE9IG9wdGlvbnMub3ZlcnJpZGVMYW5ndWFnZXMK
LSAgICAgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRp
b25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uCi0gICAgICAgICAgICAgICAgfHwgZW5h
YmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9u
V2luZG93T3BlbgotICAgICAgICAgICAgICAgIHx8IHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVv
dXQgIT0gb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBzaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBib29sIHVzZVRocmVhZGVkU2Nyb2xsaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIHVz
ZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VSZW1vdGVMYXllclRy
ZWUgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcgeyBmYWxzZSB9OwotICAg
IGJvb2wgdXNlRmxleGlibGVWaWV3cG9ydCB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VGaXhlZExh
eW91dCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc1NWR1Rlc3QgeyBmYWxzZSB9OwotICAgIGJvb2wg
dXNlRGF0YURldGVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VNb2NrU2Nyb2xsYmFycyB7
IHRydWUgfTsKLSAgICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIHsgZmFsc2UgfTsKLSAg
ICBib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIHsgZmFsc2UgfTsKLSAgICBib29sIHVz
ZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUF0dGFjaG1lbnRFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUludGVyc2VjdGlv
bk9ic2VydmVyIHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxz
ZSB9OwotICAgIGJvb2wgZW5hYmxlTWVudUl0ZW1FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29s
IGVuYWJsZUtleWdlbkVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlTW9kZXJuTWVk
aWFDb250cm9scyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZVBvaW50ZXJMb2NrIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIHsgdHJ1ZSB9OwotICAgIGJvb2wg
ZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgeyB0cnVlIH07Ci0gICAg
Ym9vbCBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxk
U2hvd1RvdWNoZXMgeyBmYWxzZSB9OwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
IHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0Zv
ckNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKLSAgICBib29sIGRvbVBhc3RlQWxsb3dlZCB7IHRydWUg
fTsKLSAgICBib29sIGVuYWJsZUNvbG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIHB1bmNo
T3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgeyBmYWxzZSB9OwotICAgIGJvb2wgcnVuU2lu
Z2x5IHsgZmFsc2UgfTsKLSAgICBib29sIGNoZWNrRm9yV29ybGRMZWFrcyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hv
dWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVNlcnZp
Y2VDb250cm9scyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlZGl0YWJsZSB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgeyB0cnVlIH07Ci0gICAgYm9vbCBzaG91bGRQ
cmVzZW50UG9wb3ZlcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVBcHBOYXAgeyBmYWxzZSB9
OwotICAgIGJvb2wgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBh
bGxvd3NMaW5rUHJldmlldyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0lu
VUlQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJv
Y2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MgeyBmYWxz
ZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyB7IHRydWUgfTsKLSAg
ICBib29sIGVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNB
cHBCb3VuZFdlYlZpZXcgeyBmYWxzZSB9OwotCi0gICAgZG91YmxlIGNvbnRlbnRJbnNldFRvcCB7
IDAgfTsKLQotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yIHsgMSB9OwotICAgIHN0ZDo6c3Ry
aW5nIGFwcGxpY2F0aW9uTWFuaWZlc3Q7Ci0gICAgc3RkOjpzdHJpbmcganNjT3B0aW9uczsKLSAg
ICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlczsKLSAgICBzdGQ6OnN0
cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkw7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBpbnRl
cm5hbERlYnVnRmVhdHVyZXM7Ci0gICAgU3RyaW5nIGNvbnRlbnRNb2RlOwotICAgIFN0cmluZyBh
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI7Ci0gICAgCi0gICAgQ29udGV4dE9wdGlvbnMgY29u
dGV4dE9wdGlvbnM7Ci0KLSAgICBUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMKTsKLQotICAgIC8vIEFkZCBoZXJlIG9wdGlvbnMgdGhhdCBjYW4gb25seSBiZSBzZXQgdXBv
biBQbGF0Zm9ybVdlYlZpZXcKLSAgICAvLyBpbml0aWFsaXphdGlvbiBhbmQgbWFrZSBzdXJlIGl0
J3MgdXAgdG8gZGF0ZSB3aGVuIGFkZGluZyBuZXcKLSAgICAvLyBvcHRpb25zIHRvIHRoaXMgc3Ry
dWN0LiBPdGhlcndpc2UsIHRlc3RzIHVzaW5nIHRob3NlIG9wdGlvbnMKLSAgICAvLyBtaWdodCBm
YWlsIGlmIFdUUiBpcyByZXVzaW5nIGFuIGV4aXN0aW5nIFBsYXRmb3JtV2ViVmlldy4KLSAgICBi
b29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxpbmcgIT0gb3B0
aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNjZWxlcmF0ZWRE
cmF3aW5nICE9IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAgICAgICB8fCB1
c2VNb2NrU2Nyb2xsYmFycyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0gICAgICAgICAg
ICB8fCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzCi0gICAgICAgICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSAh
PSBvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAgICAgICAgICB8
fCBlbmFibGVBdHRhY2htZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAhPSBvcHRpb25z
LmVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VFcGhlbWVyYWxT
ZXNzaW9uICE9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAgICAgfHwgZW5h
YmxlTWVudUl0ZW1FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50Ci0gICAg
ICAgICAgICB8fCBlbmFibGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxl
bWVudAotICAgICAgICAgICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAhPSBvcHRpb25z
LmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVBvaW50ZXJM
b2NrICE9IG9wdGlvbnMuZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8IGVuYWJsZVdl
YkF1dGhlbnRpY2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24KLSAgICAg
ICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yICE9IG9w
dGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IKLSAgICAgICAg
ICAgIHx8IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucwotICAgICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyICE9IG9w
dGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlv
bk1hbmlmZXN0ICE9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAgICAgICAgfHwg
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgIT0gb3B0aW9u
cy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscwotICAgICAg
ICAgICAgfHwgZG9tUGFzdGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkCi0gICAg
ICAgICAgICB8fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVy
Ci0gICAgICAgICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9IG9w
dGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAgICAgICAgfHwg
anNjT3B0aW9ucyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IGFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMKLSAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQotICAg
ICAgICAgICAgfHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExl
YWtzCi0gICAgICAgICAgICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgIT0gb3B0aW9u
cy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVNlcnZp
Y2VDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAgICAgICAgICAg
fHwgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdub3JlTWV0YVZp
ZXdwb3J0Ci0gICAgICAgICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRhYmxlCi0gICAg
ICAgICAgICB8fCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5zaG91bGRIYW5k
bGVSdW5PcGVuUGFuZWwKLSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3BvdmVycyAhPSBv
cHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29udGVudEluc2V0
VG9wICE9IG9wdGlvbnMuY29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBjb250ZW50TW9k
ZSAhPSBvcHRpb25zLmNvbnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIKLSAgICAg
ICAgICAgIHx8IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAgICAg
ICAgfHwgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGUKLSAgICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlvbnMuYWxsb3dz
TGlua1ByZXZpZXcKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNz
ICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8
IGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVBy
b2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcwotICAgICAgICAg
ICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5hdmlnYXRpb25U
b0RhdGFVUkxzICE9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcwotICAgICAg
ICAgICAgfHwgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kKLSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TCAhPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAgICAgICAgfHwg
aXNBcHBCb3VuZFdlYlZpZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKK3N0cnVjdCBUZXN0Q29tbWFuZDsKIAotICAgICAgICBpZiAoIWNv
bnRleHRPcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0
T3B0aW9ucykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CitzdHJ1Y3QgVGVzdEZlYXR1cmVz
IHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRh
bEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
Ym9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
ZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVy
ZXM7Cit9OwogCi0gICAgICAgIGlmIChleHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLmV4
cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwordm9pZCBtZXJn
ZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKIAotICAgICAg
ICBpZiAoaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZl
YXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CitUZXN0RmVhdHVy
ZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5k
Jik7CisKK3N0cnVjdCBDb250ZXh0T3B0aW9ucyB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOworICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdp
bmdUaW1lb3V0czsKKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uOworICAg
IGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47CisgICAgYm9vbCB1c2VTZXJ2aWNl
V29ya2VyU2hvcnRUaW1lb3V0OwogCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRp
b25zKGNvbnN0IENvbnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1
YWdlcyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8fCBlbmFibGVQ
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBv
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAgICB8fCB1c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQorCisgICAgYm9vbCBzaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRp
b24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47CisgICAgfQorfTsKKworY2xhc3Mg
VGVzdE9wdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0
dXJlcyk7CisKKyAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9ucygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb3ZlcnJpZGVMYW5ndWFnZXMoKSwKKyAg
ICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMoKSwKKyAgICAgICAg
ICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCksCisgICAgICAgICAgICBlbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAgICAgICAgdXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQorCisgICAgYm9vbCB1c2VUaHJlYWRlZFNj
cm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVRocmVhZGVkU2Ny
b2xsaW5nIik7IH0KKyAgICBib29sIHVzZUFjY2VsZXJhdGVkRHJhd2luZygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpOyB9CisgICAgYm9v
bCB1c2VSZW1vdGVMYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1
c2VSZW1vdGVMYXllclRyZWUiKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93V2ViVmlldyIpOyB9CisgICAg
Ym9vbCB1c2VGbGV4aWJsZVZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1
ZSgidXNlRmxleGlibGVWaWV3cG9ydCIpOyB9CisgICAgYm9vbCB1c2VEYXRhRGV0ZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRGF0YURldGVjdGlvbiIpOyB9Cisg
ICAgYm9vbCB1c2VNb2NrU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoInVzZU1vY2tTY3JvbGxiYXJzIik7IH0KKyAgICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVp
cmtzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgibmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MiKTsgfQorICAgIGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpOyB9
CisgICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Iik7
IH0KKyAgICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiKTsgfQorICAgIGJvb2wgZW5h
YmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIpOyB9CisgICAgYm9vbCB1c2VFcGhlbWVyYWxT
ZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRXBoZW1lcmFsU2Vz
c2lvbiIpOyB9CisgICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVNZW51SXRlbUVsZW1lbnQiKTsgfQorICAgIGJvb2wg
ZW5hYmxlS2V5Z2VuRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVu
YWJsZUtleWdlbkVsZW1lbnQiKTsgfQorICAgIGJvb2wgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9s
cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMiKTsgfQorICAgIGJvb2wgZW5hYmxlUG9pbnRlckxvY2soKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJlbmFibGVQb2ludGVyTG9jayIpOyB9CisgICAgYm9vbCBlbmFibGVX
ZWJBdXRoZW50aWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uIik7IH0KKyAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9u
TG9jYWxBdXRoZW50aWNhdG9yKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5h
YmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiKTsgfQorICAgIGJvb2wgZW5h
YmxlSW5zcGVjdG9yQWRkaXRpb25zKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
ZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIik7IH0KKyAgICBib29sIHNob3VsZFNob3dUb3VjaGVz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1RvdWNoZXMiKTsg
fQorICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIik7IH0KKyAgICBib29sIGFs
bG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMiKTsgfQorICAgIGJvb2wgZG9tUGFzdGVBbGxvd2VkKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZG9tUGFzdGVBbGxvd2VkIik7IH0KKyAgICBib29sIGVu
YWJsZUNvbG9yRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
Q29sb3JGaWx0ZXIiKTsgfQorICAgIGJvb2wgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJr
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInB1bmNoT3V0V2hpdGVCYWNr
Z3JvdW5kc0luRGFya01vZGUiKTsgfQorICAgIGJvb2wgcnVuU2luZ2x5KCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgicnVuU2luZ2x5Iik7IH0KKyAgICBib29sIGNoZWNrRm9yV29y
bGRMZWFrcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImNoZWNrRm9yV29ybGRM
ZWFrcyIpOyB9CisgICAgYm9vbCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQoKSBjb25zdCB7IHJl
dHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiKTsgfQorICAg
IGJvb2wgc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgic3BlbGxDaGVja2luZ0RvdHMiKTsgfQorICAgIGJvb2wgZW5hYmxlU2Vydmlj
ZUNvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlU2Vydmlj
ZUNvbnRyb2xzIik7IH0KKyAgICBib29sIGVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgiZWRpdGFibGUiKTsgfQorICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBh
bmVsKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkSGFuZGxlUnVuT3Bl
blBhbmVsIik7IH0KKyAgICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVycygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFByZXNlbnRQb3BvdmVycyIpOyB9CisgICAgYm9v
bCBlbmFibGVBcHBOYXAoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVB
cHBOYXAiKTsgfQorICAgIGJvb2wgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKTsgfQorICAgIGJv
b2wgYWxsb3dzTGlua1ByZXZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJh
bGxvd3NMaW5rUHJldmlldyIpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRl
b0luVUlQcm9jZXNzIik7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vz
cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRlb0lu
R1BVUHJvY2VzcyIpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQ
cm9jZXNzIik7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcygpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcyIpOyB9CisgICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIp
OyB9CisgICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkgY29uc3QgeyByZXR1cm4g
Ym9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIpOyB9CisgICAgYm9v
bCBpc0FwcEJvdW5kV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlz
QXBwQm91bmRXZWJWaWV3Iik7IH0KKyAgICBib29sIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5n
VGltZW91dHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVTeW5jaHJv
bm91c01lc3NhZ2luZ1RpbWVvdXRzIik7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24iKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRv
d09wZW4oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9jZXNzU3dh
cE9uV2luZG93T3BlbiIpOyB9CisgICAgYm9vbCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCIpOyB9CisgICAgZG91YmxlIGNvbnRlbnRJbnNldFRvcCgpIGNvbnN0IHsgcmV0dXJu
IGRvdWJsZUZlYXR1cmVWYWx1ZSgiY29udGVudEluc2V0LnRvcCIpOyB9CisgICAgZG91YmxlIGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJkZXZp
Y2VTY2FsZUZhY3RvciIpOyB9CisgICAgZG91YmxlIHZpZXdXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IGRvdWJsZUZlYXR1cmVWYWx1ZSgidmlld1dpZHRoIik7IH0KKyAgICBkb3VibGUgdmlld0hlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1cmVWYWx1ZSgidmlld0hlaWdodCIpOyB9Cisg
ICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVzdCgpIGNvbnN0IHsgcmV0dXJuIHN0cmlu
Z0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25NYW5pZmVzdCIpOyB9CisgICAgc3RkOjpzdHJpbmcg
anNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgianNjT3B0aW9u
cyIpOyB9CisgICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKSBj
b25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzIik7IH0KKyAgICBzdGQ6OnN0cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwo
KSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoInN0YW5kYWxvbmVXZWJBcHBsaWNh
dGlvblVSTCIpOyB9CisgICAgc3RkOjpzdHJpbmcgY29udGVudE1vZGUoKSBjb25zdCB7IHJldHVy
biBzdHJpbmdGZWF0dXJlVmFsdWUoImNvbnRlbnRNb2RlIik7IH0KKyAgICBzdGQ6OnN0cmluZyBh
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJl
VmFsdWUoImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIpOyB9CisgICAgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVmVj
dG9yRmVhdHVyZVZhbHVlKCJsYW5ndWFnZSIpOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBleHBlcmltZW50YWxGZWF0dXJlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXM7IH0KKyAgICBjb25zdCBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBpbnRlcm5hbERlYnVnRmVhdHVyZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlczsgfQorCisg
ICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBib29sRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5n
IGtleSkgY29uc3Q7CisgICAgZG91YmxlIGRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBr
ZXkpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIHN0cmluZ0ZlYXR1cmVWYWx1ZShzdGQ6OnN0cmlu
ZyBrZXkpIGNvbnN0OworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJpbmdWZWN0b3JG
ZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5KSBjb25zdDsKKworICAgIFRlc3RGZWF0dXJlcyBt
X2ZlYXR1cmVzOwogfTsKIAogfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9U
ZXN0Q29udHJvbGxlckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjY4MTU5KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsMjcgKzExNCwyOCBAQCBXS1ByZWZlcmVuY2VzUmVmIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9yCiAgICAgcmV0dXJuIChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKWdsb2Jh
bFdlYlZpZXdDb25maWd1cmF0aW9uLnByZWZlcmVuY2VzOwogfQogCi12b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAor
VGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgVGVz
dEZlYXR1cmVzIGZlYXR1cmVzOworCiAgICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiJd
KQotICAgICAgICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJl
bmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiIsIHRydWUgfSk7CiAgICAgaWYgKFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbiJdKQotICAgICAgICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJs
ZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuID0gdHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIHRydWUgfSk7
CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChvcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kpCi0gICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIHNldEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2
YWN5RW5hYmxlZCJdOwotI2VuZGlmCisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJh
dGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMu
dXNlRXBoZW1lcmFsU2Vzc2lvbiB8fCBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TC5sZW5ndGgoKSkgewotICAgICAgICBhdXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWcgPSBvcHRp
b25zLnVzZUVwaGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0g
OiBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOwotICAgICAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBi
b29sIHVzZUVwaGVtZXJhbFNlc3Npb24gPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsK
KyAgICBhdXRvIHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCA9IG9wdGlvbnMuc3RhbmRhbG9u
ZVdlYkFwcGxpY2F0aW9uVVJMKCk7CisgICAgaWYgKHVzZUVwaGVtZXJhbFNlc3Npb24gfHwgc3Rh
bmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gd2Vic2l0
ZURhdGFTdG9yZUNvbmZpZyA9IHVzZUVwaGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9u
XSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBpZiAoIXVzZUVwaGVtZXJhbFNlc3Npb24p
CiAgICAgICAgICAgICBjb25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3Jp
ZXMoKFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYpd2Vic2l0ZURhdGFTdG9yZUNv
bmZpZyk7Ci0gICAgICAgIGlmIChvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5s
ZW5ndGgoKSkKLSAgICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxv
bmVBcHBsaWNhdGlvblVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6b3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1d
XTsKKyAgICAgICAgaWYgKHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlv
blVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
c3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmNfc3RyKCldXV07CiAgICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IChfX2JyaWRnZSBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVD
b25maWddIGF1dG9yZWxlYXNlXTsKICAgICB9IGVsc2UKICAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlID0gKF9fYnJpZGdlIFdLV2Vic2l0ZURhdGFTdG9yZVJlZilnbG9iYWxXZWJWaWV3Q29uZmln
dXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlOwpAQCAtMTQ1LDMyICsxNDYsMzMgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaQogICAgIGF1dG8gY29waWVkQ29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikK
KyAgICBpZiAob3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKCkpCiAgICAgICAgIFtjb3BpZWRDb25m
aWd1cmF0aW9uIHNldERhdGFEZXRlY3RvclR5cGVzOldLRGF0YURldGVjdG9yVHlwZUFsbF07Ci0g
ICAgaWYgKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpCisgICAgaWYgKG9wdGlv
bnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3Vy
YXRpb24gc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHM6WUVTXTsKLSAgICBpZiAob3B0aW9u
cy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSkKKyAgICBpZiAob3B0aW9ucy51c2VD
aGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSgpKQogICAgICAgICBbY29waWVkQ29uZmlndXJh
dGlvbiBzZXRTZWxlY3Rpb25HcmFudWxhcml0eTpXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFj
dGVyXTsKLSAgICBpZiAob3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICBpZiAob3B0aW9u
cy5pc0FwcEJvdW5kV2ViVmlldygpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRM
aW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zOllFU107CiAjZWxzZQotICAgIFtjb3Bp
ZWRDb25maWd1cmF0aW9uIF9zZXRTZXJ2aWNlQ29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxl
U2VydmljZUNvbnRyb2xzXTsKKyAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0U2VydmljZUNv
bnRyb2xzRW5hYmxlZDpvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scygpXTsKICNlbmRpZgog
Ci0gICAgaWYgKG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQpCisgICAgaWYgKG9wdGlv
bnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRp
b24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOwogCi0gICAgaWYgKG9wdGlvbnMu
ZW5hYmxlQ29sb3JGaWx0ZXIpCisgICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSkK
ICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNd
OwogCiAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTooV0tXZWJz
aXRlRGF0YVN0b3JlICopd2Vic2l0ZURhdGFTdG9yZSgpXTsKIAotICAgIFtjb3BpZWRDb25maWd1
cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BO
YXZpZ2F0aW9uVG9EYXRhVVJMc107CisgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93
VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzKCldOwogCiAgICAgY29uZmlndXJlQ29udGVudE1vZGUoY29waWVkQ29uZmlndXJhdGlvbi5n
ZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Lmxl
bmd0aCgpKSB7Ci0gICAgICAgIGF1dG8gbWFuaWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOm9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdC5jX3N0cigpXTsKKyAgICBh
dXRvIGFwcGxpY2F0aW9uTWFuaWZlc3QgPSBvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QoKTsK
KyAgICBpZiAoYXBwbGljYXRpb25NYW5pZmVzdC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIG1h
bmlmZXN0UGF0aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzphcHBsaWNhdGlvbk1h
bmlmZXN0LmNfc3RyKCldOwogICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoQ29udGVudHNPZkZpbGU6bWFuaWZlc3RQYXRoIHVzZWRFbmNvZGluZzpudWxscHRyIGVy
cm9yOm51bGxwdHJdOwogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0QXBwbGljYXRp
b25NYW5pZmVzdDpbX1dLQXBwbGljYXRpb25NYW5pZmVzdCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJv
bUpTT046dGV4dCBtYW5pZmVzdFVSTDpuaWwgZG9jdW1lbnRVUkw6bmlsXV07CiAgICAgfQpAQCAt
MTc4LDEzICsxODAsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJW
aQogICAgIG1fbWFpbldlYlZpZXcgPSBtYWtlVW5pcXVlPFBsYXRmb3JtV2ViVmlldz4oY29waWVk
Q29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9ucyk7CiAgICAgZmluaXNoQ3JlYXRpbmdQbGF0Zm9y
bVdlYlZpZXcobV9tYWluV2ViVmlldy5nZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9u
cy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKQorICAgIGlmIChvcHRpb25zLnB1
bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSkKICAgICAgICAgbV9tYWluV2ViVmll
dy0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNlKTsKIAotICAgIGlmIChvcHRpb25zLmVkaXRhYmxl
KQorICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNl
dEVkaXRhYmxlKHRydWUpOwogCi0gICAgbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxs
b3dzTGlua1ByZXZpZXcgPSBvcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3OworICAgIG1fbWFpbldl
YlZpZXctPnBsYXRmb3JtVmlldygpLmFsbG93c0xpbmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NM
aW5rUHJldmlldygpOwogICAgIFttX21haW5XZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKSBfc2V0U2hh
cmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOllFU107
CiB9CiAKQEAgLTIwMyw3ICsyMDUsNyBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9yCiB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5pc2hDcmVhdGluZ1BsYXRmb3JtV2Vi
VmlldyhQbGF0Zm9ybVdlYlZpZXcqIHZpZXcsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQog
ewogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldykK
KyAgICBpZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldygpKQogICAgICAgICBbdmlldy0+cGxh
dGZvcm1XaW5kb3coKSBvcmRlckZyb250Om5pbF07CiAgICAgZWxzZQogICAgICAgICBbdmlldy0+
cGxhdGZvcm1XaW5kb3coKSBvcmRlckJhY2s6bmlsXTsKQEAgLTI2MywxMiArMjY1LDEyIEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2kKICAgICB9CiB9CiAKLXZvaWQg
VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7
Ci0gICAgaWYgKGJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmIChidW5kbGVJZGVu
dGlmaWVyLmVtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbVGVzdFJ1bm5lcldL
V2ViVmlldyBfc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1bmRs
ZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV07CisgICAgW1Rlc3RSdW5uZXJXS1dl
YlZpZXcgX3NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0b1dURlN0
cmluZyhidW5kbGVJZGVudGlmaWVyKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXTsKIH0KIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5n
T3ZlcnJpZGUoKQpAQCAtMjg2LDcgKzI4OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29h
UmVzZXRTdGF0ZVRvQ28KICAgICAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqcGxhdGZvcm1WaWV3
ID0gd2ViVmlldy0+cGxhdGZvcm1WaWV3KCk7CiAgICAgICAgIHBsYXRmb3JtVmlldy5fdmlld1Nj
YWxlID0gMTsKICAgICAgICAgcGxhdGZvcm1WaWV3Ll9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lk
dGggPSAwOwotICAgICAgICBbcGxhdGZvcm1WaWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzXTsK
KyAgICAgICAgW3BsYXRmb3JtVmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Rm9yVGVzdGluZzpvcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cygpXTsKICAgICAg
ICAgW3BsYXRmb3JtVmlldyByZXNldEludGVyYWN0aW9uQ2FsbGJhY2tzXTsKICAgICAgICAgW3Bs
YXRmb3JtVmlldyBfcmVzZXROYXZpZ2F0aW9uR2VzdHVyZVN0YXRlRm9yVGVzdGluZ107CiAgICAg
fQpAQCAtMjk3LDYgKzI5OSwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3Rh
dGVUb0NvCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRl
c3RJbnZvY2F0aW9uJiB0ZXN0SW52b2NhdGlvbikKIHsKICAgICBzZXRDcmFzaFJlcG9ydEFwcGxp
Y2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvblRvVVJMKHRlc3RJbnZvY2F0aW9uLnVybCgpKTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKHRlc3RJbnZvY2F0aW9uLm9wdGlvbnMo
KS5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkpCisgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJ
bkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCJdOworI2VuZGlmCiB9CiAKIHN0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9hcmRUeXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0
ZWJvYXJkIHR5cGUiOwpAQCAtNDg3LDEyICs0OTQsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
aXNEb2luZ01lZGlhQ2FwdHVyZQogCiBzdGF0aWMgV0tDb250ZW50TW9kZSBjb250ZW50TW9kZShj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9k
ZSA9PSAiZGVza3RvcCJfcykKKyAgICBhdXRvIG1vZGUgPSBvcHRpb25zLmNvbnRlbnRNb2RlKCk7
CisgICAgaWYgKG1vZGUgPT0gImRlc2t0b3AiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9k
ZURlc2t0b3A7Ci0KLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9kZSA9PSAibW9iaWxlIl9zKQor
ICAgIGlmIChtb2RlID09ICJtb2JpbGUiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZU1v
YmlsZTsKLQogICAgIHJldHVybiBXS0NvbnRlbnRNb2RlUmVjb21tZW5kZWQ7CiB9CiAKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJ
KHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250
cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDkgKzE1MCwxMSBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0UHJlZmVyCiAgICAgbV9tYWluV2ViVmlldy0+ZGlz
bWlzc0FsbFBvcHVwTWVudXMoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxh
dGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29u
c3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNv
bnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7Cisg
ICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNl
cnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBm
ZWF0dXJlczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvUGxhdGZvcm1XZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjgxNTkp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3Jt
V2ViVmlldyhXS1dlYlZpCiAgICAgOiBtX3dpbmRvd0lzS2V5KHRydWUpCiAgICAgLCBtX29wdGlv
bnMob3B0aW9ucykKIHsKLSAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgVGVzdENv
bnRyb2xsZXI6OnZpZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOworICAgIENH
UmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCBvcHRpb25zLnZpZXdXaWR0aCgpLCBvcHRpb25z
LnZpZXdIZWlnaHQoKSk7CiAKICAgICBtX3dpbmRvdyA9IFtbV2ViS2l0VGVzdFJ1bm5lcldpbmRv
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0XTsKICAgICBtX3dpbmRvdy5iYWNrZ3JvdW5kQ29s
b3IgPSBbVUlDb2xvciBsaWdodEdyYXlDb2xvcl07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2aXNpb24gMjY4MTU5KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJl
c2V0U3RhdGVUCiAgICAgfQogCiAgICAgbV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5jbGVhcigp
OwotICAgIGlmICghb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMpIHsKKyAgICBpZiAoIW9w
dGlvbnMuc2hvdWxkUHJlc2VudFBvcG92ZXJzKCkpIHsKICNpZiBVU0UoVUlDT05URVhUTUVOVSkK
ICAgICAgICAgbV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5hcHBlbmQobWFrZVVuaXF1ZTxJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyPihbVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGNsYXNzXSwgQHNl
bGVjdG9yKF9wcmVzZW50TWVudUF0TG9jYXRpb246KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlUHJlc2VudE1lbnVPclBvcG92ZXJPclZpZXdDb250cm9sbGVyKSkpOwogI2VuZGlmCkBA
IC0yMTMsOCArMjEzLDEwIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0
ZVQKICAgICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gd2ViVmlldy5zY3JvbGxWaWV3
OwogICAgICAgICBbc2Nyb2xsVmlldyBfcmVtb3ZlQWxsQW5pbWF0aW9uczpZRVNdOwogICAgICAg
ICBbc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6MSBhbmltYXRlZDpOT107Ci0gICAgICAgIHNjcm9s
bFZpZXcuY29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzTWFrZShvcHRpb25zLmNvbnRlbnRJbnNl
dFRvcCwgMCwgMCwgMCk7Ci0gICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IENHUG9p
bnRNYWtlKDAsIC1vcHRpb25zLmNvbnRlbnRJbnNldFRvcCk7CisgICAgICAgIAorICAgICAgICBh
dXRvIGNvbnRlbnRJbnNldFRvcCA9IG9wdGlvbnMuY29udGVudEluc2V0VG9wKCk7CisgICAgICAg
IHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzTWFrZShjb250ZW50SW5zZXRU
b3AsIDAsIDAsIDApOworICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50
TWFrZSgwLCAtY29udGVudEluc2V0VG9wKTsKIAogICAgICAgICBpZiAod2ViVmlldy5pbnRlcmFj
dGluZ1dpdGhGb3JtQ29udHJvbCkKICAgICAgICAgICAgIHNob3VsZFJlc3RvcmVGaXJzdFJlc3Bv
bmRlciA9IFt3ZWJWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKQEAgLTI2NSwxMiArMjY3LDE0
IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2Nh
dGlvbiYgdGVzdCkKIHsKKyAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRH
ZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHNldFNob3VsZFNob3dUb3VjaGVzOnRlc3Qub3B0
aW9ucygpLnNob3VsZFNob3dUb3VjaGVzKCldOworCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAq
d2ViVmlldyA9IG1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwogCi0gICAgaWYgKHRlc3Qu
b3B0aW9ucygpLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCkKKyAgICBpZiAodGVzdC5vcHRpb25z
KCkuc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0KCkpCiAgICAgICAgIHdlYlZpZXcuY29uZmlndXJh
dGlvbi5wcmVmZXJlbmNlcy5fc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ID0gWUVTOwogCi0gICAg
aWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KQorICAgIGlmICghdGVzdC5v
cHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBD
R1JlY3Qgc2NyZWVuQm91bmRzID0gW1VJU2NyZWVuIG1haW5TY3JlZW5dLmJvdW5kczsKQEAgLTI5
MSwxMCArMjk1LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQog
ICAgIC8vIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFs
c2UpLgogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVz
dE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYp
IGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0
dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRp
b25zLnNob3VsZFNob3dUb3VjaGVzID0gc2hvdWxkU2hvd1RvdWNoZXMoKTsKLSAgICBbW0dlbmVy
YXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3dd
IHNldFNob3VsZFNob3dUb3VjaGVzOm9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXNdOworICAgIHJl
dHVybiB7IH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNv
bnRleHQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3Jt
V2ViVmlld01hYy5tbQkocmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEs
MTggQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tXZWJWaQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBzdXJlIHRoaXMgaXMgdGhlIGJl
c3QgcGxhY2UgZm9yIHRoaXM7IG1heWJlIHdlIHNob3VsZCBoYXZlIEFQSSB0byBzZXQgdGhpcyBz
byB3ZSBjYW4gZG8gaXQgZnJvbSBUZXN0Q29udHJvbGxlcj8KLSAgICBpZiAobV9vcHRpb25zLnVz
ZVJlbW90ZUxheWVyVHJlZSkKKyAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSgp
KQogICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRWYWx1
ZTpAWUVTIGZvcktleTpAIldlYktpdDJVc2VSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSJdOwog
CiAgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBj
b3B5XSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19i
cmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10s
IG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyk7CisgICAgV0tQcmVmZXJlbmNlc1NldFRo
cmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVk
Q29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGlu
ZygpKTsKIAotICAgIE5TUmVjdCByZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBUZXN0Q29udHJvbGxl
cjo6dmlld1dpZHRoLCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdodCk7CisgICAgTlNSZWN0IHJl
Y3QgPSBOU01ha2VSZWN0KDAsIDAsIG9wdGlvbnMudmlld1dpZHRoKCksIG9wdGlvbnMudmlld0hl
aWdodCgpKTsKICAgICBtX3ZpZXcgPSBbW1Rlc3RSdW5uZXJXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6cmVjdCBjb25maWd1cmF0aW9uOmNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCldOwog
ICAgIFttX3ZpZXcgX3NldFdpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQ6Tk9dOwogCiAg
ICAgTlNTY3JlZW4gKmZpcnN0U2NyZWVuID0gW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdElu
ZGV4OjBdOwotICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dXZWJW
aWV3ID8gTlNPZmZzZXRSZWN0KHJlY3QsIDEwMCwgMTAwKSA6IE5TT2Zmc2V0UmVjdChyZWN0LCAt
MTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFtZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0
ICsgMTAwMDApOworICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dX
ZWJWaWV3KCkgPyBOU09mZnNldFJlY3QocmVjdCwgMTAwLCAxMDApIDogTlNPZmZzZXRSZWN0KHJl
Y3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVuIGZyYW1lXS5zaXplLmhlaWdodCAtIHJlY3Quc2l6ZS5o
ZWlnaHQgKyAxMDAwMCk7CiAgICAgbV93aW5kb3cgPSBbW1dlYktpdFRlc3RSdW5uZXJXaW5kb3cg
YWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dT
dHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlfTlNCYWNraW5n
U3RvcmVVbmJ1ZmZlcmVkIGRlZmVyOllFU107CiAgICAgbV93aW5kb3cucGxhdGZvcm1XZWJWaWV3
ID0gdGhpczsKICAgICBbbV93aW5kb3cgc2V0Q29sb3JTcGFjZTpbZmlyc3RTY3JlZW4gY29sb3JT
cGFjZV1dOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRy
b2xsZXJNYWMubW0JKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
bWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTEgKzE3Miwx
MSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNU
ZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5n
JikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0Zl
YXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9w
dGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcgPSB0cnVlOwotICAgIG9wdGlvbnMudXNlUmVtb3Rl
TGF5ZXJUcmVlID0gc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlKCk7Ci0gICAgb3B0aW9ucy5zaG91
bGRTaG93V2ViVmlldyA9IHNob3VsZFNob3dXZWJWaWV3KCk7CisgICAgVGVzdEZlYXR1cmVzIGZl
YXR1cmVzOworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlVGhyZWFkZWRT
Y3JvbGxpbmciLCB0cnVlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdElu
dm9jYXRpb24mIHRlc3QpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9y
bVdlYlZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2lu
L1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NCw3ICsxNDQsNyBAQCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tS
CiAgICAgICAgIFNXUF9OT01PVkUgfCBTV1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSB8IFNX
UF9OT0NPUFlCSVRTKTsKIAogICAgIFVJTlQgZmxhZ3MgPSBTV1BfTk9aT1JERVIgfCBTV1BfTk9B
Q1RJVkFURSB8IFNXUF9OT0NPUFlCSVRTOwotICAgIGlmIChtX29wdGlvbnMuc2hvdWxkU2hvd1dl
YlZpZXcpCisgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldygpKQogICAgICAgICBm
bGFncyB8PSBTV1BfTk9NT1ZFOwogICAgIDo6U2V0V2luZG93UG9zKAogICAgICAgICBtX3dpbmRv
dywKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxl
cldpbi5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2lu
L1Rlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw5IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmlj
VGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25z
dAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAJ
KHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250
cm9sbGVyV1BFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEzNiwxMSBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0UHJlZmVyCiB7CiB9CiAKLXZvaWQgVGVzdENvbnRy
b2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlv
bnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250
cm9scyA9IGZhbHNlOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5i
b29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBmYWxzZSB9
KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgo=
</data>
<flag name="commit-queue"
          id="426941"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410872</attachid>
            <date>2020-10-08 12:40:21 -0700</date>
            <delta_ts>2020-10-08 17:05:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217390-20201008124020.patch</filename>
            <type>text/plain</type>
            <size>107222</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1OSBAQAorMjAyMC0xMC0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgVGVzdE9wdGlvbnMgY29kZSBpbiBXZWJLaXRUZXN0UnVubmVyIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHJhdGlvbmFsaXplIGFuZCBleHRlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzM5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBUZXN0T3B0aW9ucyBjb2Rl
IGluIFdlYktpdFRlc3RSdW5uZXIgdG8gbWFrZSBpdCBjbGVhciBob3cgb3B0aW9ucyBjb21pbmcg
aW4gYXQgCisgICAgICAgIGRpZmZlcmVudCBsZXZlbHMgYXJlIHRyZWF0ZWQgYW5kIHdoYXQgcHJl
Y2VkZW5jZSBlYWNoIGhhcy4gVGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAg
ICAgICAKKyAgICAgICAgLSBHbG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5u
ZXIgdmlhIHRoZSBjb21tYW5kIGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0g
SGFyZGNvZGVkIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1
biAoaG9wZWZ1bGx5IHdlIGNhbiByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVk
IHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09T
IGZvciB1c2VUaHJlYWRlZFNjcm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSB0aGUg
dGVzdCBoZWFkZXJzIHdpdGhpbiB0aGUgdGVzdCBpdHNlbGYuCisgICAgICAgIC0gRmluYWxseSwg
YSBzZWNvbmQgY2hhbmNlIGZvciBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJy
ZW5seSBvbmx5IHVzZWQgdGhlIENvY29hIHBvcnRzCisgICAgICAgICAgZm9yIHNldHRpbmcgZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gYW5kIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dP
cGVuIGJhc2VkIG9uIE5TVXNlckRlZmF1bHRzLikKKworICAgICAgICBUbyBtYWtlIHRoaXMgY2hh
bmdlIHdvcmssIGFuZCBwYXZlIHRoZSB3YXkgZm9yIGZ1dHVyZSBhdXRvZ2VuZXJhdGlvbiBvZiBz
b21lIG9mIHRoZXNlIHRlc3Qgb3B0aW9ucywKKyAgICAgICAgdGhlIFRlc3RPcHRpb25zIHN0cnVj
dCAobm93IGNsYXNzKSB3YXMgb3ZlcmhhdWxlZC4gSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBzdGF0
ZSBpdHNlbGYsIFRlc3RPcHRpb25zCisgICAgICAgIGlzIG5vdyBhbiBpbW11dGFibGUgb3duZXIg
b2YgYSBUZXN0RmVhdHVyZXMgb2JqZWN0LiBUZXN0RmVhdHVyZXMgaXMgYSBzaW1wbGUgc3RydWN0
IHRoYXQgY29udGFpbnMgbWFwcyAKKyAgICAgICAgb2Ygb3B0aW9uIGtleXMgdG8gdmFsdWVzIGFu
ZCBjYW4gYmUgbWVyZ2VkIHdpdGggb3RoZXIgVGVzdEZlYXR1cmVzIG9iamVjdHMuIFRlc3RPcHRp
b25zIHRha2VzIGEgCisgICAgICAgIFRlc3RGZWF0dXJlcyBhdCBjb25zdHJ1Y3Rpb24sIGFuZCBl
eHBvc2VzIGdldHRlcnMgZm9yIGFsbCBrZXlzLCBhcyB3ZWxsIGFzIGRlZmF1bHRzIGZvciB3aGVu
IHRoZXkgYXJlCisgICAgICAgIG5vdCBpbiB0aGUgbWFwcy4gSW4gZnV0dXJlIGNoYW5nZXMsIEkg
d291bGQgbGlrZSB0byByZW1vdmUgbWFueSBvZiB0aGVzZSAodGhlIG9uZXMgdGhhdCBjb3JyZXNw
b25kCisgICAgICAgIHdpdGggV2ViS2l0IHByZWZlcmVuY2VzIGFueXdheSkgYW5kIGhhdmUgdGhl
IGtleXMgYW5kIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGRlYWx0IHdpdGggYnkgV0tQcmVmZXJlbmNl
cy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHA6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmg6CisgICAgICAgIFN3aXRjaCB0byBzdGQ6OnVub3Jk
ZXJlZF9tYXAgZm9yIGNvbnNpc3RlbmN5IGFuZCBlYXNlIG9mIGNvbnZlcnNpb24uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gY2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAg
ICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAgQWRkIGNvbnZlcnNpb25zIGZvciBzdGQ6
OnN0cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICBSZXBsYWNlIHNvbWUg
Ym9vbHMgd2l0aCBhIG5ldyBnbG9iYWwgVGVzdEZlYXR1cmVzIGluc3RhbmNlIHRoYXQgZm9ybXMg
dGhlIGJhc2Ugb2YKKyAgICAgICAgYWxsIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
biBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdX
aXRoT3B0aW9ucyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNl
dFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwpOgorICAgICAgICBFeHBvc2UgYXMgYSBzdGF0
aWMgbWVtYmVyIGZ1bmN0aW9uIG9uIFRlc3RDb250cm9sbGVyIGZvciB1c2UgaW4gb3RoZXIgZmls
ZXMuCisgICAgICAgIAorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNG
b3JUZXN0IGNvbnN0KToKKyAgICAgICAgUmV3b3JrIHRvIGJlIGEgc2VxdWVuY2Ugb2YgVGVzdEZl
YXR1cmVzIG1lcmdlcy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRl
c3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmNyZWF0ZVRlc3RV
UkwpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVs
YXRpdmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVhZGVy
VmFsdWVBc1VSTCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnVwZGF0ZVRlc3RPcHRpb25zRnJv
bVRlc3RIZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGRUZXN0T3B0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmVkIFRlc3RP
cHRpb25zIHBhcnNpbmcgdG8gVGVzdE9wdGlvbnMuY3BwCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCBu
ZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0T3B0aW9ucy5oOgorICAgICAgICBSZXdvcmtzIFRlc3RPcHRpb25zIHRvIGJlIGFuIGltbXV0
YWJsZSBvd25lciBvZiBhIFRlc3RGZWF0dXJlcyBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2V0CisgICAg
ICAgIG9mIG1hcHMgdGhhdCBtYXAgZmVhdHVyZSBzdHJpbmcga2V5cywgdG8gdmFsdWVzIG9mIHR5
cGUgYm9vbCwgZG91YmxlLCBzdHJpbmcgb3Igc3RyaW5nIHZlY3Rvci4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjptZXJnZSk6Cisg
ICAgICAgIE1lcmdlcyB0d28gVGVzdEZlYXR1cmVzIG9iamVjdHMuIElmIGJvdGggY29udGFpbiB0
aGUgc2FtZSBrZXksIHRoZSAnYWRkaXRpb25hbCcKKyAgICAgICAgVGVzdEZlYXR1cmVzIG92ZXJy
aWRlcyB0aGUgJ2Jhc2UnIFRlc3RGZWF0dXJlcy4KKworICAgICAgICAoV1RSOjpkdW1wRmVhdHVy
ZXMpOgorICAgICAgICBIZWxwZXIgdG8gZHVtcCBmZWF0dXJlcyB0byBzdGRlcnIsIHVzZWZ1bCBm
b3IgZGVidWdnaW5nLgorCisgICAgICAgIChXVFI6OmtleVR5cGUpOgorICAgICAgICBIZWxwZXIg
Zm9yIHBhcnNlciB0byBrbm93IHdoaWNoIHZhbHVlIHBhcnNlciB0byB1c2UuCisKKyAgICAgICAg
KFdUUjo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKToKKyAgICAgICAgKFdUUjo6cGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6CisgICAgICAgIChXVFI6OnBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOgorICAgICAgICBWYWx1ZSBwYXJzZXJzIG1vdmVk
IGZyb20gVGVzdENvbnRyb2xsZXIuY3BwCisKKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVhZGVy
KToKKyAgICAgICAgSGVhZGVyIHBhcnNlciBtb3ZlZCBmcm9tIFRlc3RDb250cm9sbGVyLmNwcC4g
VXBkYXRlIHRvIG5vdyByZXR1cm4KKyAgICAgICAgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGFuZCB1
c2Uga2V5VHlwZSB0byBwaWNrIHZhbHVlIHBhcnNlciByYXRoZXIKKyAgICAgICAgdGhhbiBpbmxp
bmluZyB0aGUgaWYgc3RhdGVtZW50cy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmhhcmRjb2Rl
ZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KToKKyAgICAgICAgTW92ZWQgZnJvbSB0aGUgVGVz
dE9wdGlvbnMgY29udHJ1Y3RvciBhbmQgcmV3b3JrZWQgdG8gcmV0dXJuIGEgVGVzdEZlYXR1cmVz
CisgICAgICAgIG9iamVjdCB0byBiZSBtZXJnZWQgYnkgdGhlIGNhbGxlci4KKworICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVh
dGVzIGEgVGVzdEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRl
c3QuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVh
dHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRv
IG5vdyByZXR1cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJh
dGhlciB0aGFuIHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUlu
QXBwQnJvd3NlclByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVu
VGVzdAorICAgICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0
ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAg
ICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAg
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRh
dGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgTW92ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMg
bW9yZSBhcHByb3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFz
IHRoYXQgaXMgZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRv
IGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1v
dGVMYXllclRyZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUg
Z2xvYmFsbHksCisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGlu
ZyB0byB1c2UgYm9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4v
VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQ
bGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgVXBkYXRlZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvZ3RrL1Rlc3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9u
c0ZvclRlc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0
dXJlLgorCiAyMDIwLTEwLTA3ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4K
IAogICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gRW5zdXJlIHRoYXQgYnVpbGRlciBuYW1lcyBh
cmUgdmFsaWQgQnVpbGRib3QgaWRlbnRpZmllcnMKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRp
b25zLmNwcAkocmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAorI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5o
IgogI2luY2x1ZGUgPHN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RSIHsKQEAgLTExMywxNiArMTE0
LDE2IEBAIHN0YXRpYyBib29sIGhhbmRsZU9wdGlvbkFsbG93ZWRIb3N0KE9wdGkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlU3Ry
aW5nLCBIYXNoTWFwPFN0cmluZywgYm9vbD4mIGZlYXR1cmVzKQorc3RhdGljIGJvb2wgcGFyc2VG
ZWF0dXJlKHN0ZDo6c3RyaW5nX3ZpZXcgZmVhdHVyZVN0cmluZywgc3RkOjp1bm9yZGVyZWRfbWFw
PHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7Ci0gICAgYXV0byBzdHJpbmdzID0gZmVh
dHVyZVN0cmluZy5zcGxpdCgnPScpOwotICAgIGlmIChzdHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJp
bmdzLnNpemUoKSA+IDIpCisgICAgYXV0byBzdHJpbmdzID0gc3BsaXQoZmVhdHVyZVN0cmluZywg
Jz0nKTsKKyAgICBpZiAoc3RyaW5ncy5lbXB0eSgpIHx8IHN0cmluZ3Muc2l6ZSgpID4gMikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBmZWF0dXJlTmFtZSA9IHN0cmluZ3NbMF07
CiAgICAgYm9vbCBlbmFibGVkID0gc3RyaW5ncy5zaXplKCkgPT0gMSB8fCBzdHJpbmdzWzFdID09
ICJ0cnVlIjsKIAotICAgIGZlYXR1cmVzLnNldChmZWF0dXJlTmFtZSwgZW5hYmxlZCk7CisgICAg
ZmVhdHVyZXMuaW5zZXJ0KHsgc3RkOjpzdHJpbmcgeyBmZWF0dXJlTmFtZSB9LCBlbmFibGVkIH0p
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNzMsNyArMTc0LDEyIEBAIGNvbnN0IGNoYXIg
KiBPcHRpb25zSGFuZGxlcjo6dXNhZ2UgPSAiVXMKIGNvbnN0IGNoYXIgKiBPcHRpb25zSGFuZGxl
cjo6aGVscCA9ICJEaXNwbGF5cyB0aGlzIGhlbHAuIjsKIAogT3B0aW9uOjpPcHRpb24oY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIHN0ZDo6ZnVuY3Rpb248Ym9vbChP
cHRpb25zJiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKT4gcGFyYW1ldGVySGFuZGxlciwgYm9v
bCBoYXNBcmd1bWVudCkKLSAgICA6IG5hbWUobmFtZSksIGRlc2NyaXB0aW9uKGRlc2NyaXB0aW9u
KSwgcGFyYW1ldGVySGFuZGxlcihwYXJhbWV0ZXJIYW5kbGVyKSwgaGFzQXJndW1lbnQoaGFzQXJn
dW1lbnQpIHsgfTsKKyAgICA6IG5hbWUobmFtZSkKKyAgICAsIGRlc2NyaXB0aW9uKGRlc2NyaXB0
aW9uKQorICAgICwgcGFyYW1ldGVySGFuZGxlcihwYXJhbWV0ZXJIYW5kbGVyKQorICAgICwgaGFz
QXJndW1lbnQoaGFzQXJndW1lbnQpCit7Cit9CiAKIGJvb2wgT3B0aW9uOjptYXRjaGVzKGNvbnN0
IGNoYXIqIG9wdGlvbikKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lv
biAyNjgxNTkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUg
PHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBAIHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgog
ICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0
cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZl
YXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVy
ZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50
YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlvbiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsx
MTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBh
ZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RP
cHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVybiAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9v
cHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29s
IHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsg
cmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYmIG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6
YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAgICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBz
aG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5j
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0
aW9ucy5oCShyZXZpc2lvbiAyNjgxNTkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8
V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8
c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+
CkBAIC01OSw2ICs2MCwxMSBAQCBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0so
Y29uCiAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3Ry
aW5nKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBz
dGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dLKHN0cmluZy5jX3N0cigpKTsK
K30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3Ry
aW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIHRvV0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwpA
QCAtMTE0LDYgKzEyMCwxMSBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3Qg
SlNSCiAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBX
VEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAg
IHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxp
bmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHRvV0soY3JlYXRlSlNTdHJpbmco
Y29udGV4dCwgdmFsdWUpLmdldCgpKTsKQEAgLTEyNSw0ICsxMzYsMjUgQEAgaW5saW5lIFdURjo6
U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dAogICAgIHJldHVybiB0b1dURlN0cmluZyhjcmVh
dGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJp
bmdUeXBlPgoraW5saW5lIHN0ZDo6dmVjdG9yPFN0cmluZ1R5cGU+IHNwbGl0KGNvbnN0IFN0cmlu
Z1R5cGUmIHN0cmluZywgY2hhciBkZWxpbWl0ZXIpCit7CisgICAgc3RkOjp2ZWN0b3I8U3RyaW5n
VHlwZT4gcmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChpIDwgc3RyaW5n
LnNpemUoKSkgeworICAgICAgICBhdXRvIGZvdW5kSW5kZXggPSBzdHJpbmcuZmluZF9maXJzdF9v
ZihkZWxpbWl0ZXIsIGkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ICE9IGkpCisgICAgICAg
ICAgICByZXN1bHQucHVzaF9iYWNrKHN0cmluZy5zdWJzdHIoaSwgZm91bmRJbmRleCAtIGkpKTsK
KworICAgICAgICBpZiAoZm91bmRJbmRleCA9PSBTdHJpbmdUeXBlOjpucG9zKQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgaSA9IGZvdW5kSW5kZXggKyAxOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDksMTIgKzEwOSw2IEBAIHN0YXRpYyBjb25zdGV4cHIgYXV0byBwYXRoU2VwYXJhdG9yID0gJ1wK
IHN0YXRpYyBjb25zdGV4cHIgYXV0byBwYXRoU2VwYXJhdG9yID0gJy8nOwogI2VuZGlmCiAKLWNv
bnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGggPSA4MDA7Ci1jb25zdCB1bnNp
Z25lZCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdodCA9IDYwMDsKLQotY29uc3QgdW5zaWduZWQg
VGVzdENvbnRyb2xsZXI6OnczY1NWR1ZpZXdXaWR0aCA9IDQ4MDsKLWNvbnN0IHVuc2lnbmVkIFRl
c3RDb250cm9sbGVyOjp3M2NTVkdWaWV3SGVpZ2h0ID0gMzYwOwotCiBjb25zdCBXVEY6OlNlY29u
ZHMgVGVzdENvbnRyb2xsZXI6OmRlZmF1bHRTaG9ydFRpbWVvdXQgPSA1X3M7CiBjb25zdCBXVEY6
OlNlY29uZHMgVGVzdENvbnRyb2xsZXI6Om5vVGltZW91dCA9IC0xX3M7CiAKQEAgLTQ2OSwxNSAr
NDYzLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICBt
X3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IG9wdGlvbnMuc2hvdWxkRHVtcFBpeGVsc0Zv
ckFsbFRlc3RzOwogICAgIG1fZm9yY2VDb21wbGV4VGV4dCA9IG9wdGlvbnMuZm9yY2VDb21wbGV4
VGV4dDsKICAgICBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IG9wdGlvbnMuc2hvdWxk
VXNlQWNjZWxlcmF0ZWREcmF3aW5nOwotICAgIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlID0g
b3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7CiAgICAgbV9wYXRocyA9IG9wdGlvbnMu
cGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRIb3N0czsKLSAgICBt
X3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldzsKLSAgICBtX3No
b3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsKICAgICBtX2NoZWNr
Rm9yV29ybGRMZWFrcyA9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzOwogICAgIG1fYWxsb3dB
bnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzID0gb3B0aW9ucy5hbGxvd0FueUhUVFBT
Q2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHM7Ci0gICAgbV9pbnRlcm5hbEZlYXR1cmVzID0gb3B0
aW9ucy5pbnRlcm5hbEZlYXR1cmVzOwotICAgIG1fZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBvcHRp
b25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIAorICAgIG1fZ2xvYmFsRmVhdHVyZXMuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVzOworICAgIG1fZ2xv
YmFsRmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZl
YXR1cmVzOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VS
ZW1vdGVMYXllclRyZWUiLCBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSB9KTsKKyAg
ICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAic2hvdWxkU2hvd1dlYlZp
ZXciLCBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3IH0pOworICAgIG1fZ2xvYmFsRmVhdHVyZXMu
Ym9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91bGRTaG93VG91Y2hlcyIsIG9wdGlvbnMuc2hvdWxk
U2hvd1RvdWNoZXMgfSk7CisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVF
KQogICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBvcHRpb25zLmFjY2Vzc2li
aWxpdHlJc29sYXRlZFRyZWVNb2RlOwogI2VuZGlmCkBAIC00OTksNyArNDk1LDcgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwogICAgIG1fZXZlbnRTZW5kZXJQcm94
eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhpcyk7CiB9CiAKLVdLUmV0YWluUHRy
PFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRl
eHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9ucyYgb3B0aW9u
cykgY29uc3QKK1dLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250
cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IENvbnRleHRPcHRpb25z
JiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tD
b250ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKICAgICBXS0NvbnRleHRDb25maWd1cmF0aW9u
U2V0SW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCksIGluamVjdGVkQnVuZGxl
UGF0aCgpKTsKQEAgLTU2MiwxMCArNTU4LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBUZXN0
Q29udHJvbGxlcjo6d2UKIAogV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVz
dENvbnRyb2xsZXI6OmdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dE9wdGlvbnMtPmhh
c1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0aW9ucykpIHsKLSAg
ICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRlQ29udGV4dENvbmZpZ3Vy
YXRpb24ob3B0aW9ucy5jb250ZXh0T3B0aW9ucyk7CisgICAgYXV0byBjb250ZXh0T3B0aW9ucyA9
IG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKTsKKyAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9jb250
ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb250ZXh0T3B0aW9ucykp
IHsKKyAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRlQ29udGV4dENv
bmZpZ3VyYXRpb24oY29udGV4dE9wdGlvbnMpOwogICAgICAgICBtX2NvbnRleHQgPSBwbGF0Zm9y
bUFkanVzdENvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihj
b250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpLmdldCgpLCBjb250ZXh0Q29uZmlndXJhdGlvbi5n
ZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBvcHRpb25zLmNvbnRleHRPcHRpb25z
OworICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnM7CiAKICAgICAgICAg
bV9nZW9sb2NhdGlvblByb3ZpZGVyID0gbWFrZVVuaXF1ZTxHZW9sb2NhdGlvblByb3ZpZGVyTW9j
az4obV9jb250ZXh0LmdldCgpKTsKIApAQCAtNjI3LDcgKzYyNCw3IEBAIFdLUmV0YWluUHRyPFdL
UGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QKICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0Q29u
dGV4dChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKICAgICBXS1Bh
Z2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBtX3Bh
Z2VHcm91cC5nZXQoKSk7CiAgICAgCi0gICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lv
bikgeworICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKSkgewogICAgICAgICBh
dXRvIGVwaGVtZXJhbERhdGFTdG9yZSA9IGFkb3B0V0soV0tXZWJzaXRlRGF0YVN0b3JlQ3JlYXRl
Tm9uUGVyc2lzdGVudERhdGFTdG9yZSgpKTsKICAgICAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNl
dFdlYnNpdGVEYXRhU3RvcmUocGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIGVwaGVtZXJhbERhdGFT
dG9yZS5nZXQoKSk7CiAgICAgfQpAQCAtNjM5LDExICs2MzYsMTIgQEAgV0tSZXRhaW5QdHI8V0tQ
YWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjcmVhdGVX
ZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CisgICAgYXV0
byBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcigpOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghb3B0aW9ucy5hcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFhcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgYnVuZGxlIGlkZW50
aWZpZXIgY2FuIG9ubHkgYmUgc2V0IG9uY2UgcGVyIHRlc3QsIGFuZCBpcyBjbGVhcmVkIGJldHdl
ZW4gdGVzdHMuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc1NldEFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllcik7Ci0gICAgICAgIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihv
cHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAgIHNldEFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcihhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwogICAgICAg
ICBtX2hhc1NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHRydWU7CiAgICAgfQogI2Vu
ZGlmCkBAIC02ODYsNyArNjg0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmll
d1dpdGhPcAogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8vIHBhZ2VEaWRTY3Jv
bGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAgICAgICBvcHRpb25z
LnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA/IHJ1bk9wZW5QYW5lbCA6IDAsCisgICAgICAgIG9w
dGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgPyBydW5PcGVuUGFuZWwgOiAwLAogICAg
ICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0LAogICAgICAg
ICAwLCAvLyBoZWFkZXJIZWlnaHQKICAgICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0CkBAIC03OTUs
OSArNzkzLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmlld1dpdGhPcAogICAg
IC8vIHNvbWV0aGluZyBlbHNlIGZvciBzcGVjaWZpYyB0ZXN0cyB0aGF0IG5lZWQgdG8gcnVuIGF0
IGEgZGlmZmVyZW50IHdpbmRvdyBzY2FsZS4KICAgICBtX21haW5XZWJWaWV3LT5jaGFuZ2VXaW5k
b3dTY2FsZUlmTmVlZGVkKDEpOwogICAgIAotICAgIGlmICghb3B0aW9ucy5hcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFhcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICByZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMo
KTsKLSAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mob3B0aW9u
cy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgICAgICB1cGRhdGVCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2VzcyhhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwogICAg
IH0KIH0KIApAQCAtODA5LDcgKzgwNyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmVuc3VyZVZp
ZXdTdXBwb3J0c08KICAgICAgICAgLy8gSGF2aW5nIGNyZWF0ZWQgYW5vdGhlciBwYWdlICh2aWEg
d2luZG93Lm9wZW4oKSkgcHJldmVudHMgcHJvY2VzcyBzd2FwcGluZyBvbiBuYXZpZ2F0aW9uIGFu
ZCBpdCBtYXkgdGhlcmVmb3JlCiAgICAgICAgIC8vIGNhdXNlIGZsYWtpbmVzcyB0byByZXVzZSB0
aGUgdmlldy4gV2Ugc2hvdWxkIGFsc28gYWx3YXlzIG1ha2UgYSBuZXcgdmlldyBpZiB0aGUgdGVz
dCBpcyBtYXJrZWQgYXMgYXBwLWJvdW5kLCBiZWNhdXNlCiAgICAgICAgIC8vIHRoZSB2aWV3IGNv
bmZpZ3VyYXRpb24gbXVzdCBjaGFuZ2UuCi0gICAgICAgIGlmICghbV9jcmVhdGVkT3RoZXJQYWdl
ICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykgJiYgIW9wdGlv
bnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmICghbV9jcmVhdGVkT3RoZXJQYWdlICYm
IG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykgJiYgIW9wdGlvbnMu
aXNBcHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB3aWxs
RGVzdHJveVdlYlZpZXcoKTsKQEAgLTgzNiw4ICs4MzQsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0VGVzdFJ1bm5lck92
ZXJyaWRlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBXS1ByZWZlcmVuY2VzRW5hYmxlQWxsRXhwZXJp
bWVudGFsRmVhdHVyZXMocHJlZmVyZW5jZXMpOwotICAgIGZvciAoY29uc3QgYXV0byYgZXhwZXJp
bWVudGFsRmVhdHVyZSA6IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAgIFdL
UHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBleHBl
cmltZW50YWxGZWF0dXJlLnZhbHVlLCB0b1dLKGV4cGVyaW1lbnRhbEZlYXR1cmUua2V5KS5nZXQo
KSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiBvcHRpb25zLmV4cGVyaW1l
bnRhbEZlYXR1cmVzKCkpCisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0
dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAogICAgIFdL
UHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJlbmNlcyk7CiAK
QEAgLTg2MiwxNyArODYwLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5j
ZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJl
ZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIikuZ2V0KCkpOwogI2Vu
ZGlmCiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0dXJlIDogb3B0aW9u
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5h
bERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUudmFs
dWUsIHRvV0soaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUua2V5KS5nZXQoKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBba2V5LCB2YWx1ZV0gIDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMoKSkK
KyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MpOwotICAgIFdLUHJl
ZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vzcyk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5l
bmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1
cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVv
SW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRl
b0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVBy
b2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BV
UHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NF
bmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNz
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3NFbmFibGVk
KHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcygpKTsK
ICNlbmRpZgotICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbkVuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuc2hvdWxkRW5hYmxlUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24oKSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VWaXNpYmlsaXR5
QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJs
ZUFwcE5hcCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpLnNob3VsZEVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlVmlzaWJp
bGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5l
bmFibGVBcHBOYXAoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFN1
YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAg
ICAgV0tQcmVmZXJlbmNlc1NldFhTU0F1ZGl0b3JFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7
CkBAIC04ODMsMTAgKzg4MSwxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVu
Y2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MocHJlZmVy
ZW5jZXMsIGtXS0phdmFTY3JpcHRSdW50aW1lRmxhZ3NBbGxFbmFibGVkKTsKICAgICBXS1ByZWZl
cmVuY2VzU2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShwcmVmZXJlbmNl
cywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRET01QYXN0ZUFsbG93
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0RE9NUGFzdGVBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmRvbVBhc3RlQWxsb3dl
ZCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzQWxs
b3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEZpbGVBY2Nlc3NG
cm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmFs
bG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMpOworICAgIFdLUHJlZmVyZW5jZXNTZXRUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcygpKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgV0tQ
cmVmZXJlbmNlc1NldEZ1bGxTY3JlZW5FbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICNlbmRp
ZgpAQCAtODk5LDE4ICs4OTcsMTggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJl
bmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQo
cHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXREaWFsb2dFbGVtZW50RW5h
YmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0TW9ja1Njcm9s
bGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzKTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJlZmVyZW5jZXMsIG9w
dGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRBdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXR0YWNobWVu
dEVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNZW51SXRlbUVsZW1lbnRFbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUtl
eWdlbkVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0V2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDb2xvckZpbHRlckVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZlcmVuY2VzLCBvcHRp
b25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRpb25zLm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBdHRhY2htZW50RWxlbWVu
dEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQoKSk7
CisgICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRL
ZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVLZXlnZW5FbGVt
ZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKCkpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24oKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1
dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcigpKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENvbG9yRmlsdGVyRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcigpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywg
b3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUJh
Y2tGb3J3YXJkQ2FjaGUoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5nZXQoKSk7CiAKQEAgLTkz
Miw3ICs5MzAsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAg
ICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKHBy
ZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VDU1NBbmlt
YXRpb25TdXNwZW5zaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogCi0gICAgV0tQcmVm
ZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIG1fc2hvdWxk
VXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChwcmVmZXJlbmNl
cywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51c2VBY2NlbGVyYXRl
ZERyYXdpbmcoKSk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSB0ZXN0aW5nIHRoZSBkZWZh
dWx0LgogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3kocHJlZmVyZW5j
ZXMsIGtXS0FsbG93QWxsU3RvcmFnZSk7CiAKQEAgLTk1Myw3ICs5NTEsNyBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgCiAgICAgV0tQcmVmZXJlbmNlc1Nl
dExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogCi0g
ICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0U3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIApAQCAtOTcyLDcgKzk3MCw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2Vz
U2V0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUocHJlZmVyZW5jZXMsIGZhbHNlKTsK
ICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5j
ZXMsIGZhbHNlLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3BlYWtlclNlbGVjdGlv
blJlcXVpcmVzVXNlckdlc3R1cmUiKSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0U2hvdWxkVXNl
U2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0
aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywgb3B0aW9ucy51
c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KCkpOwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFlfSVNPTEFURURfVFJFRSkKICAgICBXS1ByZWZlcmVuY2VzU2V0SXNBY2Nlc3NpYmlsaXR5SXNv
bGF0ZWRUcmVlRW5hYmxlZChwcmVmZXJlbmNlcywgYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1v
ZGUoKSk7CkBAIC0xMDA2LDExICsxMDA0LDEyIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0
U3RhdGVUb0NvbnNpc3QKICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiQWNjZXNzaWJp
bGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUpOwogI2Vu
ZGlmCiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKQotICAgICAgICBzZXRW
YWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlvbnMuanNjT3B0aW9ucy5j
X3N0cigpKTsKKyAgICBhdXRvIGpzY09wdGlvbnMgPSBvcHRpb25zLmpzY09wdGlvbnMoKTsKKyAg
ICBpZiAoIWpzY09wdGlvbnMuZW1wdHkoKSkKKyAgICAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdl
Qm9keSwgIkpTQ09wdGlvbnMiLCBqc2NPcHRpb25zLmNfc3RyKCkpOwogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5j
X3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVz
KCkuY19zdHIoKSk7CiAjZW5kaWYKIAogICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1
bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0
b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKQEAgLTExMTgsNyAr
MTExNyw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKIAogICAg
IHNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoZmFsc2UpOwogICAgIAotICAgIHNldElnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMp
OworICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdw
b3J0U2NhbGVMaW1pdHMoKSk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVVUkxzID0gbnVsbHB0cjsK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTMxOCw3ICsxMzE3LDcgQEAgc3RhdGljIHN0
ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVmIHVybAogICAgIHJldHVybiBzdGQ6OnN0cmluZygp
OwogfQogCi1zdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JV
UkwpCitXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBw
YXRoT3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRoT3JVUkwsICJodHRwOi8vIikgfHwgc3Ry
c3RyKHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImZpbGU6Ly8i
KSkKICAgICAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHBhdGhPclVSTCk7
CkBAIC0xMzU2LDIyMSArMTM1NSwyNSBAQCBzdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChj
b25zdCBjaGFyCiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1ZmZlci5n
ZXQoKSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZShjb25z
dCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJ0cnVlIikKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMnIGZv
ciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUuY19z
dHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgdmFs
dWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgYXV0byBiYXNlVVJMID0g
YWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAgYXV0byByZWxh
dGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2
YWx1ZS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChy
ZWxhdGl2ZVVSTC5nZXQoKSkpKTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5n
VGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewotICAgIHJl
dHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhjcmVhdGVUZXN0VVJMKHZhbHVlLmNf
c3RyKCkpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVh
ZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKLXsKLSAgICBzdGQ6OnN0cmluZyBm
aWxlbmFtZSA9IGFic29sdXRlUGF0aDsKLSAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkgewotICAg
ICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhl
IHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgZmlsZW5hbWUgPSB0ZXN0UGF0aChhZG9w
dFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0ZDo6c3Ry
aW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0RmlsZShmaWxlbmFtZS5kYXRhKCkp
OwotICAgIGlmICghdGVzdEZpbGUuZ29vZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgZ2V0bGlu
ZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtp
dC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKLSAg
ICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7Ci0gICAg
aWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAgIHJldHVybjsK
LSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxv
Y2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMi
LCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdGQ6OnN0
cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3Ry
aW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNp
emUoKSkpOwotICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOwotICAgIHdoaWxlIChwYWlyU3RhcnQg
PCBwYWlyU3RyaW5nLnNpemUoKSkgewotICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJp
bmcuZmluZCgiICIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3Ry
aW5nOjpucG9zKQotICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOwotICAg
ICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3Rh
cnQpOwotICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAo
Y291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBmaWxlbmFtZS5jX3N0cigpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8ga2V5ID0gcGFpclN0
cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFydCk7Ci0gICAg
ICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlvbiArIDEsIHBh
aXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0KLSAgICAgICAgaWYgKCFrZXkucmZpbmQo
ImV4cGVyaW1lbnRhbDoiKSkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7Ci0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQoU3RyaW5nKGtl
eS5jX3N0cigpKSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWtleS5yZmluZCgiaW50ZXJuYWw6IikpIHsKLSAgICAgICAgICAg
IGtleSA9IGtleS5zdWJzdHIoOSk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5pbnRlcm5hbERl
YnVnRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19zdHIoKSksIHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtleSA9PSAibGFuZ3Vh
Z2UiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMub3ZlcnJpZGVMYW5n
dWFnZXMgPSBTdHJpbmcodmFsdWUuY19zdHIoKSkuc3BsaXQoJywnKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRmxl
eGlibGVWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VGbGV4aWJsZVZpZXdw
b3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJ1c2VEYXRhRGV0ZWN0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVz
ZURhdGFEZXRlY3Rpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInVzZU1vY2tTY3JvbGxiYXJzIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
aWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUNoYXJhY3RlclNlbGVjdGlvbkdy
YW51bGFyaXR5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlv
bkdyYW51bGFyaXR5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Npb24iKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlTWVudUl0ZW1FbGVtZW50
IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVLZXln
ZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBvaW50
ZXJMb2NrIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVBvaW50ZXJMb2NrID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFi
bGVXZWJBdXRoZW50aWNhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1
dGhlbnRpY2F0b3IiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGlj
YXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5kdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0aW9uTWFuaWZlc3QiKQotICAgICAg
ICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdCA9IHBhcnNlU3RyaW5nVGVzdEhl
YWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNl
c1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImRvbVBhc3RlQWxsb3dlZCIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJs
ZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy51c2VTZXJ2aWNlV29ya2Vy
U2hvcnRUaW1lb3V0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRz
SW5EYXJrTW9kZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dy
b3VuZHNJbkRhcmtNb2RlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
InJ1blNpbmdseSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5ydW5TaW5nbHkgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNo
b3VsZElnbm9yZU1ldGFWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRJ
Z25vcmVNZXRhVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNwZWxsQ2hlY2tpbmdEb3RzIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlU2Vy
dmljZUNvbnRyb2xzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVNlcnZpY2VDb250
cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZWRpdGFibGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZWRpdGFibGUg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNob3VsZFByZXNlbnRQb3BvdmVycyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImNv
bnRlbnRJbnNldC50b3AiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGVudEluc2V0VG9w
ID0gc3RkOjpzdG9kKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJpZ25vcmVTeW5j
aHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRl
eHRPcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImNvbnRl
bnRNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRlbnRNb2RlID0geyB2YWx1ZS5j
X3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllciA9IHsgdmFsdWUuY19zdHIoKSB9OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJs
ZUFwcE5hcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBcHBOYXAgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dzTGlua1ByZXZpZXciKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFi
bGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFi
bGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQ
cm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BV
UHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVJ
bkFwcEJyb3dzZXJQcml2YWN5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwgPSBwYXJzZVN0
cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJpc0FwcEJvdW5kV2ViVmlldyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5pc0FwcEJvdW5k
V2ViVmlldyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHBh
aXJTdGFydCA9IHBhaXJFbmQgKyAxOwotICAgIH0KLX0KLQogVGVzdE9wdGlvbnMgVGVzdENvbnRy
b2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkgY29u
c3QKIHsKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zKGNvbW1hbmQucGF0aE9yVVJMKTsKLQotICAg
IG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gbV9zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7
Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IG1fc2hvdWxkU2hvd1dlYlZpZXc7Ci0K
LSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2ludGVybmFsRmVhdHVyZXMpCi0gICAgICAgIG9w
dGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmFkZChmZWF0dXJlLmtleSwgZmVhdHVyZS52YWx1
ZSk7Ci0gICAgZm9yIChhdXRvJiBmZWF0dXJlIDogbV9leHBlcmltZW50YWxGZWF0dXJlcykKLSAg
ICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQoZmVhdHVyZS5rZXksIGZlYXR1
cmUudmFsdWUpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFsRmVhdHVyZXM7
CisgICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0
KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVE
ZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVm
YXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVz
LCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb21tYW5k
KSk7CiAKLSAgICB1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KG9wdGlv
bnMsIGNvbW1hbmQucGF0aE9yVVJMKTsKLSAgICB1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVh
ZGVyKG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJMLCBjb21tYW5kLmFic29sdXRlUGF0aCk7Ci0g
ICAgcGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhvcHRpb25zKTsKLQotICAgIHJldHVybiBvcHRpb25z
OworICAgIHJldHVybiBUZXN0T3B0aW9ucyB7IGZlYXR1cmVzIH07CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnVwZGF0ZVdlYlZpZXdTaXplRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYg
dGVzdCkKIHsKLSAgICB1bnNpZ25lZCB3aWR0aCA9IHZpZXdXaWR0aDsKLSAgICB1bnNpZ25lZCBo
ZWlnaHQgPSB2aWV3SGVpZ2h0OwotICAgIGlmICh0ZXN0Lm9wdGlvbnMoKS5pc1NWR1Rlc3QpIHsK
LSAgICAgICAgd2lkdGggPSB3M2NTVkdWaWV3V2lkdGg7Ci0gICAgICAgIGhlaWdodCA9IHczY1NW
R1ZpZXdIZWlnaHQ7Ci0gICAgfQotCi0gICAgbWFpbldlYlZpZXcoKS0+cmVzaXplVG8od2lkdGgs
IGhlaWdodCk7CisgICAgbWFpbldlYlZpZXcoKS0+cmVzaXplVG8odGVzdC5vcHRpb25zKCkudmll
d1dpZHRoKCksIHRlc3Qub3B0aW9ucygpLnZpZXdIZWlnaHQoKSk7CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdChQbGF0Zm9ybVdlYlZpZXcqIHZpZXcs
IGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewotICAgIHZpZXctPmNoYW5nZVdpbmRvd1Nj
YWxlSWZOZWVkZWQodGVzdC5vcHRpb25zKCkuZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHZpZXct
PmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQodGVzdC5vcHRpb25zKCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNv
bnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQpAQCAtMTc2Niw2ICsxNTY5LDEyIEBAIHN0YXRpYyBU
ZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCAKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZGllKGlucHV0TGluZSk7CiAgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQuYWJzb2x1dGVQ
YXRoLmVtcHR5KCkpIHsKKyAgICAgICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNp
b25zIGJldHdlZW4gYWxsIHRoZSBzdHJpbmcgdHlwZXMgYW5kIFVSTHMuCisgICAgICAgIHJlc3Vs
dC5hYnNvbHV0ZVBhdGggPSB0ZXN0UGF0aChhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVU
ZXN0VVJMKHJlc3VsdC5wYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKKyAgICB9CisKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNzg4LDcgKzE1OTcsNyBAQCBib29sIFRlc3RDb250cm9s
bGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqCiAgICAgaWYgKGNvbW1hbmQudGltZW91dCA+IDBfcykK
ICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRp
bWVvdXQpOwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0RHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXREdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0
aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSk7CiAKICAgICBwbGF0Zm9ybVdpbGxSdW5U
ZXN0KCptX2N1cnJlbnRJbnZvY2F0aW9uKTsKIApAQCAtMzAwMyw3ICsyODEyLDcgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAogCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25m
aWd1cmF0aW9uLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW9wdGlv
bnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vz
c2lvbigpKQogICAgICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShj
b25maWd1cmF0aW9uLCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsKIAogICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IFdLUGFnZUNvbmZpZ3VyYXRpb25HZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZp
Z3VyYXRpb24pOwpAQCAtMzgxOCw3ICszNjI3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVp
bml0aWFsaXplQXBwQm91bgogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlaW5pdGlhbGl6ZUFwcEJv
dW5kRG9tYWlucyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAotdm9p
ZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQordm9pZCBUZXN0Q29udHJvbGxlcjo6dXBk
YXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNhbGxiYWNrQ29udGV4
dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgp
LCB0b1dLKGJ1bmRsZUlkZW50aWZpZXIpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJp
dmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CkBAIC0zODMzLDggKzM2NDIsOSBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpjbGVhckJ1bmRsZUlkZW50aWZpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25z
JikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0Zl
YXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAog
eworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluamVjdFVzZXJT
Y3JpcHQoV0tTdHJpbmdSZWYpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyNjgxNTkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxX
ZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTEs
MTIgQEAgT0JKQ19DTEFTUyBXS1dlYlZpZXdDb25maWd1cmF0aW9uOwogCiBuYW1lc3BhY2UgV1RS
IHsKIAotY2xhc3MgVGVzdEludm9jYXRpb247CitjbGFzcyBFdmVudFNlbmRlclByb3h5OwogY2xh
c3MgT3JpZ2luU2V0dGluZ3M7CiBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7Ci1jbGFzcyBFdmVudFNl
bmRlclByb3h5OworY2xhc3MgVGVzdEludm9jYXRpb247CitjbGFzcyBUZXN0T3B0aW9uczsKIHN0
cnVjdCBUZXN0Q29tbWFuZDsKLXN0cnVjdCBUZXN0T3B0aW9uczsKIAogY2xhc3MgQXN5bmNUYXNr
IHsKIHB1YmxpYzoKQEAgLTkxLDExICs5Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBj
b25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3JpZXMoV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvblJlZik7CiAgICAgc3RhdGljIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHZpZXdXaWR0aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmlld0hlaWdodDsKLQotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB3M2NTVkdWaWV3V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHczY1NWR1ZpZXdIZWlnaHQ7CisgICAgc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRl
c3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKTsKIAogICAgIHN0YXRpYyBjb25zdCBXVEY6OlNl
Y29uZHMgZGVmYXVsdFNob3J0VGltZW91dDsKICAgICBzdGF0aWMgY29uc3QgV1RGOjpTZWNvbmRz
IG5vVGltZW91dDsKQEAgLTExNSwyMCArMTEyLDE1IEBAIHB1YmxpYzoKICAgICBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSgpOwogCiAgICAgRXZlbnRTZW5kZXJQcm94eSog
ZXZlbnRTZW5kZXJQcm94eSgpIHsgcmV0dXJuIG1fZXZlbnRTZW5kZXJQcm94eS5nZXQoKTsgfQot
Ci0gICAgYm9vbCBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFVzZVJlbW90ZUxheWVyVHJlZTsgfQogICAgIAogICAgIC8vIFJ1bnMgdGhlIHJ1biBsb29w
IHVudGlsIGBkb25lYCBpcyB0cnVlIG9yIHRoZSB0aW1lb3V0IGVsYXBzZXMuCiAgICAgYm9vbCB1
c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpIHsgcmV0dXJuIG1fdXNlV2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXI7IH0KICAgICB2b2lkIHJ1blVudGlsKGJvb2wmIGRvbmUsIFdURjo6U2Vjb25kcyB0
aW1lb3V0KTsKICAgICB2b2lkIG5vdGlmeURvbmUoKTsKIAotICAgIGJvb2wgc2hvdWxkU2hvd1dl
YlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNob3dXZWJWaWV3OyB9CiAgICAgYm9vbCB1
c2luZ1NlcnZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VzaW5nU2VydmVyTW9kZTsgfQogICAg
IHZvaWQgY29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKLSAgICAK
LSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTaG93
VG91Y2hlczsgfQotICAgIAorCiAgICAgYm9vbCBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWU7IH0KICAgICB2b2lkIHNldEJl
Zm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpIHsgbV9iZWZvcmVVbmxvYWRSZXR1cm5W
YWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTI3NSw3ICsyNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhckxvYWRlZFN1YnJlc291cmNlRG9tYWlucygpOwogICAgIHZvaWQgY2xlYXJBcHBCb3VuZFNl
c3Npb24oKTsKICAgICB2b2lkIHJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpOwotICAgIHZv
aWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdv
cmtQcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKICAgICB2b2lk
IGNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoKTsKIAogICAgIFdLQXJyYXlS
ZWYgb3BlblBhbmVsRmlsZVVSTHMoKSBjb25zdCB7IHJldHVybiBtX29wZW5QYW5lbEZpbGVVUkxz
LmdldCgpOyB9CkBAIC0zNjIsNyArMzU0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFdL
UmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRp
b24oY29uc3QgVGVzdE9wdGlvbnMmKTsKLSAgICBXS1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25z
OjpDb250ZXh0T3B0aW9ucyYpIGNvbnN0OworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZp
Z3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3QgQ29udGV4dE9w
dGlvbnMmKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIq
IGFyZ3ZbXSk7CiAgICAgdm9pZCBjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9w
dGlvbnMmKTsKICAgICB2b2lkIHJ1bigpOwpAQCAtMzgwLDcgKzM3Miw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKICAgICBXS0NvbnRleHRSZWYgcGxhdGZvcm1BZGp1
c3RDb250ZXh0KFdLQ29udGV4dFJlZiwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZik7CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFkZFRl
c3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZVdl
YlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICBz
dGF0aWMgUGxhdGZvcm1XZWJWaWV3KiBwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdl
YlZpZXcqIHBhcmVudFZpZXcsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRp
b25zJik7CiAgICAgdm9pZCBwbGF0Zm9ybVJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1
ZXMoKTsKQEAgLTM4OSw3ICszODAsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgY29jb2FQbGF0Zm9ybUluaXRpYWxpemUoKTsKICAgICB2b2lkIGNvY29hUmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYpOwotICAgIHZvaWQgc2V0
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IHN0ZDo6c3RyaW5nJik7CiAgICAgdm9p
ZCBjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllclRlc3RpbmdPdmVycmlkZSgpOwogI2Vu
ZGlmCiAgICAgdm9pZCBwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZv
Y2F0aW9uJik7CkBAIC00MDMsNyArMzk0LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZW5zdXJl
Vmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKICAgICBU
ZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsK
LSAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9w
dGlvbnMmLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKSBjb25zdDsKKyAgICBUZXN0RmVh
dHVyZXMgZ2xvYmFsRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNv
bnN0OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9y
bVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QoY29uc3QgVGVz
dEludm9jYXRpb24mKTsKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdChQbGF0Zm9y
bVdlYlZpZXcqLCBjb25zdCBUZXN0SW52b2NhdGlvbiYpOwpAQCAtNTM4LDggKzUzMSwxMCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9jcmVhdGVkT3RoZXJQYWdlIHsgZmFsc2UgfTsKICAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4gbV9wYXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4g
bV9hbGxvd2VkSG9zdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IG1faW50ZXJuYWxGZWF0
dXJlczsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gbV9leHBlcmltZW50YWxGZWF0dXJlczsK
KyAgICBUZXN0RmVhdHVyZXMgbV9nbG9iYWxGZWF0dXJlczsKKworICAgIHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbV9pbnRlcm5hbEZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbV9leHBlcmltZW50YWxGZWF0dXJlczsKIAog
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX2luamVjdGVkQnVuZGxlUGF0aDsKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbV90ZXN0UGx1Z2luRGlyZWN0b3J5OwpAQCAtNTQ4LDcg
KzU0Myw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1XZWJWaWV3
PiBtX21haW5XZWJWaWV3OwogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0
OwotICAgIE9wdGlvbmFsPFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9ucz4gbV9jb250ZXh0T3B0
aW9uczsKKyAgICBPcHRpb25hbDxDb250ZXh0T3B0aW9ucz4gbV9jb250ZXh0T3B0aW9uczsKICAg
ICBXS1JldGFpblB0cjxXS1BhZ2VHcm91cFJlZj4gbV9wYWdlR3JvdXA7CiAgICAgV0tSZXRhaW5Q
dHI8V0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWY+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwog
CkBAIC02MDUsMTQgKzYwMCwxMCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2ZvcmNlQ29tcGxl
eFRleHQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRVc2VSZW1vdGVMYXllclRyZWUgeyBmYWxzZSB9
OwotCisgICAgCiAgICAgYm9vbCBtX3Nob3VsZExvZ0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRMb2dEb3dubG9hZENhbGxi
YWNrcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFj
a3MgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRTaG93V2ViVmlldyB7IGZhbHNlIH07Ci0g
ICAgCi0gICAgYm9vbCBtX3Nob3VsZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKICAgICBib29sIG1f
Y2hlY2tGb3JXb3JsZExlYWtzIHsgZmFsc2UgfTsKIAogICAgIGJvb2wgbV9hbGxvd0FueUhUVFBT
Q2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgeyBmYWxzZSB9OwpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzEsMTEgKzEzMSwxMSBAQCBib29sIFRlc3RJbnZvY2F0aW9uOjpzaG91bGRMb2dIaXN0b3J5Q2xp
CiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBUZXN0SW52b2NhdGlvbjo6Y3Jl
YXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7CiAgICAgYXV0byBiZWdpblRlc3RNZXNzYWdl
Qm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKLSAgICBzZXRWYWx1
ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCku
dXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHks
ICJVc2VGbGV4aWJsZVZpZXdwb3J0Iiwgb3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQoKSk7
CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1w
UGl4ZWxzKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV90aW1lb3V0Lm1pbGxpc2Vjb25kcygpKSk7CiAgICAgc2V0
VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBt
X2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7Ci0gICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2Fn
ZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlv
bmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RN
ZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgb3B0aW9ucygpLmFk
ZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCkuY19zdHIoKSk7CiAgICAgcmV0dXJuIGJlZ2lu
VGVzdE1lc3NhZ2VCb2R5OwogfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRp
b25zLmNwcAkocmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDM0ICsyNiwzNjIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0T3B0aW9ucy5oIgogCisjaW5jbHVkZSAiU3RyaW5n
RnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxmc3Ry
ZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU3RkRmlsZXN5c3RlbS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjZGVmaW5lIERVTVBfRkVBVFVSRVMgMAorCiBuYW1l
c3BhY2UgV1RSIHsKIAotc3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKKyNpZiBEVU1QX0ZFQVRVUkVTCitz
dGF0aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29uc3QgVGVzdEZlYXR1cmVzJiBmZWF0dXJlcykKIHsK
LSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHBhdGguY29u
dGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KKyAgICBpZiAoZmVhdHVyZXMu
ZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJl
cy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5
KCkgJiYgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBz
dGQ6OmNlcnIgPDwgIiAgW0VNUFRZXVxuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoIWZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAg
ICAgc3RkOjpjZXJyIDw8ICIgIEV4cGVyaW1lbnRhbCBGZWF0dXJlczogXG4iOworICAgICAgICBm
b3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisg
ICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8
ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVt
cHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEludGVybmFsIEZlYXR1cmVzOiBcbiI7
CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5pbnRlcm5hbERlYnVn
RmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAi
IDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuYm9vbEZlYXR1cmVz
LmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEJvb2wgRmVhdHVyZXM6IFxuIjsK
KyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmJvb2xGZWF0dXJlcykK
KyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUg
PDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgp
KSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBEb3VibGUgRmVhdHVyZXM6IFxuIjsKKyAgICAg
ICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKQorICAg
ICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAn
XG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkpIHsK
KyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmluZyBGZWF0dXJlczogXG4iOworICAgICAgICBm
b3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpCisgICAgICAg
ICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7
CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkg
eworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIFZlY3RvciBGZWF0dXJlczogXG4iOwor
ICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVh
dHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiBOdW1i
ZXIgb2Ygc3RyaW5ncyAiIDw8IHZhbHVlLnNpemUoKSA8PCAnXG4nOworICAgIH0KIH0KKyNlbmRp
ZgogCi1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKQordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0
dXJlcyBhZGRpdGlvbmFsKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAi
dmlld3BvcnQvIikgJiYgIXBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aXN1YWwtdmlld3BvcnQv
Iik7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzdGQ6OnVub3JkZXJlZF9tYXA6Om1l
cmdlIHdoZW4gaXQgaXMgYXZhaWxhYmxlIGZvciBhbGwgcG9ydHMuCisKKyAgICBmb3IgKGF1dG8g
W2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5leHBlcmltZW50YWxGZWF0dXJlcykKKyAgICAgICAg
YmFzZS5leHBlcmltZW50YWxGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOwor
ICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmludGVybmFsRGVidWdGZWF0
dXJlcykKKyAgICAgICAgYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2ln
bihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5i
b29sRmVhdHVyZXMpCisgICAgICAgIGJhc2UuYm9vbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24o
a2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuZG91
YmxlRmVhdHVyZXMpCisgICAgICAgIGJhc2UuZG91YmxlRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2ln
bihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5z
dHJpbmdGZWF0dXJlcykKKyAgICAgICAgYmFzZS5zdHJpbmdGZWF0dXJlcy5pbnNlcnRfb3JfYXNz
aWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFs
LnN0cmluZ1ZlY3RvckZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ1ZlY3RvckZlYXR1cmVz
Lmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdGQ6OnVu
b3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBib29sRGVmYXVsdHNNYXAoKQoreworICAg
IHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1hcCB7CisgICAg
ICAgIHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlQWNj
ZWxlcmF0ZWREcmF3aW5nIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJUcmVl
IiwgZmFsc2UgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1dlYlZpZXciLCBmYWxzZSB9LAorICAg
ICAgICB7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlRGF0
YURldGVjdGlvbiIsIGZhbHNlIH0sCisgICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJzIiwgdHJ1
ZSB9LAorICAgICAgICB7ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIGZhbHNlIH0sCisgICAg
ICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgZmFsc2UgfSwKKyAgICAgICAgeyAi
dXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBmYWxzZSB9LAorICAgICAgICB7ICJl
bmFibGVBdHRhY2htZW50RWxlbWVudCIsIGZhbHNlIH0sCisgICAgICAgIHsgImVuYWJsZUludGVy
c2VjdGlvbk9ic2VydmVyIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlRXBoZW1lcmFsU2Vzc2lv
biIsIGZhbHNlIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIGZhbHNlIH0s
CisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBmYWxzZSB9LAorICAgICAgICB7ICJl
bmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgdHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVQb2lu
dGVyTG9jayIsIGZhbHNlIH0sCisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwg
dHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGlj
YXRvciIsIHRydWUgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgZmFs
c2UgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBmYWxzZSB9LAorICAgICAgICB7
ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBmYWxzZSB9LAorICAgICAgICB7ICJhbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlIH0sCisgICAg
ICAgIHsgImRvbVBhc3RlQWxsb3dlZCIsIHRydWUgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JG
aWx0ZXIiLCBmYWxzZSB9LAorICAgICAgICB7ICJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRh
cmtNb2RlIiwgZmFsc2UgfSwKKyAgICAgICAgeyAicnVuU2luZ2x5IiwgZmFsc2UgfSwKKyAgICAg
ICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgZmFsc2UgfSwKKyAgICAgICAgeyAic2hvdWxkSWdu
b3JlTWV0YVZpZXdwb3J0IiwgZmFsc2UgfSwKKyAgICAgICAgeyAic3BlbGxDaGVja2luZ0RvdHMi
LCBmYWxzZSB9LAorICAgICAgICB7ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBmYWxzZSB9LAor
ICAgICAgICB7ICJlZGl0YWJsZSIsIGZhbHNlIH0sCisgICAgICAgIHsgInNob3VsZEhhbmRsZVJ1
bk9wZW5QYW5lbCIsIHRydWUgfSwKKyAgICAgICAgeyAic2hvdWxkUHJlc2VudFBvcG92ZXJzIiwg
dHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVBcHBOYXAiLCBmYWxzZSB9LAorICAgICAgICB7ICJl
bmFibGVCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UgfSwKKyAgICAgICAgeyAiYWxsb3dzTGlua1By
ZXZpZXciLCB0cnVlIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNz
IiwgZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIiwg
ZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBmYWxz
ZSB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBmYWxzZSB9
LAorICAgICAgICB7ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSB9LAorICAg
ICAgICB7ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IiwgZmFsc2UgfSwKKyAgICAgICAgeyAi
aXNBcHBCb3VuZFdlYlZpZXciLCBmYWxzZSB9LAorICAgICAgICB7ICJpZ25vcmVTeW5jaHJvbm91
c01lc3NhZ2luZ1RpbWVvdXRzIiwgZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24iLCB0cnVlIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25X
aW5kb3dPcGVuIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNob3J0VGlt
ZW91dCIsIGZhbHNlIH0KKyAgICB9OworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGRvdWJsZT4mIGRvdWJsZURlZmF1bHRz
TWFwKCkKK3sKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBkb3Vi
bGU+IG1hcCB7CisgICAgICAgIHsgImNvbnRlbnRJbnNldC50b3AiLCAwIH0sCisgICAgICAgIHsg
ImRldmljZVNjYWxlRmFjdG9yIiwgMSB9LAorICAgICAgICB7ICJ2aWV3V2lkdGgiLCA4MDAgfSwK
KyAgICAgICAgeyAidmlld0hlaWdodCIsIDYwMCB9CisgICAgfTsKKyAgICByZXR1cm4gbWFwOwor
fQorCitzdGF0aWMgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0
cmluZz4mIHN0cmluZ0RlZmF1bHRzTWFwKCkKK3sKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gbWFwIHsKKyAgICAgICAgeyAiYXBwbGljYXRp
b25NYW5pZmVzdCIsIHsgfSB9LAorICAgICAgICB7ICJqc2NPcHRpb25zIiwgeyB9IH0sCisgICAg
ICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgeyB9IH0sCisgICAgICAgIHsg
InN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIHsgfSB9LAorICAgICAgICB7ICJjb250ZW50
TW9kZSIsIHsgfSB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiLCB7
IH0gfQorICAgIH07CisgICAgcmV0dXJuIG1hcDsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkVXNl
Rml4ZWRMYXlvdXQoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBjb25zdCBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4m
IHN0cmluZ1ZlY3RvckRlZmF1bHRzTWFwKCkKIHsKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQotICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiZGV2aWNlLWFkYXB0LyIp
IHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHRcXCIpKQorICAgIHN0YXRp
YyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
Pj4gbWFwIHsKKyAgICAgICAgeyAibGFuZ3VhZ2UiLCB7IH0gfQorICAgIH07CisgICAgcmV0dXJu
IG1hcDsKK30KKworZW51bSBjbGFzcyBLZXlUeXBlIDogdWludDhfdCB7CisgICAgQm9vbCwKKyAg
ICBEb3VibGUsCisgICAgU3RyaW5nLAorICAgIFN0cmluZ1JlbGF0aXZlUGF0aCwKKyAgICBTdHJp
bmdVUkwsCisgICAgU3RyaW5nVmVjdG9yLAorICAgIFVua25vd24KK307CisKK3N0YXRpYyBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIEtleVR5cGU+JiBrZXlUeXBlTWFwKCkK
K3sKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBLZXlUeXBlPiBt
YXAgeworICAgICAgICB7ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3aW5nIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
InNob3VsZFNob3dXZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VGbGV4
aWJsZVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VEYXRhRGV0ZWN0
aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VNb2NrU2Nyb2xsYmFycyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0
eSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVy
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNZW51SXRlbUVsZW1lbnQiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZVBvaW50ZXJMb2NrIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRvbVBhc3RlQWxsb3dlZCIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0ZXIiLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
InNwZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVT
ZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVkaXRhYmxlIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiLCBL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFByZXNlbnRQb3BvdmVycyIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAi
ZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNob3J0VGltZW91
dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAgeyAiY29udGVudEluc2V0LnRvcCIs
IEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZpY2VTY2FsZUZhY3RvciIsIEtleVR5
cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJ2aWV3V2lkdGgiLCBLZXlUeXBlOjpEb3VibGUgfSwK
KyAgICAgICAgeyAidmlld0hlaWdodCIsIEtleVR5cGU6OkRvdWJsZSB9LAorCisgICAgICAgIHsg
ImpzY09wdGlvbnMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiY29udGVu
dE1vZGUiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uTWFu
aWZlc3QiLCBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGggfSwKKyAgICAgICAgeyAic3RhbmRh
bG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgS2V5VHlwZTo6U3RyaW5nVVJMIH0sCisKKyAgICAgICAg
eyAibGFuZ3VhZ2UiLCBLZXlUeXBlOjpTdHJpbmdWZWN0b3IgfSwKKyAgICB9OworCisgICAgcmV0
dXJuIG1hcDsKK30KKworc3RhdGljIEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCit7
CisgICAgYXV0byBtYXAgPSBrZXlUeXBlTWFwKCk7CisgICAgYXV0byBpdCA9IG1hcC5maW5kKGtl
eSk7CisgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEtleVR5cGU6OlVu
a25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09ICJ0cnVlIikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKKyAgICBpZiAo
dmFsdWUgPT0gImZhbHNlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX0VSUk9S
KCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3Rl
ZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2YWx1ZS5jX3N0cigpKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBib29sIGlzU1ZHVGVzdFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCkKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVs
YXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBh
dGhPclVSTCkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0Mt
U1ZHLTEuMSIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdcXFczQy1TVkctMS4xIik7
CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVS
TChwYXRoT3JVUkwuY19zdHIoKSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdL
VVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOworICAg
IHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7
Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJM
KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhX
S1VSTENvcHlTdHJpbmcoVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIo
KSkpKSk7Cit9CisKK3N0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6Zmls
ZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQoreworICAg
IFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBpZiAoIXN0ZDo6ZmlsZXN5c3RlbTo6ZXhpc3Rz
KHBhdGgpKQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisKKyAgICBzdGQ6Omlmc3RyZWFtIGZp
bGUocGF0aCk7CisgICAgaWYgKCFmaWxlLmdvb2QoKSkgeworICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBvcGVuIGZpbGUgdG8gaW5zcGVjdCB0ZXN0IGhlYWRlcnMgaW4gJXMiLCBwYXRoLmNf
c3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorCisgICAgc3RkOjpzdHJp
bmcgb3B0aW9uczsKKyAgICBnZXRsaW5lKGZpbGUsIG9wdGlvbnMpOworICAgIHN0ZDo6c3RyaW5n
IGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAiKTsKKyAgICBzdGQ6OnN0cmluZyBl
bmRTdHJpbmcoIiBdIik7CisgICAgc2l6ZV90IGJlZ2luTG9jYXRpb24gPSBvcHRpb25zLmZpbmQo
YmVnaW5TdHJpbmcpOworICAgIGlmIChiZWdpbkxvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9z
KQorICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgc2l6ZV90IGVuZExvY2F0aW9uID0gb3B0
aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlvbik7CisgICAgaWYgKGVuZExvY2F0aW9u
ID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGZp
bmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0
dXJuIGZlYXR1cmVzOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9u
cy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24g
LSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSkpOworICAgIHNpemVfdCBwYWly
U3RhcnQgPSAwOworICAgIHdoaWxlIChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgewor
ICAgICAgICBzaXplX3QgcGFpckVuZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7
CisgICAgICAgIGlmIChwYWlyRW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAg
cGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6ZSgpOworICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRp
b24gPSBwYWlyU3RyaW5nLmZpbmQoIj0iLCBwYWlyU3RhcnQpOworICAgICAgICBpZiAoZXF1YWxz
TG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
TWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJh
Y3RlcikgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYXV0byBrZXkgPSBwYWlyU3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFs
c0xvY2F0aW9uIC0gcGFpclN0YXJ0KTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcu
c3Vic3RyKGVxdWFsc0xvY2F0aW9uICsgMSwgcGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEp
KTsKKworICAgICAgICBpZiAoa2V5LnJmaW5kKCJleHBlcmltZW50YWw6IikgPT0gMCkgeworICAg
ICAgICAgICAga2V5ID0ga2V5LnN1YnN0cigxMyk7CisgICAgICAgICAgICBmZWF0dXJlcy5leHBl
cmltZW50YWxGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5LnJmaW5kKCJpbnRlcm5hbDoiKSA9
PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDkpOworICAgICAgICAgICAgZmVh
dHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoa2V5
VHlwZShrZXkpKSB7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6Qm9vbDoKKyAgICAgICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBl
OjpEb3VibGU6CisgICAgICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyBr
ZXksIHN0ZDo6c3RvZCh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBLZXlUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5p
bnNlcnQoeyBrZXksIHZhbHVlIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
S2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5n
RmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRp
dmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgS2V5VHlwZTo6U3RyaW5nVVJMOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVh
dHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVl
KSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1Zl
Y3RvcjoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLmluc2VydCh7
IGtleSwgc3BsaXQodmFsdWUsICcsJykgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBLZXlUeXBlOjpVbmtub3duOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGtl
eSwgJyVzLCBpbiB0ZXN0IGhlYWRlciBpbiAlcyIsIGtleS5jX3N0cigpLCBwYXRoLmNfc3RyKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwYWlyU3RhcnQgPSBw
YWlyRW5kICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBi
b29sIHBhdGhDb250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFy
KiBzdWJzdHJpbmcpCit7CisgICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3RyKCkpOworICAg
IHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7IC8vIENhc2UtaW5zZW5zaXRpdmUuCit9
CisKK3N0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpCit7CisgICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2
aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3cG9ydC8i
KTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQpAQCAtNjEsMTMgKzM4OSwyMCBAQCBzdGF0aWMgYm9vbCBzaG91
bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvCiAgICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwogfQogCi1zdGF0aWMg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JV
UkwpCitzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVW
aWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7
CisgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBw
YXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQorICAgICAgICByZXR1
cm4geyB7IDQ4MCwgMzYwIH0gfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitzdGF0
aWMgT3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewogICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9y
VVJMLCAiL2hpZHBpLTN4LSIpKQogICAgICAgICByZXR1cm4gMzsKICAgICBpZiAocGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgIi9oaWRwaS0iKSkKICAgICAgICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJu
IDE7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkRHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCkBAIC04
MywxNCArNDE4LDEwMSBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRF
CiAgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJz
b2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNv
Y2tldHMiKTsKIH0KIAotVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwpCi0gICAgOiB1c2VGbGV4aWJsZVZpZXdwb3J0KHNob3VsZE1ha2VWaWV3cG9y
dEZsZXhpYmxlKHBhdGhPclVSTCkpCi0gICAgLCB1c2VGaXhlZExheW91dChzaG91bGRVc2VGaXhl
ZExheW91dChwYXRoT3JVUkwpKQotICAgICwgaXNTVkdUZXN0KGlzU1ZHVGVzdFBhdGgocGF0aE9y
VVJMKSkKLSAgICAsIHVzZUVwaGVtZXJhbFNlc3Npb24oc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lv
bihwYXRoT3JVUkwpKQotICAgICwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKHNob3VsZER1bXBK
U0NvbnNvbGVMb2dJblN0ZEVycihwYXRoT3JVUkwpKQotICAgICwgZGV2aWNlU2NhbGVGYWN0b3Io
ZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KHBhdGhPclVSTCkpCitUZXN0RmVhdHVyZXMgaGFyZGNv
ZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQp
Cit7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworCisgICAgaWYgKHNob3VsZE1ha2VWaWV3
cG9ydEZsZXhpYmxlKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgdHJ1ZSB9KTsKKyAgICBpZiAo
c2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIHRydWUg
fSk7CisgICAgaWYgKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhP
clVSTCkpCisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyIiwgdHJ1ZSB9KTsKKyAgICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3Rv
ciA9IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsg
ZGV2aWNlU2NhbGVGYWN0b3IgIT0gV1RGOjpudWxsb3B0KQorICAgICAgICBmZWF0dXJlcy5kb3Vi
bGVGZWF0dXJlcy5pbnNlcnQoeyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBkZXZpY2VTY2FsZUZhY3Rv
ci52YWx1ZSgpIH0pOworICAgIGlmIChhdXRvIHZpZXdXaWR0aEFuZEhlaWdodCA9IG92ZXJyaWRl
Vmlld1dpZHRoQW5kSGVpZ2h0Rm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IHZpZXdXaWR0aEFu
ZEhlaWdodCAhPSBXVEY6Om51bGxvcHQpIHsKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVy
ZXMuaW5zZXJ0KHsgInZpZXdXaWR0aCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+Zmlyc3QgfSk7Cisg
ICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3SGVpZ2h0Iiwgdmll
d1dpZHRoQW5kSGVpZ2h0LT5zZWNvbmQgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVz
OworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQoreworICAgIHJldHVybiBwYXJzZVRlc3RIZWFk
ZXIoY29tbWFuZC5hYnNvbHV0ZVBhdGgsIGNvbW1hbmQucGF0aE9yVVJMKTsKK30KKworVGVzdE9w
dGlvbnM6OlRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyBmZWF0dXJlcykKKyAgICA6IG1fZmVhdHVy
ZXMgeyBmZWF0dXJlcyB9Cit7CisjaWYgRFVNUF9GRUFUVVJFUworICAgIHN0ZDo6Y2VyciA8PCAi
RFVNUElORyBGRUFUVVJFU1xuIjsKKyAgICBkdW1wRmVhdHVyZXMobV9mZWF0dXJlcyk7CisjZW5k
aWYKK30KKworYm9vbCBUZXN0T3B0aW9uczo6aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK3sKKyAgICBpZiAobV9mZWF0dXJlcy5l
eHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVh
dHVyZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJl
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIFtrZXksIGtleVR5cGVd
IDoga2V5VHlwZU1hcCgpKSB7CisgICAgICAgIHN3aXRjaCAoa2V5VHlwZSkgeworICAgICAgICBj
YXNlIEtleVR5cGU6OkJvb2w6CisgICAgICAgICAgICBpZiAoYm9vbEZlYXR1cmVWYWx1ZShrZXkp
ICE9IG9wdGlvbnMuYm9vbEZlYXR1cmVWYWx1ZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OkRvdWJs
ZToKKyAgICAgICAgICAgIGlmIChkb3VibGVGZWF0dXJlVmFsdWUoa2V5KSAhPSBvcHRpb25zLmRv
dWJsZUZlYXR1cmVWYWx1ZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKKyAgICAgICAg
Y2FzZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAgIGNhc2UgS2V5VHlwZTo6
U3RyaW5nVVJMOgorICAgICAgICAgICAgaWYgKHN0cmluZ0ZlYXR1cmVWYWx1ZShrZXkpICE9IG9w
dGlvbnMuc3RyaW5nRmVhdHVyZVZhbHVlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVmVj
dG9yOgorICAgICAgICAgICAgaWYgKHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZShrZXkpICE9IG9w
dGlvbnMuc3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6VW5r
bm93bjoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBmZWF0dXJl
VmFsdWUoc3RkOjpzdHJpbmcga2V5LCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIFQ+JiBtYXAsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVD4mIGRl
ZmF1bHRzTWFwKQoreworICAgIGF1dG8gaXQgPSBtYXAuZmluZChrZXkpOworICAgIGlmIChpdCAh
PSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIAorICAgIGF1dG8g
ZGVmYXVsdHNNYXBJdCA9IGRlZmF1bHRzTWFwLmZpbmQoa2V5KTsKKyAgICBBU1NFUlQoZGVmYXVs
dHNNYXBJdCAhPSBkZWZhdWx0c01hcC5lbmQoKSk7CisgICAgcmV0dXJuIGRlZmF1bHRzTWFwSXQt
PnNlY29uZDsKK30KKworYm9vbCBUZXN0T3B0aW9uczo6Ym9vbEZlYXR1cmVWYWx1ZShzdGQ6OnN0
cmluZyBrZXkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIG1fZmVhdHVy
ZXMuYm9vbEZlYXR1cmVzLCBib29sRGVmYXVsdHNNYXAoKSk7Cit9Citkb3VibGUgVGVzdE9wdGlv
bnM6OmRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXkpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZlYXR1cmVWYWx1ZShrZXksIG1fZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMsIGRvdWJsZURl
ZmF1bHRzTWFwKCkpOworfQorc3RkOjpzdHJpbmcgVGVzdE9wdGlvbnM6OnN0cmluZ0ZlYXR1cmVW
YWx1ZShzdGQ6OnN0cmluZyBrZXkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShr
ZXksIG1fZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMsIHN0cmluZ0RlZmF1bHRzTWFwKCkpOworfQor
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IFRlc3RPcHRpb25zOjpzdHJpbmdWZWN0b3JGZWF0dXJl
VmFsdWUoc3RkOjpzdHJpbmcga2V5KSBjb25zdAogeworICAgIHJldHVybiBmZWF0dXJlVmFsdWUo
a2V5LCBtX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzLCBzdHJpbmdWZWN0b3JEZWZhdWx0
c01hcCgpKTsKIH0KIAogfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAko
cmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNjUgKzI1LDE0MCBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBXVFIgewogCi1zdHJ1
Y3QgVGVzdE9wdGlvbnMgewotICAgIHN0cnVjdCBDb250ZXh0T3B0aW9ucyB7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOwotICAgICAgICBib29sIGlnbm9yZVN5bmNo
cm9ub3VzTWVzc2FnaW5nVGltZW91dHMgeyBmYWxzZSB9OwotICAgICAgICBib29sIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIHsgdHJ1ZSB9OwotICAgICAgICBib29sIGVuYWJsZVByb2Nl
c3NTd2FwT25XaW5kb3dPcGVuIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCB1c2VTZXJ2aWNlV29y
a2VyU2hvcnRUaW1lb3V0IHsgZmFsc2UgfTsKLQotICAgICAgICBib29sIGhhc1NhbWVJbml0aWFs
aXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRz
ICE9IG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cwotICAgICAgICAg
ICAgICAgIHx8IG92ZXJyaWRlTGFuZ3VhZ2VzICE9IG9wdGlvbnMub3ZlcnJpZGVMYW5ndWFnZXMK
LSAgICAgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRp
b25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uCi0gICAgICAgICAgICAgICAgfHwgZW5h
YmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9u
V2luZG93T3BlbgotICAgICAgICAgICAgICAgIHx8IHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVv
dXQgIT0gb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBzaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBib29sIHVzZVRocmVhZGVkU2Nyb2xsaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIHVz
ZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VSZW1vdGVMYXllclRy
ZWUgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcgeyBmYWxzZSB9OwotICAg
IGJvb2wgdXNlRmxleGlibGVWaWV3cG9ydCB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VGaXhlZExh
eW91dCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc1NWR1Rlc3QgeyBmYWxzZSB9OwotICAgIGJvb2wg
dXNlRGF0YURldGVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VNb2NrU2Nyb2xsYmFycyB7
IHRydWUgfTsKLSAgICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIHsgZmFsc2UgfTsKLSAg
ICBib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIHsgZmFsc2UgfTsKLSAgICBib29sIHVz
ZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUF0dGFjaG1lbnRFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUludGVyc2VjdGlv
bk9ic2VydmVyIHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxz
ZSB9OwotICAgIGJvb2wgZW5hYmxlTWVudUl0ZW1FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29s
IGVuYWJsZUtleWdlbkVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlTW9kZXJuTWVk
aWFDb250cm9scyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZVBvaW50ZXJMb2NrIHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIHsgdHJ1ZSB9OwotICAgIGJvb2wg
ZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgeyB0cnVlIH07Ci0gICAg
Ym9vbCBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxk
U2hvd1RvdWNoZXMgeyBmYWxzZSB9OwotICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
IHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0Zv
ckNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKLSAgICBib29sIGRvbVBhc3RlQWxsb3dlZCB7IHRydWUg
fTsKLSAgICBib29sIGVuYWJsZUNvbG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAgICBib29sIHB1bmNo
T3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgeyBmYWxzZSB9OwotICAgIGJvb2wgcnVuU2lu
Z2x5IHsgZmFsc2UgfTsKLSAgICBib29sIGNoZWNrRm9yV29ybGRMZWFrcyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hv
dWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVNlcnZp
Y2VDb250cm9scyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlZGl0YWJsZSB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgeyB0cnVlIH07Ci0gICAgYm9vbCBzaG91bGRQ
cmVzZW50UG9wb3ZlcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVBcHBOYXAgeyBmYWxzZSB9
OwotICAgIGJvb2wgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBh
bGxvd3NMaW5rUHJldmlldyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0lu
VUlQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJv
Y2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MgeyBmYWxz
ZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyB7IHRydWUgfTsKLSAg
ICBib29sIGVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNB
cHBCb3VuZFdlYlZpZXcgeyBmYWxzZSB9OwotCi0gICAgZG91YmxlIGNvbnRlbnRJbnNldFRvcCB7
IDAgfTsKLQotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yIHsgMSB9OwotICAgIHN0ZDo6c3Ry
aW5nIGFwcGxpY2F0aW9uTWFuaWZlc3Q7Ci0gICAgc3RkOjpzdHJpbmcganNjT3B0aW9uczsKLSAg
ICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlczsKLSAgICBzdGQ6OnN0
cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkw7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBpbnRl
cm5hbERlYnVnRmVhdHVyZXM7Ci0gICAgU3RyaW5nIGNvbnRlbnRNb2RlOwotICAgIFN0cmluZyBh
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI7Ci0gICAgCi0gICAgQ29udGV4dE9wdGlvbnMgY29u
dGV4dE9wdGlvbnM7Ci0KLSAgICBUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMKTsKLQotICAgIC8vIEFkZCBoZXJlIG9wdGlvbnMgdGhhdCBjYW4gb25seSBiZSBzZXQgdXBv
biBQbGF0Zm9ybVdlYlZpZXcKLSAgICAvLyBpbml0aWFsaXphdGlvbiBhbmQgbWFrZSBzdXJlIGl0
J3MgdXAgdG8gZGF0ZSB3aGVuIGFkZGluZyBuZXcKLSAgICAvLyBvcHRpb25zIHRvIHRoaXMgc3Ry
dWN0LiBPdGhlcndpc2UsIHRlc3RzIHVzaW5nIHRob3NlIG9wdGlvbnMKLSAgICAvLyBtaWdodCBm
YWlsIGlmIFdUUiBpcyByZXVzaW5nIGFuIGV4aXN0aW5nIFBsYXRmb3JtV2ViVmlldy4KLSAgICBi
b29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxpbmcgIT0gb3B0
aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNjZWxlcmF0ZWRE
cmF3aW5nICE9IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAgICAgICB8fCB1
c2VNb2NrU2Nyb2xsYmFycyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0gICAgICAgICAg
ICB8fCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzCi0gICAgICAgICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSAh
PSBvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAgICAgICAgICB8
fCBlbmFibGVBdHRhY2htZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAhPSBvcHRpb25z
LmVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VFcGhlbWVyYWxT
ZXNzaW9uICE9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAgICAgfHwgZW5h
YmxlTWVudUl0ZW1FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50Ci0gICAg
ICAgICAgICB8fCBlbmFibGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxl
bWVudAotICAgICAgICAgICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAhPSBvcHRpb25z
LmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVBvaW50ZXJM
b2NrICE9IG9wdGlvbnMuZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8IGVuYWJsZVdl
YkF1dGhlbnRpY2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24KLSAgICAg
ICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yICE9IG9w
dGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IKLSAgICAgICAg
ICAgIHx8IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucwotICAgICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyICE9IG9w
dGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlv
bk1hbmlmZXN0ICE9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAgICAgICAgfHwg
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgIT0gb3B0aW9u
cy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscwotICAgICAg
ICAgICAgfHwgZG9tUGFzdGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkCi0gICAg
ICAgICAgICB8fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVy
Ci0gICAgICAgICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9IG9w
dGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAgICAgICAgfHwg
anNjT3B0aW9ucyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IGFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMKLSAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQotICAg
ICAgICAgICAgfHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExl
YWtzCi0gICAgICAgICAgICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgIT0gb3B0aW9u
cy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVNlcnZp
Y2VDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAgICAgICAgICAg
fHwgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdub3JlTWV0YVZp
ZXdwb3J0Ci0gICAgICAgICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRhYmxlCi0gICAg
ICAgICAgICB8fCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5zaG91bGRIYW5k
bGVSdW5PcGVuUGFuZWwKLSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3BvdmVycyAhPSBv
cHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29udGVudEluc2V0
VG9wICE9IG9wdGlvbnMuY29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBjb250ZW50TW9k
ZSAhPSBvcHRpb25zLmNvbnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIKLSAgICAg
ICAgICAgIHx8IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAgICAg
ICAgfHwgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGUKLSAgICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlvbnMuYWxsb3dz
TGlua1ByZXZpZXcKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNz
ICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8
IGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVBy
b2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcwotICAgICAgICAg
ICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5hdmlnYXRpb25U
b0RhdGFVUkxzICE9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcwotICAgICAg
ICAgICAgfHwgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kKLSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TCAhPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAgICAgICAgfHwg
aXNBcHBCb3VuZFdlYlZpZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKK3N0cnVjdCBUZXN0Q29tbWFuZDsKIAotICAgICAgICBpZiAoIWNv
bnRleHRPcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0
T3B0aW9ucykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CitzdHJ1Y3QgVGVzdEZlYXR1cmVz
IHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRh
bEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
Ym9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
ZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJp
bmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVy
ZXM7Cit9OwogCi0gICAgICAgIGlmIChleHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLmV4
cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwordm9pZCBtZXJn
ZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKIAotICAgICAg
ICBpZiAoaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZl
YXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CitUZXN0RmVhdHVy
ZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5k
Jik7CisKK3N0cnVjdCBDb250ZXh0T3B0aW9ucyB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOworICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdp
bmdUaW1lb3V0czsKKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uOworICAg
IGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47CisgICAgYm9vbCB1c2VTZXJ2aWNl
V29ya2VyU2hvcnRUaW1lb3V0OwogCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRp
b25zKGNvbnN0IENvbnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1
YWdlcyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8fCBlbmFibGVQ
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBv
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAgICB8fCB1c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQorCisgICAgYm9vbCBzaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRp
b24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47CisgICAgfQorfTsKKworY2xhc3Mg
VGVzdE9wdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0
dXJlcyk7CisKKyAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9ucygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb3ZlcnJpZGVMYW5ndWFnZXMoKSwKKyAg
ICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMoKSwKKyAgICAgICAg
ICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCksCisgICAgICAgICAgICBlbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAgICAgICAgdXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQorCisgICAgYm9vbCB1c2VUaHJlYWRlZFNj
cm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVRocmVhZGVkU2Ny
b2xsaW5nIik7IH0KKyAgICBib29sIHVzZUFjY2VsZXJhdGVkRHJhd2luZygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpOyB9CisgICAgYm9v
bCB1c2VSZW1vdGVMYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1
c2VSZW1vdGVMYXllclRyZWUiKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93V2ViVmlldyIpOyB9CisgICAg
Ym9vbCB1c2VGbGV4aWJsZVZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1
ZSgidXNlRmxleGlibGVWaWV3cG9ydCIpOyB9CisgICAgYm9vbCB1c2VEYXRhRGV0ZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRGF0YURldGVjdGlvbiIpOyB9Cisg
ICAgYm9vbCB1c2VNb2NrU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoInVzZU1vY2tTY3JvbGxiYXJzIik7IH0KKyAgICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVp
cmtzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgibmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MiKTsgfQorICAgIGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpOyB9
CisgICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Iik7
IH0KKyAgICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiKTsgfQorICAgIGJvb2wgZW5h
YmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIpOyB9CisgICAgYm9vbCB1c2VFcGhlbWVyYWxT
ZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRXBoZW1lcmFsU2Vz
c2lvbiIpOyB9CisgICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVNZW51SXRlbUVsZW1lbnQiKTsgfQorICAgIGJvb2wg
ZW5hYmxlS2V5Z2VuRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVu
YWJsZUtleWdlbkVsZW1lbnQiKTsgfQorICAgIGJvb2wgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9s
cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZU1vZGVybk1lZGlhQ29u
dHJvbHMiKTsgfQorICAgIGJvb2wgZW5hYmxlUG9pbnRlckxvY2soKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJlbmFibGVQb2ludGVyTG9jayIpOyB9CisgICAgYm9vbCBlbmFibGVX
ZWJBdXRoZW50aWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uIik7IH0KKyAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9u
TG9jYWxBdXRoZW50aWNhdG9yKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5h
YmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiKTsgfQorICAgIGJvb2wgZW5h
YmxlSW5zcGVjdG9yQWRkaXRpb25zKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
ZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIik7IH0KKyAgICBib29sIHNob3VsZFNob3dUb3VjaGVz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1RvdWNoZXMiKTsg
fQorICAgIGJvb2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIik7IH0KKyAgICBib29sIGFs
bG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMiKTsgfQorICAgIGJvb2wgZG9tUGFzdGVBbGxvd2VkKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZG9tUGFzdGVBbGxvd2VkIik7IH0KKyAgICBib29sIGVu
YWJsZUNvbG9yRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
Q29sb3JGaWx0ZXIiKTsgfQorICAgIGJvb2wgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJr
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInB1bmNoT3V0V2hpdGVCYWNr
Z3JvdW5kc0luRGFya01vZGUiKTsgfQorICAgIGJvb2wgcnVuU2luZ2x5KCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgicnVuU2luZ2x5Iik7IH0KKyAgICBib29sIGNoZWNrRm9yV29y
bGRMZWFrcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImNoZWNrRm9yV29ybGRM
ZWFrcyIpOyB9CisgICAgYm9vbCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQoKSBjb25zdCB7IHJl
dHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiKTsgfQorICAg
IGJvb2wgc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgic3BlbGxDaGVja2luZ0RvdHMiKTsgfQorICAgIGJvb2wgZW5hYmxlU2Vydmlj
ZUNvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlU2Vydmlj
ZUNvbnRyb2xzIik7IH0KKyAgICBib29sIGVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgiZWRpdGFibGUiKTsgfQorICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBh
bmVsKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkSGFuZGxlUnVuT3Bl
blBhbmVsIik7IH0KKyAgICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVycygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFByZXNlbnRQb3BvdmVycyIpOyB9CisgICAgYm9v
bCBlbmFibGVBcHBOYXAoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVB
cHBOYXAiKTsgfQorICAgIGJvb2wgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKTsgfQorICAgIGJv
b2wgYWxsb3dzTGlua1ByZXZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJh
bGxvd3NMaW5rUHJldmlldyIpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRl
b0luVUlQcm9jZXNzIik7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vz
cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRlb0lu
R1BVUHJvY2VzcyIpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQ
cm9jZXNzIik7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcygpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcyIpOyB9CisgICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIp
OyB9CisgICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkgY29uc3QgeyByZXR1cm4g
Ym9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIpOyB9CisgICAgYm9v
bCBpc0FwcEJvdW5kV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlz
QXBwQm91bmRXZWJWaWV3Iik7IH0KKyAgICBib29sIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5n
VGltZW91dHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVTeW5jaHJv
bm91c01lc3NhZ2luZ1RpbWVvdXRzIik7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24iKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRv
d09wZW4oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9jZXNzU3dh
cE9uV2luZG93T3BlbiIpOyB9CisgICAgYm9vbCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCIpOyB9CisgICAgZG91YmxlIGNvbnRlbnRJbnNldFRvcCgpIGNvbnN0IHsgcmV0dXJu
IGRvdWJsZUZlYXR1cmVWYWx1ZSgiY29udGVudEluc2V0LnRvcCIpOyB9CisgICAgZG91YmxlIGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJkZXZp
Y2VTY2FsZUZhY3RvciIpOyB9CisgICAgZG91YmxlIHZpZXdXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IGRvdWJsZUZlYXR1cmVWYWx1ZSgidmlld1dpZHRoIik7IH0KKyAgICBkb3VibGUgdmlld0hlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1cmVWYWx1ZSgidmlld0hlaWdodCIpOyB9Cisg
ICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVzdCgpIGNvbnN0IHsgcmV0dXJuIHN0cmlu
Z0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25NYW5pZmVzdCIpOyB9CisgICAgc3RkOjpzdHJpbmcg
anNjT3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgianNjT3B0aW9u
cyIpOyB9CisgICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKSBj
b25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzIik7IH0KKyAgICBzdGQ6OnN0cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwo
KSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoInN0YW5kYWxvbmVXZWJBcHBsaWNh
dGlvblVSTCIpOyB9CisgICAgc3RkOjpzdHJpbmcgY29udGVudE1vZGUoKSBjb25zdCB7IHJldHVy
biBzdHJpbmdGZWF0dXJlVmFsdWUoImNvbnRlbnRNb2RlIik7IH0KKyAgICBzdGQ6OnN0cmluZyBh
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJl
VmFsdWUoImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIpOyB9CisgICAgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVmVj
dG9yRmVhdHVyZVZhbHVlKCJsYW5ndWFnZSIpOyB9CisKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBleHBlcmltZW50YWxGZWF0dXJlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXM7IH0KKyAgICBjb25zdCBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBpbnRlcm5hbERlYnVnRmVhdHVyZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlczsgfQorCisg
ICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBib29sRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5n
IGtleSkgY29uc3Q7CisgICAgZG91YmxlIGRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBr
ZXkpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIHN0cmluZ0ZlYXR1cmVWYWx1ZShzdGQ6OnN0cmlu
ZyBrZXkpIGNvbnN0OworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJpbmdWZWN0b3JG
ZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5KSBjb25zdDsKKworICAgIFRlc3RGZWF0dXJlcyBt
X2ZlYXR1cmVzOwogfTsKIAogfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9U
ZXN0Q29udHJvbGxlckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjY4MTU5KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsMjcgKzExNCwyOCBAQCBXS1ByZWZlcmVuY2VzUmVmIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9yCiAgICAgcmV0dXJuIChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKWdsb2Jh
bFdlYlZpZXdDb25maWd1cmF0aW9uLnByZWZlcmVuY2VzOwogfQogCi12b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAor
VGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgVGVz
dEZlYXR1cmVzIGZlYXR1cmVzOworCiAgICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiJd
KQotICAgICAgICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJl
bmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiIsIHRydWUgfSk7CiAgICAgaWYgKFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbiJdKQotICAgICAgICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJs
ZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuID0gdHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIHRydWUgfSk7
CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChvcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kpCi0gICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIHNldEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2
YWN5RW5hYmxlZCJdOwotI2VuZGlmCisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJh
dGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMu
dXNlRXBoZW1lcmFsU2Vzc2lvbiB8fCBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TC5sZW5ndGgoKSkgewotICAgICAgICBhdXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWcgPSBvcHRp
b25zLnVzZUVwaGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0g
OiBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOwotICAgICAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBi
b29sIHVzZUVwaGVtZXJhbFNlc3Npb24gPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsK
KyAgICBhdXRvIHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCA9IG9wdGlvbnMuc3RhbmRhbG9u
ZVdlYkFwcGxpY2F0aW9uVVJMKCk7CisgICAgaWYgKHVzZUVwaGVtZXJhbFNlc3Npb24gfHwgc3Rh
bmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gd2Vic2l0
ZURhdGFTdG9yZUNvbmZpZyA9IHVzZUVwaGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9u
XSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBpZiAoIXVzZUVwaGVtZXJhbFNlc3Npb24p
CiAgICAgICAgICAgICBjb25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3Jp
ZXMoKFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYpd2Vic2l0ZURhdGFTdG9yZUNv
bmZpZyk7Ci0gICAgICAgIGlmIChvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5s
ZW5ndGgoKSkKLSAgICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxv
bmVBcHBsaWNhdGlvblVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6b3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1d
XTsKKyAgICAgICAgaWYgKHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlv
blVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
c3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmNfc3RyKCldXV07CiAgICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZSA9IChfX2JyaWRnZSBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVD
b25maWddIGF1dG9yZWxlYXNlXTsKICAgICB9IGVsc2UKICAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3JlID0gKF9fYnJpZGdlIFdLV2Vic2l0ZURhdGFTdG9yZVJlZilnbG9iYWxXZWJWaWV3Q29uZmln
dXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlOwpAQCAtMTQ1LDMyICsxNDYsMzMgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaQogICAgIGF1dG8gY29waWVkQ29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikK
KyAgICBpZiAob3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKCkpCiAgICAgICAgIFtjb3BpZWRDb25m
aWd1cmF0aW9uIHNldERhdGFEZXRlY3RvclR5cGVzOldLRGF0YURldGVjdG9yVHlwZUFsbF07Ci0g
ICAgaWYgKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpCisgICAgaWYgKG9wdGlv
bnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3Vy
YXRpb24gc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHM6WUVTXTsKLSAgICBpZiAob3B0aW9u
cy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSkKKyAgICBpZiAob3B0aW9ucy51c2VD
aGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSgpKQogICAgICAgICBbY29waWVkQ29uZmlndXJh
dGlvbiBzZXRTZWxlY3Rpb25HcmFudWxhcml0eTpXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFj
dGVyXTsKLSAgICBpZiAob3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICBpZiAob3B0aW9u
cy5pc0FwcEJvdW5kV2ViVmlldygpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRM
aW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zOllFU107CiAjZWxzZQotICAgIFtjb3Bp
ZWRDb25maWd1cmF0aW9uIF9zZXRTZXJ2aWNlQ29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxl
U2VydmljZUNvbnRyb2xzXTsKKyAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0U2VydmljZUNv
bnRyb2xzRW5hYmxlZDpvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scygpXTsKICNlbmRpZgog
Ci0gICAgaWYgKG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQpCisgICAgaWYgKG9wdGlv
bnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRp
b24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOwogCi0gICAgaWYgKG9wdGlvbnMu
ZW5hYmxlQ29sb3JGaWx0ZXIpCisgICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSkK
ICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNd
OwogCiAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTooV0tXZWJz
aXRlRGF0YVN0b3JlICopd2Vic2l0ZURhdGFTdG9yZSgpXTsKIAotICAgIFtjb3BpZWRDb25maWd1
cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BO
YXZpZ2F0aW9uVG9EYXRhVVJMc107CisgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93
VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzKCldOwogCiAgICAgY29uZmlndXJlQ29udGVudE1vZGUoY29waWVkQ29uZmlndXJhdGlvbi5n
ZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Lmxl
bmd0aCgpKSB7Ci0gICAgICAgIGF1dG8gbWFuaWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOm9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdC5jX3N0cigpXTsKKyAgICBh
dXRvIGFwcGxpY2F0aW9uTWFuaWZlc3QgPSBvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QoKTsK
KyAgICBpZiAoYXBwbGljYXRpb25NYW5pZmVzdC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIG1h
bmlmZXN0UGF0aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzphcHBsaWNhdGlvbk1h
bmlmZXN0LmNfc3RyKCldOwogICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoQ29udGVudHNPZkZpbGU6bWFuaWZlc3RQYXRoIHVzZWRFbmNvZGluZzpudWxscHRyIGVy
cm9yOm51bGxwdHJdOwogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0QXBwbGljYXRp
b25NYW5pZmVzdDpbX1dLQXBwbGljYXRpb25NYW5pZmVzdCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJv
bUpTT046dGV4dCBtYW5pZmVzdFVSTDpuaWwgZG9jdW1lbnRVUkw6bmlsXV07CiAgICAgfQpAQCAt
MTc4LDEzICsxODAsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJW
aQogICAgIG1fbWFpbldlYlZpZXcgPSBtYWtlVW5pcXVlPFBsYXRmb3JtV2ViVmlldz4oY29waWVk
Q29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9ucyk7CiAgICAgZmluaXNoQ3JlYXRpbmdQbGF0Zm9y
bVdlYlZpZXcobV9tYWluV2ViVmlldy5nZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9u
cy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKQorICAgIGlmIChvcHRpb25zLnB1
bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSkKICAgICAgICAgbV9tYWluV2ViVmll
dy0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNlKTsKIAotICAgIGlmIChvcHRpb25zLmVkaXRhYmxl
KQorICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNl
dEVkaXRhYmxlKHRydWUpOwogCi0gICAgbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxs
b3dzTGlua1ByZXZpZXcgPSBvcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3OworICAgIG1fbWFpbldl
YlZpZXctPnBsYXRmb3JtVmlldygpLmFsbG93c0xpbmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NM
aW5rUHJldmlldygpOwogICAgIFttX21haW5XZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKSBfc2V0U2hh
cmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOllFU107
CiB9CiAKQEAgLTIwMyw3ICsyMDUsNyBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9yCiB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5pc2hDcmVhdGluZ1BsYXRmb3JtV2Vi
VmlldyhQbGF0Zm9ybVdlYlZpZXcqIHZpZXcsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQog
ewogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldykK
KyAgICBpZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldygpKQogICAgICAgICBbdmlldy0+cGxh
dGZvcm1XaW5kb3coKSBvcmRlckZyb250Om5pbF07CiAgICAgZWxzZQogICAgICAgICBbdmlldy0+
cGxhdGZvcm1XaW5kb3coKSBvcmRlckJhY2s6bmlsXTsKQEAgLTI2MywxMiArMjY1LDEyIEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2kKICAgICB9CiB9CiAKLXZvaWQg
VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7
Ci0gICAgaWYgKGJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmIChidW5kbGVJZGVu
dGlmaWVyLmVtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbVGVzdFJ1bm5lcldL
V2ViVmlldyBfc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1bmRs
ZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV07CisgICAgW1Rlc3RSdW5uZXJXS1dl
YlZpZXcgX3NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0b1dURlN0
cmluZyhidW5kbGVJZGVudGlmaWVyKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXTsKIH0KIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5n
T3ZlcnJpZGUoKQpAQCAtMjg2LDcgKzI4OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29h
UmVzZXRTdGF0ZVRvQ28KICAgICAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqcGxhdGZvcm1WaWV3
ID0gd2ViVmlldy0+cGxhdGZvcm1WaWV3KCk7CiAgICAgICAgIHBsYXRmb3JtVmlldy5fdmlld1Nj
YWxlID0gMTsKICAgICAgICAgcGxhdGZvcm1WaWV3Ll9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lk
dGggPSAwOwotICAgICAgICBbcGxhdGZvcm1WaWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzXTsK
KyAgICAgICAgW3BsYXRmb3JtVmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Rm9yVGVzdGluZzpvcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cygpXTsKICAgICAg
ICAgW3BsYXRmb3JtVmlldyByZXNldEludGVyYWN0aW9uQ2FsbGJhY2tzXTsKICAgICAgICAgW3Bs
YXRmb3JtVmlldyBfcmVzZXROYXZpZ2F0aW9uR2VzdHVyZVN0YXRlRm9yVGVzdGluZ107CiAgICAg
fQpAQCAtMjk3LDYgKzI5OSwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3Rh
dGVUb0NvCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRl
c3RJbnZvY2F0aW9uJiB0ZXN0SW52b2NhdGlvbikKIHsKICAgICBzZXRDcmFzaFJlcG9ydEFwcGxp
Y2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvblRvVVJMKHRlc3RJbnZvY2F0aW9uLnVybCgpKTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKHRlc3RJbnZvY2F0aW9uLm9wdGlvbnMo
KS5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkpCisgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJ
bkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCJdOworI2VuZGlmCiB9CiAKIHN0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9hcmRUeXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0
ZWJvYXJkIHR5cGUiOwpAQCAtNDg3LDEyICs0OTQsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
aXNEb2luZ01lZGlhQ2FwdHVyZQogCiBzdGF0aWMgV0tDb250ZW50TW9kZSBjb250ZW50TW9kZShj
b25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9k
ZSA9PSAiZGVza3RvcCJfcykKKyAgICBhdXRvIG1vZGUgPSBvcHRpb25zLmNvbnRlbnRNb2RlKCk7
CisgICAgaWYgKG1vZGUgPT0gImRlc2t0b3AiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9k
ZURlc2t0b3A7Ci0KLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9kZSA9PSAibW9iaWxlIl9zKQor
ICAgIGlmIChtb2RlID09ICJtb2JpbGUiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZU1v
YmlsZTsKLQogICAgIHJldHVybiBXS0NvbnRlbnRNb2RlUmVjb21tZW5kZWQ7CiB9CiAKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJ
KHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250
cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDkgKzE1MCwxMSBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0UHJlZmVyCiAgICAgbV9tYWluV2ViVmlldy0+ZGlz
bWlzc0FsbFBvcHVwTWVudXMoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxh
dGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29u
c3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNv
bnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7Cisg
ICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNl
cnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBm
ZWF0dXJlczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvUGxhdGZvcm1XZWJWaWV3SU9TLm1tCShyZXZpc2lvbiAyNjgxNTkp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3Jt
V2ViVmlldyhXS1dlYlZpCiAgICAgOiBtX3dpbmRvd0lzS2V5KHRydWUpCiAgICAgLCBtX29wdGlv
bnMob3B0aW9ucykKIHsKLSAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgVGVzdENv
bnRyb2xsZXI6OnZpZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOworICAgIENH
UmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCBvcHRpb25zLnZpZXdXaWR0aCgpLCBvcHRpb25z
LnZpZXdIZWlnaHQoKSk7CiAKICAgICBtX3dpbmRvdyA9IFtbV2ViS2l0VGVzdFJ1bm5lcldpbmRv
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0XTsKICAgICBtX3dpbmRvdy5iYWNrZ3JvdW5kQ29s
b3IgPSBbVUlDb2xvciBsaWdodEdyYXlDb2xvcl07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2aXNpb24gMjY4MTU5KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJl
c2V0U3RhdGVUCiAgICAgfQogCiAgICAgbV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5jbGVhcigp
OwotICAgIGlmICghb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMpIHsKKyAgICBpZiAoIW9w
dGlvbnMuc2hvdWxkUHJlc2VudFBvcG92ZXJzKCkpIHsKICNpZiBVU0UoVUlDT05URVhUTUVOVSkK
ICAgICAgICAgbV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5hcHBlbmQobWFrZVVuaXF1ZTxJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyPihbVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGNsYXNzXSwgQHNl
bGVjdG9yKF9wcmVzZW50TWVudUF0TG9jYXRpb246KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92
ZXJyaWRlUHJlc2VudE1lbnVPclBvcG92ZXJPclZpZXdDb250cm9sbGVyKSkpOwogI2VuZGlmCkBA
IC0yMTMsOCArMjEzLDEwIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0
ZVQKICAgICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gd2ViVmlldy5zY3JvbGxWaWV3
OwogICAgICAgICBbc2Nyb2xsVmlldyBfcmVtb3ZlQWxsQW5pbWF0aW9uczpZRVNdOwogICAgICAg
ICBbc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6MSBhbmltYXRlZDpOT107Ci0gICAgICAgIHNjcm9s
bFZpZXcuY29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzTWFrZShvcHRpb25zLmNvbnRlbnRJbnNl
dFRvcCwgMCwgMCwgMCk7Ci0gICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IENHUG9p
bnRNYWtlKDAsIC1vcHRpb25zLmNvbnRlbnRJbnNldFRvcCk7CisgICAgICAgIAorICAgICAgICBh
dXRvIGNvbnRlbnRJbnNldFRvcCA9IG9wdGlvbnMuY29udGVudEluc2V0VG9wKCk7CisgICAgICAg
IHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzTWFrZShjb250ZW50SW5zZXRU
b3AsIDAsIDAsIDApOworICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50
TWFrZSgwLCAtY29udGVudEluc2V0VG9wKTsKIAogICAgICAgICBpZiAod2ViVmlldy5pbnRlcmFj
dGluZ1dpdGhGb3JtQ29udHJvbCkKICAgICAgICAgICAgIHNob3VsZFJlc3RvcmVGaXJzdFJlc3Bv
bmRlciA9IFt3ZWJWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKQEAgLTI2NSwxMiArMjY3LDE0
IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2Nh
dGlvbiYgdGVzdCkKIHsKKyAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRH
ZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHNldFNob3VsZFNob3dUb3VjaGVzOnRlc3Qub3B0
aW9ucygpLnNob3VsZFNob3dUb3VjaGVzKCldOworCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAq
d2ViVmlldyA9IG1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwogCi0gICAgaWYgKHRlc3Qu
b3B0aW9ucygpLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCkKKyAgICBpZiAodGVzdC5vcHRpb25z
KCkuc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0KCkpCiAgICAgICAgIHdlYlZpZXcuY29uZmlndXJh
dGlvbi5wcmVmZXJlbmNlcy5fc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ID0gWUVTOwogCi0gICAg
aWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KQorICAgIGlmICghdGVzdC5v
cHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBD
R1JlY3Qgc2NyZWVuQm91bmRzID0gW1VJU2NyZWVuIG1haW5TY3JlZW5dLmJvdW5kczsKQEAgLTI5
MSwxMCArMjk1LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQog
ICAgIC8vIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFs
c2UpLgogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVz
dE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYp
IGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0
dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRp
b25zLnNob3VsZFNob3dUb3VjaGVzID0gc2hvdWxkU2hvd1RvdWNoZXMoKTsKLSAgICBbW0dlbmVy
YXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3dd
IHNldFNob3VsZFNob3dUb3VjaGVzOm9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXNdOworICAgIHJl
dHVybiB7IH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNv
bnRleHQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3Jt
V2ViVmlld01hYy5tbQkocmV2aXNpb24gMjY4MTU5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEs
MTggQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tXZWJWaQogICAgICwgbV9v
cHRpb25zKG9wdGlvbnMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBzdXJlIHRoaXMgaXMgdGhlIGJl
c3QgcGxhY2UgZm9yIHRoaXM7IG1heWJlIHdlIHNob3VsZCBoYXZlIEFQSSB0byBzZXQgdGhpcyBz
byB3ZSBjYW4gZG8gaXQgZnJvbSBUZXN0Q29udHJvbGxlcj8KLSAgICBpZiAobV9vcHRpb25zLnVz
ZVJlbW90ZUxheWVyVHJlZSkKKyAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSgp
KQogICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRWYWx1
ZTpAWUVTIGZvcktleTpAIldlYktpdDJVc2VSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSJdOwog
CiAgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBj
b3B5XSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19i
cmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10s
IG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyk7CisgICAgV0tQcmVmZXJlbmNlc1NldFRo
cmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVk
Q29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGlu
ZygpKTsKIAotICAgIE5TUmVjdCByZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBUZXN0Q29udHJvbGxl
cjo6dmlld1dpZHRoLCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdodCk7CisgICAgTlNSZWN0IHJl
Y3QgPSBOU01ha2VSZWN0KDAsIDAsIG9wdGlvbnMudmlld1dpZHRoKCksIG9wdGlvbnMudmlld0hl
aWdodCgpKTsKICAgICBtX3ZpZXcgPSBbW1Rlc3RSdW5uZXJXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6cmVjdCBjb25maWd1cmF0aW9uOmNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCldOwog
ICAgIFttX3ZpZXcgX3NldFdpbmRvd09jY2x1c2lvbkRldGVjdGlvbkVuYWJsZWQ6Tk9dOwogCiAg
ICAgTlNTY3JlZW4gKmZpcnN0U2NyZWVuID0gW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdElu
ZGV4OjBdOwotICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dXZWJW
aWV3ID8gTlNPZmZzZXRSZWN0KHJlY3QsIDEwMCwgMTAwKSA6IE5TT2Zmc2V0UmVjdChyZWN0LCAt
MTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFtZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0
ICsgMTAwMDApOworICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gbV9vcHRpb25zLnNob3VsZFNob3dX
ZWJWaWV3KCkgPyBOU09mZnNldFJlY3QocmVjdCwgMTAwLCAxMDApIDogTlNPZmZzZXRSZWN0KHJl
Y3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVuIGZyYW1lXS5zaXplLmhlaWdodCAtIHJlY3Quc2l6ZS5o
ZWlnaHQgKyAxMDAwMCk7CiAgICAgbV93aW5kb3cgPSBbW1dlYktpdFRlc3RSdW5uZXJXaW5kb3cg
YWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93UmVjdCBzdHlsZU1hc2s6TlNXaW5kb3dT
dHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlfTlNCYWNraW5n
U3RvcmVVbmJ1ZmZlcmVkIGRlZmVyOllFU107CiAgICAgbV93aW5kb3cucGxhdGZvcm1XZWJWaWV3
ID0gdGhpczsKICAgICBbbV93aW5kb3cgc2V0Q29sb3JTcGFjZTpbZmlyc3RTY3JlZW4gY29sb3JT
cGFjZV1dOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRy
b2xsZXJNYWMubW0JKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
bWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTEgKzE3Miwx
MSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNU
ZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5n
JikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0Zl
YXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9w
dGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcgPSB0cnVlOwotICAgIG9wdGlvbnMudXNlUmVtb3Rl
TGF5ZXJUcmVlID0gc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlKCk7Ci0gICAgb3B0aW9ucy5zaG91
bGRTaG93V2ViVmlldyA9IHNob3VsZFNob3dXZWJWaWV3KCk7CisgICAgVGVzdEZlYXR1cmVzIGZl
YXR1cmVzOworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlVGhyZWFkZWRT
Y3JvbGxpbmciLCB0cnVlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdElu
dm9jYXRpb24mIHRlc3QpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9y
bVdlYlZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2lu
L1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NCw3ICsxNDQsNyBAQCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tS
CiAgICAgICAgIFNXUF9OT01PVkUgfCBTV1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSB8IFNX
UF9OT0NPUFlCSVRTKTsKIAogICAgIFVJTlQgZmxhZ3MgPSBTV1BfTk9aT1JERVIgfCBTV1BfTk9B
Q1RJVkFURSB8IFNXUF9OT0NPUFlCSVRTOwotICAgIGlmIChtX29wdGlvbnMuc2hvdWxkU2hvd1dl
YlZpZXcpCisgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldygpKQogICAgICAgICBm
bGFncyB8PSBTV1BfTk9NT1ZFOwogICAgIDo6U2V0V2luZG93UG9zKAogICAgICAgICBtX3dpbmRv
dywKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxl
cldpbi5jcHAJKHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2lu
L1Rlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw5IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmlj
VGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25z
dAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAJ
KHJldmlzaW9uIDI2ODE1OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250
cm9sbGVyV1BFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEzNiwxMSBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0UHJlZmVyCiB7CiB9CiAKLXZvaWQgVGVzdENvbnRy
b2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlv
bnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250
cm9scyA9IGZhbHNlOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5i
b29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBmYWxzZSB9
KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2Utb3JpZW50YXRpb24tbm9uZS1jYW52YXMtZXhw
ZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1v
cmllbnRhdGlvbi1ub25lLWNhbnZhcy1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAyNjgxNTkpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1vcmllbnRhdGlvbi1ub25lLWNhbnZhcy1l
eHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw2ICsxNywxMCBAQAogICAgICAgICBo
ZWlnaHQ6IDUwcHg7CiAgICAgfQogPC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5p
bnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRDYW52YXNVc2VzQWNjZWxl
cmF0ZWREcmF3aW5nKGZhbHNlKTsKKzwvc2NyaXB0PgogPGJvZHk+CiAgICAgPGI+Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmRyYXdJbWFnZSgpIHNob3VsZCBpZ25vcmUgdGhlIGltYWdlJ3MgRVhJ
RiBvcmllbnRhdGlvbiBpZiBpdHMgc3R5bGUgaW1hZ2Utb3JpZW50YXRpb24gaXMgc2V0IHRvICJu
b25lIi48L2I+CiAgICAgPGJyPgpAQCAtNzgsNiArODIsOSBAQAogICAgICAgICA8YnI+VW5kZWZp
bmVkIChpbnZhbGlkIHZhbHVlKQogICAgIDwvZGl2PgogICAgIDxzY3JpcHQ+CisgICAgICAgIGlm
ICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldENh
bnZhc1VzZXNBY2NlbGVyYXRlZERyYXdpbmcoZmFsc2UpOworCiAgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKICAgICAgICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2Utb3JpZW50YXRpb24tbm9u
ZS1jYW52YXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFn
ZS1vcmllbnRhdGlvbi1ub25lLWNhbnZhcy5odG1sCShyZXZpc2lvbiAyNjgxNTkpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1vcmllbnRhdGlvbi1ub25lLWNhbnZhcy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMywxMCBAQAogICAgICAgICBoZWlnaHQ6IDUwcHg7CiAg
ICAgfQogPC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAg
ICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKGZh
bHNlKTsKKzwvc2NyaXB0PgogPGJvZHk+CiAgICAgPGI+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmRyYXdJbWFnZSgpIHNob3VsZCBpZ25vcmUgdGhlIGltYWdlJ3MgRVhJRiBvcmllbnRhdGlvbiBp
ZiBpdHMgc3R5bGUgaW1hZ2Utb3JpZW50YXRpb24gaXMgc2V0IHRvICJub25lIi48L2I+CiAgICAg
PGJyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410896</attachid>
            <date>2020-10-08 17:05:21 -0700</date>
            <delta_ts>2020-10-08 17:45:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217390-20201008170521.patch</filename>
            <type>text/plain</type>
            <size>106623</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODIzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1OSBAQAorMjAyMC0xMC0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgVGVzdE9wdGlvbnMgY29kZSBpbiBXZWJLaXRUZXN0UnVubmVyIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHJhdGlvbmFsaXplIGFuZCBleHRlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzM5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBUZXN0T3B0aW9ucyBjb2Rl
IGluIFdlYktpdFRlc3RSdW5uZXIgdG8gbWFrZSBpdCBjbGVhciBob3cgb3B0aW9ucyBjb21pbmcg
aW4gYXQgCisgICAgICAgIGRpZmZlcmVudCBsZXZlbHMgYXJlIHRyZWF0ZWQgYW5kIHdoYXQgcHJl
Y2VkZW5jZSBlYWNoIGhhcy4gVGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAg
ICAgICAKKyAgICAgICAgLSBHbG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5u
ZXIgdmlhIHRoZSBjb21tYW5kIGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0g
SGFyZGNvZGVkIGZlYXR1cmVzIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1
biAoaG9wZWZ1bGx5IHdlIGNhbiByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVk
IHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09T
IGZvciB1c2VUaHJlYWRlZFNjcm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSB0aGUg
dGVzdCBoZWFkZXJzIHdpdGhpbiB0aGUgdGVzdCBpdHNlbGYuCisgICAgICAgIC0gRmluYWxseSwg
YSBzZWNvbmQgY2hhbmNlIGZvciBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIGRlZmF1bHRzIChjdXJy
ZW5seSBvbmx5IHVzZWQgdGhlIENvY29hIHBvcnRzCisgICAgICAgICAgZm9yIHNldHRpbmcgZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gYW5kIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dP
cGVuIGJhc2VkIG9uIE5TVXNlckRlZmF1bHRzLikKKworICAgICAgICBUbyBtYWtlIHRoaXMgY2hh
bmdlIHdvcmssIGFuZCBwYXZlIHRoZSB3YXkgZm9yIGZ1dHVyZSBhdXRvZ2VuZXJhdGlvbiBvZiBz
b21lIG9mIHRoZXNlIHRlc3Qgb3B0aW9ucywKKyAgICAgICAgdGhlIFRlc3RPcHRpb25zIHN0cnVj
dCAobm93IGNsYXNzKSB3YXMgb3ZlcmhhdWxlZC4gSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBzdGF0
ZSBpdHNlbGYsIFRlc3RPcHRpb25zCisgICAgICAgIGlzIG5vdyBhbiBpbW11dGFibGUgb3duZXIg
b2YgYSBUZXN0RmVhdHVyZXMgb2JqZWN0LiBUZXN0RmVhdHVyZXMgaXMgYSBzaW1wbGUgc3RydWN0
IHRoYXQgY29udGFpbnMgbWFwcyAKKyAgICAgICAgb2Ygb3B0aW9uIGtleXMgdG8gdmFsdWVzIGFu
ZCBjYW4gYmUgbWVyZ2VkIHdpdGggb3RoZXIgVGVzdEZlYXR1cmVzIG9iamVjdHMuIFRlc3RPcHRp
b25zIHRha2VzIGEgCisgICAgICAgIFRlc3RGZWF0dXJlcyBhdCBjb25zdHJ1Y3Rpb24sIGFuZCBl
eHBvc2VzIGdldHRlcnMgZm9yIGFsbCBrZXlzLCBhcyB3ZWxsIGFzIGRlZmF1bHRzIGZvciB3aGVu
IHRoZXkgYXJlCisgICAgICAgIG5vdCBpbiB0aGUgbWFwcy4gSW4gZnV0dXJlIGNoYW5nZXMsIEkg
d291bGQgbGlrZSB0byByZW1vdmUgbWFueSBvZiB0aGVzZSAodGhlIG9uZXMgdGhhdCBjb3JyZXNw
b25kCisgICAgICAgIHdpdGggV2ViS2l0IHByZWZlcmVuY2VzIGFueXdheSkgYW5kIGhhdmUgdGhl
IGtleXMgYW5kIHZhbHVlcyBhdXRvbWF0aWNhbGx5IGRlYWx0IHdpdGggYnkgV0tQcmVmZXJlbmNl
cy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHA6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmg6CisgICAgICAgIFN3aXRjaCB0byBzdGQ6OnVub3Jk
ZXJlZF9tYXAgZm9yIGNvbnNpc3RlbmN5IGFuZCBlYXNlIG9mIGNvbnZlcnNpb24uCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMgY29uc3QpOgorICAgICAgICBVcGRh
dGUgdG8gY2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAg
ICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAgQWRkIGNvbnZlcnNpb25zIGZvciBzdGQ6
OnN0cmluZy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICBSZXBsYWNlIHNvbWUg
Ym9vbHMgd2l0aCBhIG5ldyBnbG9iYWwgVGVzdEZlYXR1cmVzIGluc3RhbmNlIHRoYXQgZm9ybXMg
dGhlIGJhc2Ugb2YKKyAgICAgICAgYWxsIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
biBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdX
aXRoT3B0aW9ucyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPcHRpb25zRm9yVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNl
dFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICBVcGRhdGUgdG8g
Y2FsbCBuZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwpOgorICAgICAgICBFeHBvc2UgYXMgYSBzdGF0
aWMgbWVtYmVyIGZ1bmN0aW9uIG9uIFRlc3RDb250cm9sbGVyIGZvciB1c2UgaW4gb3RoZXIgZmls
ZXMuCisgICAgICAgIAorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNG
b3JUZXN0IGNvbnN0KToKKyAgICAgICAgUmV3b3JrIHRvIGJlIGEgc2VxdWVuY2Ugb2YgVGVzdEZl
YXR1cmVzIG1lcmdlcy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1
cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRl
c3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmNyZWF0ZVRlc3RV
UkwpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVs
YXRpdmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVhZGVy
VmFsdWVBc1VSTCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnVwZGF0ZVRlc3RPcHRpb25zRnJv
bVRlc3RIZWFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGRUZXN0T3B0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmVkIFRlc3RP
cHRpb25zIHBhcnNpbmcgdG8gVGVzdE9wdGlvbnMuY3BwCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkpOgorICAgICAgICBVcGRhdGUgdG8gY2FsbCBu
ZXcgVGVzdE9wdGlvbnMgZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0T3B0aW9ucy5oOgorICAgICAgICBSZXdvcmtzIFRlc3RPcHRpb25zIHRvIGJlIGFuIGltbXV0
YWJsZSBvd25lciBvZiBhIFRlc3RGZWF0dXJlcyBzdHJ1Y3QsIHdoaWNoIGlzIGEgc2V0CisgICAg
ICAgIG9mIG1hcHMgdGhhdCBtYXAgZmVhdHVyZSBzdHJpbmcga2V5cywgdG8gdmFsdWVzIG9mIHR5
cGUgYm9vbCwgZG91YmxlLCBzdHJpbmcgb3Igc3RyaW5nIHZlY3Rvci4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjptZXJnZSk6Cisg
ICAgICAgIE1lcmdlcyB0d28gVGVzdEZlYXR1cmVzIG9iamVjdHMuIElmIGJvdGggY29udGFpbiB0
aGUgc2FtZSBrZXksIHRoZSAnYWRkaXRpb25hbCcKKyAgICAgICAgVGVzdEZlYXR1cmVzIG92ZXJy
aWRlcyB0aGUgJ2Jhc2UnIFRlc3RGZWF0dXJlcy4KKworICAgICAgICAoV1RSOjpkdW1wRmVhdHVy
ZXMpOgorICAgICAgICBIZWxwZXIgdG8gZHVtcCBmZWF0dXJlcyB0byBzdGRlcnIsIHVzZWZ1bCBm
b3IgZGVidWdnaW5nLgorCisgICAgICAgIChXVFI6OmtleVR5cGUpOgorICAgICAgICBIZWxwZXIg
Zm9yIHBhcnNlciB0byBrbm93IHdoaWNoIHZhbHVlIHBhcnNlciB0byB1c2UuCisKKyAgICAgICAg
KFdUUjo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKToKKyAgICAgICAgKFdUUjo6cGFyc2VT
dHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6CisgICAgICAgIChXVFI6OnBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOgorICAgICAgICBWYWx1ZSBwYXJzZXJzIG1vdmVk
IGZyb20gVGVzdENvbnRyb2xsZXIuY3BwCisKKyAgICAgICAgKFdUUjo6cGFyc2VUZXN0SGVhZGVy
KToKKyAgICAgICAgSGVhZGVyIHBhcnNlciBtb3ZlZCBmcm9tIFRlc3RDb250cm9sbGVyLmNwcC4g
VXBkYXRlIHRvIG5vdyByZXR1cm4KKyAgICAgICAgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGFuZCB1
c2Uga2V5VHlwZSB0byBwaWNrIHZhbHVlIHBhcnNlciByYXRoZXIKKyAgICAgICAgdGhhbiBpbmxp
bmluZyB0aGUgaWYgc3RhdGVtZW50cy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OmhhcmRjb2Rl
ZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KToKKyAgICAgICAgTW92ZWQgZnJvbSB0aGUgVGVz
dE9wdGlvbnMgY29udHJ1Y3RvciBhbmQgcmV3b3JrZWQgdG8gcmV0dXJuIGEgVGVzdEZlYXR1cmVz
CisgICAgICAgIG9iamVjdCB0byBiZSBtZXJnZWQgYnkgdGhlIGNhbGxlci4KKworICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVh
dGVzIGEgVGVzdEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRl
c3QuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVh
dHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRv
IG5vdyByZXR1cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJh
dGhlciB0aGFuIHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUlu
QXBwQnJvd3NlclByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVu
VGVzdAorICAgICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0
ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAg
ICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAg
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRh
dGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgTW92ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMg
bW9yZSBhcHByb3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFz
IHRoYXQgaXMgZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRv
IGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1v
dGVMYXllclRyZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUg
Z2xvYmFsbHksCisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGlu
ZyB0byB1c2UgYm9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4v
VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1
bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQ
bGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgVXBkYXRlZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvZ3RrL1Rlc3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9u
c0ZvclRlc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0
dXJlLgorCiAyMDIwLTEwLTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI2Nzc2Myk6IFsgaU9TIHdrMiBdIGh0dHAv
dGVzdHMvaW4tYXBwLWJyb3dzZXItcHJpdmFjeS9ub24tYXBwLWJvdW5kLWRvbWFpbi1kb2VzLW5v
dC1nZXQtYXBwLWJvdW5kLXNlc3Npb24uaHRtbCBpcyBhIGNvbnN0YW50IGZhaWx1cmUKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcAkocmV2aXNpb24gMjY4MjMxKQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAorI2luY2x1
ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgPHN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V1RSIHsKQEAgLTExMywxNiArMTE0LDE2IEBAIHN0YXRpYyBib29sIGhhbmRsZU9wdGlvbkFsbG93
ZWRIb3N0KE9wdGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VGZWF0
dXJlKFN0cmluZyBmZWF0dXJlU3RyaW5nLCBIYXNoTWFwPFN0cmluZywgYm9vbD4mIGZlYXR1cmVz
KQorc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKHN0ZDo6c3RyaW5nX3ZpZXcgZmVhdHVyZVN0cmlu
Zywgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7Ci0g
ICAgYXV0byBzdHJpbmdzID0gZmVhdHVyZVN0cmluZy5zcGxpdCgnPScpOwotICAgIGlmIChzdHJp
bmdzLmlzRW1wdHkoKSB8fCBzdHJpbmdzLnNpemUoKSA+IDIpCisgICAgYXV0byBzdHJpbmdzID0g
c3BsaXQoZmVhdHVyZVN0cmluZywgJz0nKTsKKyAgICBpZiAoc3RyaW5ncy5lbXB0eSgpIHx8IHN0
cmluZ3Muc2l6ZSgpID4gMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBmZWF0
dXJlTmFtZSA9IHN0cmluZ3NbMF07CiAgICAgYm9vbCBlbmFibGVkID0gc3RyaW5ncy5zaXplKCkg
PT0gMSB8fCBzdHJpbmdzWzFdID09ICJ0cnVlIjsKIAotICAgIGZlYXR1cmVzLnNldChmZWF0dXJl
TmFtZSwgZW5hYmxlZCk7CisgICAgZmVhdHVyZXMuaW5zZXJ0KHsgc3RkOjpzdHJpbmcgeyBmZWF0
dXJlTmFtZSB9LCBlbmFibGVkIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNzMsNyAr
MTc0LDEyIEBAIGNvbnN0IGNoYXIgKiBPcHRpb25zSGFuZGxlcjo6dXNhZ2UgPSAiVXMKIGNvbnN0
IGNoYXIgKiBPcHRpb25zSGFuZGxlcjo6aGVscCA9ICJEaXNwbGF5cyB0aGlzIGhlbHAuIjsKIAog
T3B0aW9uOjpPcHRpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24s
IHN0ZDo6ZnVuY3Rpb248Ym9vbChPcHRpb25zJiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKT4g
cGFyYW1ldGVySGFuZGxlciwgYm9vbCBoYXNBcmd1bWVudCkKLSAgICA6IG5hbWUobmFtZSksIGRl
c2NyaXB0aW9uKGRlc2NyaXB0aW9uKSwgcGFyYW1ldGVySGFuZGxlcihwYXJhbWV0ZXJIYW5kbGVy
KSwgaGFzQXJndW1lbnQoaGFzQXJndW1lbnQpIHsgfTsKKyAgICA6IG5hbWUobmFtZSkKKyAgICAs
IGRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKQorICAgICwgcGFyYW1ldGVySGFuZGxlcihwYXJhbWV0
ZXJIYW5kbGVyKQorICAgICwgaGFzQXJndW1lbnQoaGFzQXJndW1lbnQpCit7Cit9CiAKIGJvb2wg
T3B0aW9uOjptYXRjaGVzKGNvbnN0IGNoYXIqIG9wdGlvbikKIHsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyNjgyMzEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgPHNl
dD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9y
ZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBAIHN0cnVj
dCBPcHRpb25zIHsKICNlbmRpZgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXRoczsK
ICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBl
eHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcs
IGJvb2w+IGludGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlvbiB7Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlzaW9uIDI2
ODIzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVGcm9t
V2luZG93KCk7CiAgICAgdm9pZCBhZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3U3VwcG9y
dHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVybiAhb3B0
aW9ucy5ydW5TaW5nbHkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMo
b3B0aW9ucyk7IH0KKyAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYmIG1fb3B0
aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAgICBQbGF0
Zm9ybUltYWdlIHdpbmRvd1NuYXBzaG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0aW9ucyYg
b3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCShyZXZpc2lvbiAyNjgyMzEpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgogI2luY2x1ZGUg
PHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CkBAIC01OSw2ICs2MCwxMSBAQCBpbmxpbmUgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHRvV0soY29uCiAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdG9XSyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiB0
b1dLKHN0cmluZy5jX3N0cigpKTsKK30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIHRvV0soc3Ry
aW5nLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTE0LDYgKzEyMCwxMSBAQCBpbmxpbmUgV1RGOjpTdHJp
bmcgdG9XVEZTdHJpbmcoY29uc3QgSlNSCiAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0cmluZy5n
ZXQoKSk7CiB9CiAKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBzdGQ6OnN0
cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5n
LmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0tTdHJp
bmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAgcmV0dXJu
IHRvV0soY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKQEAgLTEyNSw0ICsx
MzYsMjUgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dAogICAgIHJl
dHVybiB0b1dURlN0cmluZyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgoraW5saW5lIHN0ZDo6dmVjdG9yPFN0cmluZ1R5
cGU+IHNwbGl0KGNvbnN0IFN0cmluZ1R5cGUmIHN0cmluZywgY2hhciBkZWxpbWl0ZXIpCit7Cisg
ICAgc3RkOjp2ZWN0b3I8U3RyaW5nVHlwZT4gcmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAwOwor
ICAgIHdoaWxlIChpIDwgc3RyaW5nLnNpemUoKSkgeworICAgICAgICBhdXRvIGZvdW5kSW5kZXgg
PSBzdHJpbmcuZmluZF9maXJzdF9vZihkZWxpbWl0ZXIsIGkpOworCisgICAgICAgIGlmIChmb3Vu
ZEluZGV4ICE9IGkpCisgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0cmluZy5zdWJzdHIo
aSwgZm91bmRJbmRleCAtIGkpKTsKKworICAgICAgICBpZiAoZm91bmRJbmRleCA9PSBTdHJpbmdU
eXBlOjpucG9zKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaSA9IGZvdW5kSW5kZXgg
KyAxOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdU
UgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDI2ODIzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTIgKzEwOSw2IEBAIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBwYXRoU2VwYXJhdG9yID0gJ1wKIHN0YXRpYyBjb25zdGV4cHIgYXV0byBwYXRoU2VwYXJhdG9y
ID0gJy8nOwogI2VuZGlmCiAKLWNvbnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp2aWV3V2lk
dGggPSA4MDA7Ci1jb25zdCB1bnNpZ25lZCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdodCA9IDYw
MDsKLQotY29uc3QgdW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnczY1NWR1ZpZXdXaWR0aCA9IDQ4
MDsKLWNvbnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp3M2NTVkdWaWV3SGVpZ2h0ID0gMzYw
OwotCiBjb25zdCBXVEY6OlNlY29uZHMgVGVzdENvbnRyb2xsZXI6OmRlZmF1bHRTaG9ydFRpbWVv
dXQgPSA1X3M7CiBjb25zdCBXVEY6OlNlY29uZHMgVGVzdENvbnRyb2xsZXI6Om5vVGltZW91dCA9
IC0xX3M7CiAKQEAgLTQ2OSwxNSArNDYzLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRp
YWxpemUoaW50IGFyZ2MKICAgICBtX3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IG9wdGlv
bnMuc2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIG1fZm9yY2VDb21wbGV4VGV4dCA9
IG9wdGlvbnMuZm9yY2VDb21wbGV4VGV4dDsKICAgICBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJh
d2luZyA9IG9wdGlvbnMuc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nOwotICAgIG1fc2hvdWxk
VXNlUmVtb3RlTGF5ZXJUcmVlID0gb3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7CiAg
ICAgbV9wYXRocyA9IG9wdGlvbnMucGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25z
LmFsbG93ZWRIb3N0czsKLSAgICBtX3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRT
aG93V2ViVmlldzsKLSAgICBtX3Nob3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93
VG91Y2hlczsKICAgICBtX2NoZWNrRm9yV29ybGRMZWFrcyA9IG9wdGlvbnMuY2hlY2tGb3JXb3Js
ZExlYWtzOwogICAgIG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzID0g
b3B0aW9ucy5hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHM7Ci0gICAgbV9p
bnRlcm5hbEZlYXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVzOwotICAgIG1fZXhwZXJp
bWVudGFsRmVhdHVyZXMgPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIAorICAg
IG1fZ2xvYmFsRmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzID0gb3B0aW9ucy5pbnRlcm5h
bEZlYXR1cmVzOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBv
cHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBvcHRpb25zLnNob3VsZFVzZVJl
bW90ZUxheWVyVHJlZSB9KTsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNl
cnQoeyAic2hvdWxkU2hvd1dlYlZpZXciLCBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3IH0pOwor
ICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91bGRTaG93VG91
Y2hlcyIsIG9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXMgfSk7CisKICNpZiBFTkFCTEUoQUNDRVNT
SUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1v
ZGUgPSBvcHRpb25zLmFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlOwogI2VuZGlmCkBAIC00
OTksNyArNDk1LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwog
ICAgIG1fZXZlbnRTZW5kZXJQcm94eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhp
cyk7CiB9CiAKLVdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250
cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpD
b250ZXh0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK1dLUmV0YWluUHRyPFdLQ29udGV4dENvbmZp
Z3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9u
KGNvbnN0IENvbnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8gY29uZmln
dXJhdGlvbiA9IGFkb3B0V0soV0tDb250ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKICAgICBX
S0NvbnRleHRDb25maWd1cmF0aW9uU2V0SW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24u
Z2V0KCksIGluamVjdGVkQnVuZGxlUGF0aCgpKTsKQEAgLTU2MiwxMCArNTU4LDExIEBAIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBUZXN0Q29udHJvbGxlcjo6d2UKIAogV0tSZXRhaW5QdHI8V0tQYWdl
Q29uZmlndXJhdGlvblJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRp
b24oY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwg
IW1fY29udGV4dE9wdGlvbnMtPmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5j
b250ZXh0T3B0aW9ucykpIHsKLSAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdl
bmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24ob3B0aW9ucy5jb250ZXh0T3B0aW9ucyk7CisgICAg
YXV0byBjb250ZXh0T3B0aW9ucyA9IG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKTsKKyAgICBpZiAo
IW1fY29udGV4dCB8fCAhbV9jb250ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0
aW9ucyhjb250ZXh0T3B0aW9ucykpIHsKKyAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlv
biA9IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29udGV4dE9wdGlvbnMpOwogICAgICAg
ICBtX2NvbnRleHQgPSBwbGF0Zm9ybUFkanVzdENvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVh
dGVXaXRoQ29uZmlndXJhdGlvbihjb250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpLmdldCgpLCBj
b250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBv
cHRpb25zLmNvbnRleHRPcHRpb25zOworICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gY29udGV4
dE9wdGlvbnM7CiAKICAgICAgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyID0gbWFrZVVuaXF1ZTxH
ZW9sb2NhdGlvblByb3ZpZGVyTW9jaz4obV9jb250ZXh0LmdldCgpKTsKIApAQCAtNjI3LDcgKzYy
NCw3IEBAIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QKICAgICBXS1Bh
Z2VDb25maWd1cmF0aW9uU2V0Q29udGV4dChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9jb250
ZXh0LmdldCgpKTsKICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKHBhZ2VDb25m
aWd1cmF0aW9uLmdldCgpLCBtX3BhZ2VHcm91cC5nZXQoKSk7CiAgICAgCi0gICAgaWYgKG9wdGlv
bnMudXNlRXBoZW1lcmFsU2Vzc2lvbikgeworICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNl
c3Npb24oKSkgewogICAgICAgICBhdXRvIGVwaGVtZXJhbERhdGFTdG9yZSA9IGFkb3B0V0soV0tX
ZWJzaXRlRGF0YVN0b3JlQ3JlYXRlTm9uUGVyc2lzdGVudERhdGFTdG9yZSgpKTsKICAgICAgICAg
V0tQYWdlQ29uZmlndXJhdGlvblNldFdlYnNpdGVEYXRhU3RvcmUocGFnZUNvbmZpZ3VyYXRpb24u
Z2V0KCksIGVwaGVtZXJhbERhdGFTdG9yZS5nZXQoKSk7CiAgICAgfQpAQCAtNjM5LDExICs2MzYs
MTIgQEAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiB7CisgICAgYXV0byBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBvcHRp
b25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwogI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIGlmICghb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7
CisgICAgaWYgKCFhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAg
ICAvLyBUaGUgYnVuZGxlIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgc2V0IG9uY2UgcGVyIHRlc3Qs
IGFuZCBpcyBjbGVhcmVkIGJldHdlZW4gdGVzdHMuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X2hhc1NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7Ci0gICAgICAgIHNldEFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcihvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7
CisgICAgICAgIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihhcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIpOwogICAgICAgICBtX2hhc1NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciA9IHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC02ODYsNyArNjg0LDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6Y3JlYXRlV2ViVmlld1dpdGhPcAogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAg
ICAgIDAsIC8vIHBhZ2VEaWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1
b3RhLAotICAgICAgICBvcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA/IHJ1bk9wZW5Q
YW5lbCA6IDAsCisgICAgICAgIG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgPyBy
dW5PcGVuUGFuZWwgOiAwLAogICAgICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LAogICAgICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKICAgICAgICAgMCwgLy8g
Zm9vdGVySGVpZ2h0CkBAIC03OTUsOSArNzkzLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3Jl
YXRlV2ViVmlld1dpdGhPcAogICAgIC8vIHNvbWV0aGluZyBlbHNlIGZvciBzcGVjaWZpYyB0ZXN0
cyB0aGF0IG5lZWQgdG8gcnVuIGF0IGEgZGlmZmVyZW50IHdpbmRvdyBzY2FsZS4KICAgICBtX21h
aW5XZWJWaWV3LT5jaGFuZ2VXaW5kb3dTY2FsZUlmTmVlZGVkKDEpOwogICAgIAotICAgIGlmICgh
b3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYg
KCFhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICByZWluaXRp
YWxpemVBcHBCb3VuZERvbWFpbnMoKTsKLSAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmllcklu
TmV0d29ya1Byb2Nlc3Mob3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAg
ICAgICB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhhcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIpOwogICAgIH0KIH0KIApAQCAtODA5LDcgKzgwNyw3IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmVuc3VyZVZpZXdTdXBwb3J0c08KICAgICAgICAgLy8gSGF2aW5nIGNyZWF0
ZWQgYW5vdGhlciBwYWdlICh2aWEgd2luZG93Lm9wZW4oKSkgcHJldmVudHMgcHJvY2VzcyBzd2Fw
cGluZyBvbiBuYXZpZ2F0aW9uIGFuZCBpdCBtYXkgdGhlcmVmb3JlCiAgICAgICAgIC8vIGNhdXNl
IGZsYWtpbmVzcyB0byByZXVzZSB0aGUgdmlldy4gV2Ugc2hvdWxkIGFsc28gYWx3YXlzIG1ha2Ug
YSBuZXcgdmlldyBpZiB0aGUgdGVzdCBpcyBtYXJrZWQgYXMgYXBwLWJvdW5kLCBiZWNhdXNlCiAg
ICAgICAgIC8vIHRoZSB2aWV3IGNvbmZpZ3VyYXRpb24gbXVzdCBjaGFuZ2UuCi0gICAgICAgIGlm
ICghbV9jcmVhdGVkT3RoZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlv
bnMob3B0aW9ucykgJiYgIW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmICgh
bV9jcmVhdGVkT3RoZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMo
b3B0aW9ucykgJiYgIW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICB3aWxsRGVzdHJveVdlYlZpZXcoKTsKQEAgLTgzNiw4ICs4MzQsOCBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJl
bmNlc1Jlc2V0VGVzdFJ1bm5lck92ZXJyaWRlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBXS1ByZWZl
cmVuY2VzRW5hYmxlQWxsRXhwZXJpbWVudGFsRmVhdHVyZXMocHJlZmVyZW5jZXMpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgZXhwZXJpbWVudGFsRmVhdHVyZSA6IG9wdGlvbnMuZXhwZXJpbWVudGFs
RmVhdHVyZXMpCi0gICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0dXJlRm9y
S2V5KHByZWZlcmVuY2VzLCBleHBlcmltZW50YWxGZWF0dXJlLnZhbHVlLCB0b1dLKGV4cGVyaW1l
bnRhbEZlYXR1cmUua2V5KS5nZXQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1
ZV0gOiBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKCkpCisgICAgICAgIFdLUHJlZmVyZW5j
ZXNTZXRFeHBlcmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhr
ZXkpLmdldCgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0
dXJlcyhwcmVmZXJlbmNlcyk7CiAKQEAgLTg2MiwxNyArODYwLDE3IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxE
ZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtF
bmFibGVkIikuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFs
RGVidWdGZWF0dXJlIDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgIFdL
UHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmUudmFsdWUsIHRvV0soaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUua2V5KS5n
ZXQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gIDogb3B0aW9ucy5pbnRl
cm5hbERlYnVnRmVhdHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVi
dWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JblVJ
UHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5V
SVByb2Nlc3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3NF
bmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vz
cyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcyk7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5j
ZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVu
YWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2Fw
dHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNh
cHR1cmVBdWRpb0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVk
aW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVB
dWRpb0luR1BVUHJvY2VzcygpKTsKICNlbmRpZgotICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlv
bnMuc2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldFBhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUFwcE5hcCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFByb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0
aW9ucygpLnNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRQYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBcHBOYXAoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAg
ICAgV0tQcmVmZXJlbmNlc1NldFN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkKHBy
ZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFhTU0F1ZGl0b3JFbmFibGVk
KHByZWZlcmVuY2VzLCBmYWxzZSk7CkBAIC04ODMsMTAgKzg4MSwxMCBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3Jp
cHRSdW50aW1lRmxhZ3MocHJlZmVyZW5jZXMsIGtXS0phdmFTY3JpcHRSdW50aW1lRmxhZ3NBbGxF
bmFibGVkKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0
b21hdGljYWxseShwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFT
Y3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVy
ZW5jZXNTZXRET01QYXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9tUGFzdGVBbGxv
d2VkKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RE9NUGFzdGVBbGxvd2VkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmRvbVBhc3RlQWxsb3dlZCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0VW5pdmVyc2Fs
QWNjZXNzRnJvbUZpbGVVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVm
ZXJlbmNlc1NldEZpbGVBY2Nlc3NGcm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVl
KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNBbGxvd2VkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpKTsKICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCiAgICAgV0tQcmVmZXJlbmNlc1NldEZ1bGxTY3JlZW5FbmFibGVkKHByZWZl
cmVuY2VzLCB0cnVlKTsKICNlbmRpZgpAQCAtODk5LDE4ICs4OTcsMTggQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21Q
YXN0ZWJvYXJkRGF0YUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5j
ZXNTZXREaWFsb2dFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICBXS1By
ZWZlcmVuY2VzU2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLnVz
ZU1vY2tTY3JvbGxiYXJzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MocHJlZmVyZW5jZXMsIG9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9w
dGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNZW51
SXRlbUVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxl
bWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVu
Y2VzLCBvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRN
b2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rl
cm5NZWRpYUNvbnRyb2xzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25F
bmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFi
bGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRo
ZW50aWNhdG9yKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09y
aWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRDb2xvckZpbHRlckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0
ZXIpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlKHByZWZlcmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01v
ZGUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Nr
U2Nyb2xsYmFyc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMo
KSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVu
Y2VzLCBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVu
dEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KCkpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRLZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0
aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5N
ZWRpYUNvbnRyb2xzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRp
YUNvbnRyb2xzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24oKSk7CisgICAg
V0tQcmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVu
dGljYXRvcigpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09y
aWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldENvbG9yRmlsdGVyRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZp
bHRlcigpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5E
YXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRh
cmtNb2RlKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVu
Y2VzLCBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSk7CiAKICAgICBXS1ByZWZlcmVu
Y2VzU2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5
LTEiKS5nZXQoKSk7CiAKQEAgLTkzMiw3ICs5MzAsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNl
c1NldEhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChwcmVmZXJlbmNlcywg
ZmFsc2UpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQo
cHJlZmVyZW5jZXMsIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNl
QWNjZWxlcmF0ZWREcmF3aW5nKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZChwcmVmZXJlbmNlcywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwg
b3B0aW9ucy51c2VBY2NlbGVyYXRlZERyYXdpbmcoKSk7CiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBiZSB0ZXN0aW5nIHRoZSBkZWZhdWx0LgogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQmxv
Y2tpbmdQb2xpY3kocHJlZmVyZW5jZXMsIGtXS0FsbG93QWxsU3RvcmFnZSk7CiAKQEAgLTk1Myw3
ICs5NTEsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAg
CiAgICAgV0tQcmVmZXJlbmNlc1NldExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChwcmVm
ZXJlbmNlcywgZmFsc2UpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9u
c0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMoKSk7CiAKICAgICBXS1ByZWZlcmVu
Y2VzU2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIApA
QCAtOTcyLDcgKzk3MCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNU
b0MKICAgICBXS1ByZWZlcmVuY2VzU2V0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUo
cHJlZmVyZW5jZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3BlYWtlclNlbGVjdGlvblJlcXVpcmVzVXNlckdlc3R1cmUiKSk7CiAKLSAgICBXS1By
ZWZlcmVuY2VzU2V0U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNl
cywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChw
cmVmZXJlbmNlcywgb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KCkpOwogCiAj
aWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBXS1ByZWZlcmVuY2Vz
U2V0SXNBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChwcmVmZXJlbmNlcywgYWNjZXNz
aWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUoKSk7CkBAIC0xMDA2LDExICsxMDA0LDEyIEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKICAgICBzZXRWYWx1ZShyZXNldE1l
c3NhZ2VCb2R5LCAiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZU1vZGUpOwogI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxl
bmd0aCgpKQotICAgICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIs
IG9wdGlvbnMuanNjT3B0aW9ucy5jX3N0cigpKTsKKyAgICBhdXRvIGpzY09wdGlvbnMgPSBvcHRp
b25zLmpzY09wdGlvbnMoKTsKKyAgICBpZiAoIWpzY09wdGlvbnMuZW1wdHkoKSkKKyAgICAgICAg
c2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBqc2NPcHRpb25zLmNfc3Ry
KCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRB
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNl
dEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCkuY19zdHIoKSk7CiAjZW5kaWYKIAogICAgIFdLUGFnZVBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCB0b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5
LmdldCgpKTsKQEAgLTExMTgsNyArMTExNyw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0
U3RhdGVUb0NvbnNpc3QKIAogICAgIHNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoZmFsc2Up
OwogICAgIAotICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jl
c1ZpZXdwb3J0U2NhbGVMaW1pdHMpOworICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
KG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSk7CiAKICAgICBtX29wZW5QYW5l
bEZpbGVVUkxzID0gbnVsbHB0cjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTMxOCw3
ICsxMzE3LDcgQEAgc3RhdGljIHN0ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVmIHVybAogICAg
IHJldHVybiBzdGQ6OnN0cmluZygpOwogfQogCi1zdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVS
TChjb25zdCBjaGFyKiBwYXRoT3JVUkwpCitXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRl
VGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRoT3JV
UkwsICJodHRwOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ryc3Ry
KHBhdGhPclVSTCwgImZpbGU6Ly8iKSkKICAgICAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHBhdGhPclVSTCk7CkBAIC0xMzU2LDIyMSArMTM1NSwyNSBAQCBzdGF0aWMgV0tV
UkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFyCiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGJ1ZmZlci5nZXQoKSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJ0cnVlIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09ICJm
YWxzZSIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPR19FUlJPUigiRm91bmQgdW5l
eHBlY3RlZCB2YWx1ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9y
ICdmYWxzZScuIiwgdmFsdWUuY19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17
Ci0gICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0
cigpKSk7Ci0gICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFz
ZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHRvU1REKGFk
b3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKLX0KLQotc3RhdGljIHN0
ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKQotewotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhj
cmVhdGVUZXN0VVJMKHZhbHVlLmNfc3RyKCkpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVU
ZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qg
c3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkK
LXsKLSAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKLSAgICBpZiAoZmls
ZW5hbWUuZW1wdHkoKSkgewotICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVy
c2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgZmls
ZW5hbWUgPSB0ZXN0UGF0aChhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkp
KS5nZXQoKSk7Ci0gICAgfQotCi0gICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0
RmlsZShmaWxlbmFtZS5kYXRhKCkpOwotICAgIGlmICghdGVzdEZpbGUuZ29vZCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgZ2V0bGluZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJp
bmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5n
IGVuZFN0cmluZygiIF0iKTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmlu
ZChiZWdpblN0cmluZyk7Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5w
b3MpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZp
bmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3Rk
OjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQg
b2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVn
aW5Mb2NhdGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2Nh
dGlvbiArIGJlZ2luU3RyaW5nLnNpemUoKSkpOwotICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOwot
ICAgIHdoaWxlIChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgewotICAgICAgICBzaXpl
X3QgcGFpckVuZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlm
IChwYWlyRW5kID09IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICAgICAgcGFpckVuZCA9IHBh
aXJTdHJpbmcuc2l6ZSgpOwotICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3Ry
aW5nLmZpbmQoIj0iLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0g
c3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9w
dGlvbiBpbiB0ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMi
LCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGF1dG8ga2V5ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlv
biAtIHBhaXJTdGFydCk7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihl
cXVhbHNMb2NhdGlvbiArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0KLSAg
ICAgICAgaWYgKCFrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSkgewotICAgICAgICAgICAga2V5
ID0ga2V5LnN1YnN0cigxMyk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5leHBlcmltZW50YWxG
ZWF0dXJlcy5hZGQoU3RyaW5nKGtleS5jX3N0cigpKSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWtleS5yZmluZCgiaW50ZXJu
YWw6IikpIHsKLSAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7Ci0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19zdHIoKSks
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGtleSA9PSAibGFuZ3VhZ2UiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4
dE9wdGlvbnMub3ZlcnJpZGVMYW5ndWFnZXMgPSBTdHJpbmcodmFsdWUuY19zdHIoKSkuc3BsaXQo
JywnKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIpCi0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQWNj
ZWxlcmF0ZWREcmF3aW5nIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUFjY2VsZXJhdGVk
RHJhd2luZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAidXNlRmxleGlibGVWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy51c2VGbGV4aWJsZVZpZXdwb3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VEYXRhRGV0ZWN0aW9uIikKLSAgICAg
ICAgICAgIHRlc3RPcHRpb25zLnVzZURhdGFEZXRlY3Rpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZU1vY2tTY3JvbGxi
YXJzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJu
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5uZWVkc1Np
dGVTcGVjaWZpY1F1aXJrcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVz
ZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50
RWxlbWVudCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVu
dCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAgICAgICAgdGVzdE9w
dGlvbnMuZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Np
b24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlTWVudUl0ZW1FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1l
bnVJdGVtRWxlbWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJv
bHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImVuYWJsZVBvaW50ZXJMb2NrIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVu
YWJsZVBvaW50ZXJMb2NrID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbiA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlV2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJs
ZUluc3BlY3RvckFkZGl0aW9ucyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0
aW9uTWFuaWZlc3QiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVz
dCA9IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhP
clVSTCk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dD
cm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImRvbVBhc3Rl
QWxsb3dlZCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFi
bGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250
ZXh0T3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlU2Vydmlj
ZVdvcmtlclNob3J0VGltZW91dCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0
aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRl
ciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAicHVu
Y2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHZhbHVlOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInJ1blNpbmdseSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5ydW5TaW5nbHkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNwZWxsQ2hlY2tp
bmdEb3RzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5n
RG90cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZW5hYmxlU2VydmljZUNvbnRyb2xzIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmVuYWJsZVNlcnZpY2VDb250cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZWRpdGFibGUiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMuZWRpdGFibGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIpCi0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNo
b3VsZFByZXNlbnRQb3BvdmVycyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRQcmVz
ZW50UG9wb3ZlcnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImNvbnRlbnRJbnNldC50b3AiKQotICAgICAgICAgICAgdGVzdE9w
dGlvbnMuY29udGVudEluc2V0VG9wID0gc3RkOjpzdG9kKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5n
VGltZW91dHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImNvbnRlbnRNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNv
bnRlbnRNb2RlID0geyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
YXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHsgdmFsdWUuY19zdHIoKSB9OwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImVuYWJsZUFwcE5hcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5l
bmFibGVBcHBOYXAgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dzTGlua1ByZXZp
ZXciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVu
YWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVu
YWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQ
VVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5H
UFVQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5h
YmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVu
YWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0Rh
dGFVUkxzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInN0YW5kYWxvbmVXZWJB
cHBsaWNhdGlvblVSTCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zdGFuZGFsb25lV2ViQXBw
bGljYXRpb25VUkwgPSBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJpc0FwcEJvdW5kV2ViVmlldyIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIHBhaXJTdGFydCA9IHBhaXJFbmQgKyAxOwotICAgIH0KLX0KLQog
VGVzdE9wdGlvbnMgVGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYgY29tbWFuZCkgY29uc3QKIHsKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zKGNvbW1h
bmQucGF0aE9yVVJMKTsKLQotICAgIG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gbV9zaG91
bGRVc2VSZW1vdGVMYXllclRyZWU7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IG1f
c2hvdWxkU2hvd1dlYlZpZXc7Ci0KLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2ludGVybmFs
RmVhdHVyZXMpCi0gICAgICAgIG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmFkZChmZWF0
dXJlLmtleSwgZmVhdHVyZS52YWx1ZSk7Ci0gICAgZm9yIChhdXRvJiBmZWF0dXJlIDogbV9leHBl
cmltZW50YWxGZWF0dXJlcykKLSAgICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5h
ZGQoZmVhdHVyZS5rZXksIGZlYXR1cmUudmFsdWUpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJl
cyA9IG1fZ2xvYmFsRmVhdHVyZXM7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1
cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgcGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdl
KGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkp
OworICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0Rl
ZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CiAKLSAgICB1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVz
dE9wdGlvbnNGb3JUZXN0KG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJMKTsKLSAgICB1cGRhdGVU
ZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJMLCBjb21t
YW5kLmFic29sdXRlUGF0aCk7Ci0gICAgcGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhvcHRpb25zKTsK
LQotICAgIHJldHVybiBvcHRpb25zOworICAgIHJldHVybiBUZXN0T3B0aW9ucyB7IGZlYXR1cmVz
IH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdlYlZpZXdTaXplRm9yVGVzdChj
b25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKLSAgICB1bnNpZ25lZCB3aWR0aCA9IHZpZXdX
aWR0aDsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSB2aWV3SGVpZ2h0OwotICAgIGlmICh0ZXN0Lm9w
dGlvbnMoKS5pc1NWR1Rlc3QpIHsKLSAgICAgICAgd2lkdGggPSB3M2NTVkdWaWV3V2lkdGg7Ci0g
ICAgICAgIGhlaWdodCA9IHczY1NWR1ZpZXdIZWlnaHQ7Ci0gICAgfQotCi0gICAgbWFpbldlYlZp
ZXcoKS0+cmVzaXplVG8od2lkdGgsIGhlaWdodCk7CisgICAgbWFpbldlYlZpZXcoKS0+cmVzaXpl
VG8odGVzdC5vcHRpb25zKCkudmlld1dpZHRoKCksIHRlc3Qub3B0aW9ucygpLnZpZXdIZWlnaHQo
KSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdChQ
bGF0Zm9ybVdlYlZpZXcqIHZpZXcsIGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewotICAg
IHZpZXctPmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQodGVzdC5vcHRpb25zKCkuZGV2aWNlU2Nh
bGVGYWN0b3IpOworICAgIHZpZXctPmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQodGVzdC5vcHRp
b25zKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNv
bmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQpAQCAtMTc2Niw2
ICsxNTY5LDEyIEBAIHN0YXRpYyBUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCAKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgZGllKGlucHV0TGluZSk7CiAgICAgfQorICAgIAorICAg
IGlmIChyZXN1bHQuYWJzb2x1dGVQYXRoLmVtcHR5KCkpIHsKKyAgICAgICAgLy8gR3Jvc3MuIE5l
ZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRoZSBzdHJpbmcgdHlwZXMgYW5k
IFVSTHMuCisgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0ZXN0UGF0aChhZG9wdFdLKFRl
c3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHJlc3VsdC5wYXRoT3JVUkwuY19zdHIoKSkpLmdl
dCgpKTsKKyAgICB9CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNzg4LDcgKzE1OTcs
NyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqCiAgICAgaWYgKGNv
bW1hbmQudGltZW91dCA+IDBfcykKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0Q3Vz
dG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQpOwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlvbi0+
c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKKyAgICBtX2N1cnJlbnRJ
bnZvY2F0aW9uLT5zZXREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSk7CiAK
ICAgICBwbGF0Zm9ybVdpbGxSdW5UZXN0KCptX2N1cnJlbnRJbnZvY2F0aW9uKTsKIApAQCAtMzAw
Myw3ICsyODEyLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdl
Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBpZiAoIW9w
dGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbigpKQogICAgICAgICBXS1BhZ2VDb25maWd1cmF0aW9u
U2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0aW9uLCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9y
ZSgpKTsKIAogICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdLUGFnZUNvbmZpZ3VyYXRpb25HZXRX
ZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24pOwpAQCAtMzgxOCw3ICszNjI3LDcgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cmVpbml0aWFsaXplQXBwQm91bgogICAgIFdLV2Vic2l0ZURhdGFT
dG9yZVJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURh
dGFTdG9yZSgpKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQordm9p
ZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mo
Y29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBCcm93c2Vy
UHJpdmFjeUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1dlYnNpdGVEYXRh
U3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29udHJvbGxl
cjo6d2Vic2l0ZURhdGFTdG9yZSgpLCB0b1dLKGJ1bmRsZUlkZW50aWZpZXIpLmdldCgpLCAmY29u
dGV4dCwgaW5BcHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CkBAIC0zODMzLDgg
KzM2NDIsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjbGVhckJ1bmRsZUlkZW50aWZpCiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkZFRl
c3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKSBjb25zdAogeworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmluamVjdFVzZXJTY3JpcHQoV0tTdHJpbmdSZWYpCkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNjgyMzEpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxzZXQ+
CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8
dmVjdG9yPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CkBAIC01MCwxMiArNTEsMTIgQEAgT0JKQ19DTEFTUyBXS1dlYlZpZXdDb25maWd1cmF0
aW9uOwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVGVzdEludm9jYXRpb247CitjbGFzcyBF
dmVudFNlbmRlclByb3h5OwogY2xhc3MgT3JpZ2luU2V0dGluZ3M7CiBjbGFzcyBQbGF0Zm9ybVdl
YlZpZXc7Ci1jbGFzcyBFdmVudFNlbmRlclByb3h5OworY2xhc3MgVGVzdEludm9jYXRpb247Citj
bGFzcyBUZXN0T3B0aW9uczsKIHN0cnVjdCBUZXN0Q29tbWFuZDsKLXN0cnVjdCBUZXN0T3B0aW9u
czsKIAogY2xhc3MgQXN5bmNUYXNrIHsKIHB1YmxpYzoKQEAgLTkxLDExICs5Miw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBjb25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGly
ZWN0b3JpZXMoV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblJlZik7CiAgICAgc3RhdGlj
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHZpZXdXaWR0aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgdmlld0hlaWdodDsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB3M2NTVkdWaWV3V2lk
dGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHczY1NWR1ZpZXdIZWlnaHQ7CisgICAgc3Rh
dGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKTsKIAogICAg
IHN0YXRpYyBjb25zdCBXVEY6OlNlY29uZHMgZGVmYXVsdFNob3J0VGltZW91dDsKICAgICBzdGF0
aWMgY29uc3QgV1RGOjpTZWNvbmRzIG5vVGltZW91dDsKQEAgLTExNSwyMCArMTEyLDE1IEBAIHB1
YmxpYzoKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSgpOwogCiAg
ICAgRXZlbnRTZW5kZXJQcm94eSogZXZlbnRTZW5kZXJQcm94eSgpIHsgcmV0dXJuIG1fZXZlbnRT
ZW5kZXJQcm94eS5nZXQoKTsgfQotCi0gICAgYm9vbCBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUo
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJlZTsgfQogICAgIAogICAg
IC8vIFJ1bnMgdGhlIHJ1biBsb29wIHVudGlsIGBkb25lYCBpcyB0cnVlIG9yIHRoZSB0aW1lb3V0
IGVsYXBzZXMuCiAgICAgYm9vbCB1c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpIHsgcmV0dXJu
IG1fdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXI7IH0KICAgICB2b2lkIHJ1blVudGlsKGJvb2wm
IGRvbmUsIFdURjo6U2Vjb25kcyB0aW1lb3V0KTsKICAgICB2b2lkIG5vdGlmeURvbmUoKTsKIAot
ICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNob3dX
ZWJWaWV3OyB9CiAgICAgYm9vbCB1c2luZ1NlcnZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtX3Vz
aW5nU2VydmVyTW9kZTsgfQogICAgIHZvaWQgY29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVz
dEludm9jYXRpb24mKTsKLSAgICAKLSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRTaG93VG91Y2hlczsgfQotICAgIAorCiAgICAgYm9vbCBiZWZvcmVV
bmxvYWRSZXR1cm5WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFs
dWU7IH0KICAgICB2b2lkIHNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpIHsg
bV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTI3NSw3ICsyNjcsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckxvYWRlZFN1YnJlc291cmNlRG9tYWlucygpOwogICAg
IHZvaWQgY2xlYXJBcHBCb3VuZFNlc3Npb24oKTsKICAgICB2b2lkIHJlaW5pdGlhbGl6ZUFwcEJv
dW5kRG9tYWlucygpOwotICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHVwZGF0ZUJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJ
ZGVudGlmaWVyKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nl
c3MoKTsKIAogICAgIFdLQXJyYXlSZWYgb3BlblBhbmVsRmlsZVVSTHMoKSBjb25zdCB7IHJldHVy
biBtX29wZW5QYW5lbEZpbGVVUkxzLmdldCgpOyB9CkBAIC0zNjIsNyArMzU0LDcgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IGdl
bmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnMmKTsKLSAgICBXS1JldGFp
blB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0
aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9ucyYpIGNvbnN0OworICAgIFdLUmV0
YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3Vy
YXRpb24oY29uc3QgQ29udGV4dE9wdGlvbnMmKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemUo
aW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSk7CiAgICAgdm9pZCBjcmVhdGVXZWJWaWV3V2l0
aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHJ1bigpOwpAQCAtMzgwLDcg
KzM3Miw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKICAgICBXS0Nv
bnRleHRSZWYgcGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiwgV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3Q7CiAgICAg
dm9pZCBwbGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3Qg
VGVzdE9wdGlvbnMmKTsKICAgICBzdGF0aWMgUGxhdGZvcm1XZWJWaWV3KiBwbGF0Zm9ybUNyZWF0
ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudFZpZXcsIFdLUGFnZUNvbmZpZ3VyYXRp
b25SZWYsIGNvbnN0IFRlc3RPcHRpb25zJik7CiAgICAgdm9pZCBwbGF0Zm9ybVJlc2V0UHJlZmVy
ZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKQEAgLTM4OSw3ICszODAsNyBAQCBwcml2YXRlOgog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgY29jb2FQbGF0Zm9ybUluaXRpYWxpemUoKTsK
ICAgICB2b2lkIGNvY29hUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0
aW9ucyYpOwotICAgIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IHN0
ZDo6c3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllclRl
c3RpbmdPdmVycmlkZSgpOwogI2VuZGlmCiAgICAgdm9pZCBwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdG
b3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CkBAIC00MDMsNyArMzk0LDkgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QoY29uc3QgVGVz
dEludm9jYXRpb24mKTsKICAgICBUZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0
T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
KSBjb25zdDsKKyAgICBUZXN0RmVhdHVyZXMgZ2xvYmFsRmVhdHVyZURlZmF1bHRzRm9yVGVzdChj
b25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9ybVNwZWNp
ZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OworICAg
IFRlc3RGZWF0dXJlcyBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9y
VGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVXZWJWaWV3
U2l6ZUZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKICAgICB2b2lkIHVwZGF0ZVdpbmRv
d1NjYWxlRm9yVGVzdChQbGF0Zm9ybVdlYlZpZXcqLCBjb25zdCBUZXN0SW52b2NhdGlvbiYpOwpA
QCAtNTM4LDggKzUzMSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NyZWF0ZWRPdGhlclBhZ2Ug
eyBmYWxzZSB9OwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3BhdGhzOwogICAgIHN0
ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX2FsbG93ZWRIb3N0czsKLSAgICBIYXNoTWFwPFN0cmluZywg
Ym9vbD4gbV9pbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBtX2V4
cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIFRlc3RGZWF0dXJlcyBtX2dsb2JhbEZlYXR1cmVzOwog
CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1faW5qZWN0ZWRCdW5kbGVQYXRoOwogICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX3Rlc3RQbHVnaW5EaXJlY3Rvcnk7CkBAIC01NDgs
NyArNTQwLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVdlYlZp
ZXc+IG1fbWFpbldlYlZpZXc7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBtX2NvbnRl
eHQ7Ci0gICAgT3B0aW9uYWw8VGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zPiBtX2NvbnRleHRP
cHRpb25zOworICAgIE9wdGlvbmFsPENvbnRleHRPcHRpb25zPiBtX2NvbnRleHRPcHRpb25zOwog
ICAgIFdLUmV0YWluUHRyPFdLUGFnZUdyb3VwUmVmPiBtX3BhZ2VHcm91cDsKICAgICBXS1JldGFp
blB0cjxXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZj4gbV91c2VyQ29udGVudENvbnRyb2xsZXI7
CiAKQEAgLTYwNSwxNCArNTk3LDEwIEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZm9yY2VDb21w
bGV4VGV4dCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2lu
ZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJlZSB7IGZhbHNl
IH07Ci0KKyAgICAKICAgICBib29sIG1fc2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZExvZ0Rvd25sb2FkQ2Fs
bGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxi
YWNrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFNob3dXZWJWaWV3IHsgZmFsc2UgfTsK
LSAgICAKLSAgICBib29sIG1fc2hvdWxkU2hvd1RvdWNoZXMgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV9jaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwogCiAgICAgYm9vbCBtX2FsbG93QW55SFRU
UFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyB7IGZhbHNlIH07CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjY4MjMxKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMSwxMSArMTMxLDExIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNob3VsZExvZ0hpc3RvcnlD
bGkKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRlc3RJbnZvY2F0aW9uOjpj
cmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKICAgICBhdXRvIGJlZ2luVGVzdE1lc3Nh
Z2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwotICAgIHNldFZh
bHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3cG9ydCIsIG9wdGlvbnMo
KS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9k
eSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCgp
KTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBQaXhlbHMiLCBtX2R1
bXBQaXhlbHMpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVGltZW91dCIs
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVvdXQubWlsbGlzZWNvbmRzKCkpKTsKICAgICBz
ZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIs
IG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKLSAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNz
YWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgb3B0aW9ucygpLmFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIHNldFZhbHVlKGJlZ2luVGVz
dE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBvcHRpb25zKCku
YWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsKICAgICByZXR1cm4gYmVn
aW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9w
dGlvbnMuY3BwCShyZXZpc2lvbiAyNjgyMzEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RPcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzQgKzI2LDM2MiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25zLmgiCiAKKyNpbmNsdWRlICJTdHJp
bmdGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPGZz
dHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNkZWZpbmUgRFVNUF9GRUFUVVJFUyAwCisKIG5h
bWVzcGFjZSBXVFIgewogCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQorI2lmIERVTVBfRkVBVFVSRVMK
K3N0YXRpYyB2b2lkIGR1bXBGZWF0dXJlcyhjb25zdCBUZXN0RmVhdHVyZXMmIGZlYXR1cmVzKQog
ewotICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5jX3N0cigpKTsKLSAgICByZXR1cm4gcGF0aC5j
b250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWluc2Vuc2l0aXZlLgorICAgIGlmIChmZWF0dXJl
cy5leHBlcmltZW50YWxGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1
cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuZW1w
dHkoKSAmJiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAg
IHN0ZDo6Y2VyciA8PCAiICBbRU1QVFldXG4iOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGlmICghZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSkgeworICAg
ICAgICBzdGQ6OmNlcnIgPDwgIiAgRXhwZXJpbWVudGFsIEZlYXR1cmVzOiBcbiI7CisgICAgICAg
IGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcykK
KyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUg
PDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMu
ZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgSW50ZXJuYWwgRmVhdHVyZXM6IFxu
IjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmludGVybmFsRGVi
dWdGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6
ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5ib29sRmVhdHVy
ZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgQm9vbCBGZWF0dXJlczogXG4i
OworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuYm9vbEZlYXR1cmVz
KQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1
ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5
KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIERvdWJsZSBGZWF0dXJlczogXG4iOworICAg
ICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMpCisg
ICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8
ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuZW1wdHkoKSkg
eworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIEZlYXR1cmVzOiBcbiI7CisgICAgICAg
IGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcykKKyAgICAg
ICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xu
JzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0eSgp
KSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgVmVjdG9yIEZlYXR1cmVzOiBcbiI7
CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JG
ZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6IE51
bWJlciBvZiBzdHJpbmdzICIgPDwgdmFsdWUuc2l6ZSgpIDw8ICdcbic7CisgICAgfQogfQorI2Vu
ZGlmCiAKLXN0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbnN0IHN0ZDo6
c3RyaW5nJiBwYXRoT3JVUkwpCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZl
YXR1cmVzIGFkZGl0aW9uYWwpCiB7Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3cG9y
dC8iKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHN0ZDo6dW5vcmRlcmVkX21hcDo6
bWVyZ2Ugd2hlbiBpdCBpcyBhdmFpbGFibGUgZm9yIGFsbCBwb3J0cy4KKworICAgIGZvciAoYXV0
byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAg
ICBiYXNlLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7
CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzKQorICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnRfb3JfYXNz
aWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFs
LmJvb2xGZWF0dXJlcykKKyAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2ln
bihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5k
b3VibGVGZWF0dXJlcykKKyAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJlcy5pbnNlcnRfb3JfYXNz
aWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFs
LnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1cmVzLmluc2VydF9vcl9h
c3NpZ24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9u
YWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3RyaW5nVmVjdG9yRmVhdHVy
ZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKK30KKworc3RhdGljIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGJvb2xEZWZhdWx0c01hcCgpCit7Cisg
ICAgc3RhdGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbWFwIHsKKyAg
ICAgICAgeyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCBmYWxzZSB9LAorICAgICAgICB7ICJ1c2VB
Y2NlbGVyYXRlZERyYXdpbmciLCBmYWxzZSB9LAorICAgICAgICB7ICJ1c2VSZW1vdGVMYXllclRy
ZWUiLCBmYWxzZSB9LAorICAgICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIGZhbHNlIH0sCisg
ICAgICAgIHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCBmYWxzZSB9LAorICAgICAgICB7ICJ1c2VE
YXRhRGV0ZWN0aW9uIiwgZmFsc2UgfSwKKyAgICAgICAgeyAidXNlTW9ja1Njcm9sbGJhcnMiLCB0
cnVlIH0sCisgICAgICAgIHsgIm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIiwgZmFsc2UgfSwKKyAg
ICAgICAgeyAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCBmYWxzZSB9LAorICAgICAgICB7
ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIGZhbHNlIH0sCisgICAgICAgIHsg
ImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIiLCBmYWxzZSB9LAorICAgICAgICB7ICJ1c2VFcGhlbWVyYWxTZXNz
aW9uIiwgZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlTWVudUl0ZW1FbGVtZW50IiwgZmFsc2Ug
fSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIGZhbHNlIH0sCisgICAgICAgIHsg
ImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCB0cnVlIH0sCisgICAgICAgIHsgImVuYWJsZVBv
aW50ZXJMb2NrIiwgZmFsc2UgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb24i
LCB0cnVlIH0sCisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50
aWNhdG9yIiwgdHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCBm
YWxzZSB9LAorICAgICAgICB7ICJzaG91bGRTaG93VG91Y2hlcyIsIGZhbHNlIH0sCisgICAgICAg
IHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIGZhbHNlIH0sCisgICAgICAgIHsgImFsbG93
Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgZmFsc2UgfSwKKyAg
ICAgICAgeyAiZG9tUGFzdGVBbGxvd2VkIiwgdHJ1ZSB9LAorICAgICAgICB7ICJlbmFibGVDb2xv
ckZpbHRlciIsIGZhbHNlIH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0lu
RGFya01vZGUiLCBmYWxzZSB9LAorICAgICAgICB7ICJydW5TaW5nbHkiLCBmYWxzZSB9LAorICAg
ICAgICB7ICJjaGVja0ZvcldvcmxkTGVha3MiLCBmYWxzZSB9LAorICAgICAgICB7ICJzaG91bGRJ
Z25vcmVNZXRhVmlld3BvcnQiLCBmYWxzZSB9LAorICAgICAgICB7ICJzcGVsbENoZWNraW5nRG90
cyIsIGZhbHNlIH0sCisgICAgICAgIHsgImVuYWJsZVNlcnZpY2VDb250cm9scyIsIGZhbHNlIH0s
CisgICAgICAgIHsgImVkaXRhYmxlIiwgZmFsc2UgfSwKKyAgICAgICAgeyAic2hvdWxkSGFuZGxl
UnVuT3BlblBhbmVsIiwgdHJ1ZSB9LAorICAgICAgICB7ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMi
LCB0cnVlIH0sCisgICAgICAgIHsgImVuYWJsZUFwcE5hcCIsIGZhbHNlIH0sCisgICAgICAgIHsg
ImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiLCBmYWxzZSB9LAorICAgICAgICB7ICJhbGxvd3NMaW5r
UHJldmlldyIsIHRydWUgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nl
c3MiLCBmYWxzZSB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3Mi
LCBmYWxzZSB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIGZh
bHNlIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIGZhbHNl
IH0sCisgICAgICAgIHsgImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCB0cnVlIH0sCisg
ICAgICAgIHsgImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiLCBmYWxzZSB9LAorICAgICAgICB7
ICJpc0FwcEJvdW5kV2ViVmlldyIsIGZhbHNlIH0sCisgICAgICAgIHsgImlnbm9yZVN5bmNocm9u
b3VzTWVzc2FnaW5nVGltZW91dHMiLCBmYWxzZSB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbiIsIHRydWUgfSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3YXBP
bldpbmRvd09wZW4iLCBmYWxzZSB9LAorICAgICAgICB7ICJ1c2VTZXJ2aWNlV29ya2VyU2hvcnRU
aW1lb3V0IiwgZmFsc2UgfQorICAgIH07CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGNv
bnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiYgZG91YmxlRGVmYXVs
dHNNYXAoKQoreworICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGRv
dWJsZT4gbWFwIHsKKyAgICAgICAgeyAiY29udGVudEluc2V0LnRvcCIsIDAgfSwKKyAgICAgICAg
eyAiZGV2aWNlU2NhbGVGYWN0b3IiLCAxIH0sCisgICAgICAgIHsgInZpZXdXaWR0aCIsIDgwMCB9
LAorICAgICAgICB7ICJ2aWV3SGVpZ2h0IiwgNjAwIH0KKyAgICB9OworICAgIHJldHVybiBtYXA7
Cit9CisKK3N0YXRpYyBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6
c3RyaW5nPiYgc3RyaW5nRGVmYXVsdHNNYXAoKQoreworICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtYXAgeworICAgICAgICB7ICJhcHBsaWNh
dGlvbk1hbmlmZXN0IiwgeyB9IH0sCisgICAgICAgIHsgImpzY09wdGlvbnMiLCB7IH0gfSwKKyAg
ICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7IH0gfSwKKyAgICAgICAg
eyAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgeyB9IH0sCisgICAgICAgIHsgImNvbnRl
bnRNb2RlIiwgeyB9IH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIs
IHsgfSB9CisgICAgfTsKKyAgICByZXR1cm4gbWFwOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRV
c2VGaXhlZExheW91dChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
PiYgc3RyaW5nVmVjdG9yRGVmYXVsdHNNYXAoKQogewotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FE
QVBUQVRJT04pCi0gICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHQv
IikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImRldmljZS1hZGFwdFxcIikpCisgICAgc3Rh
dGljIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+PiBtYXAgeworICAgICAgICB7ICJsYW5ndWFnZSIsIHsgfSB9CisgICAgfTsKKyAgICByZXR1
cm4gbWFwOworfQorCitlbnVtIGNsYXNzIEtleVR5cGUgOiB1aW50OF90IHsKKyAgICBCb29sLAor
ICAgIERvdWJsZSwKKyAgICBTdHJpbmcsCisgICAgU3RyaW5nUmVsYXRpdmVQYXRoLAorICAgIFN0
cmluZ1VSTCwKKyAgICBTdHJpbmdWZWN0b3IsCisgICAgVW5rbm93bgorfTsKKworc3RhdGljIGNv
bnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgS2V5VHlwZT4mIGtleVR5cGVNYXAo
KQoreworICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIEtleVR5cGU+
IG1hcCB7CisgICAgICAgIHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJ1c2VBY2NlbGVyYXRlZERyYXdpbmciLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgInVzZVJlbW90ZUxheWVyVHJlZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAic2hvdWxkU2hvd1dlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUZs
ZXhpYmxlVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZURhdGFEZXRl
Y3Rpb24iLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZU1vY2tTY3JvbGxiYXJzIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCBL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFy
aXR5IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVBdHRhY2htZW50RWxlbWVu
dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2
ZXIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Npb24iLCBL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlUG9pbnRlckxvY2siLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93VG91Y2hlcyIsIEtleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50
aWFscyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZG9tUGFzdGVBbGxvd2VkIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDb2xvckZpbHRlciIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAicnVuU2luZ2x5IiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJjaGVja0ZvcldvcmxkTGVha3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAic3BlbGxDaGVja2luZ0RvdHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJs
ZVNlcnZpY2VDb250cm9scyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZWRpdGFibGUi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkUHJlc2VudFBvcG92ZXJzIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVBcHBOYXAiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImFsbG93c0xpbmtQcmV2aWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgS2V5VHlwZTo6
Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJpc0FwcEJvdW5kV2ViVmlldyIsIEtleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAiaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iLCBL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVu
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1l
b3V0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgIAorICAgICAgICB7ICJjb250ZW50SW5zZXQudG9w
IiwgS2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgImRldmljZVNjYWxlRmFjdG9yIiwgS2V5
VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgInZpZXdXaWR0aCIsIEtleVR5cGU6OkRvdWJsZSB9
LAorICAgICAgICB7ICJ2aWV3SGVpZ2h0IiwgS2V5VHlwZTo6RG91YmxlIH0sCisKKyAgICAgICAg
eyAianNjT3B0aW9ucyIsIEtleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJhZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlcyIsIEtleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJjb250
ZW50TW9kZSIsIEtleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRpb25N
YW5pZmVzdCIsIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aCB9LAorICAgICAgICB7ICJzdGFu
ZGFsb25lV2ViQXBwbGljYXRpb25VUkwiLCBLZXlUeXBlOjpTdHJpbmdVUkwgfSwKKworICAgICAg
ICB7ICJsYW5ndWFnZSIsIEtleVR5cGU6OlN0cmluZ1ZlY3RvciB9LAorICAgIH07CisKKyAgICBy
ZXR1cm4gbWFwOworfQorCitzdGF0aWMgS2V5VHlwZSBrZXlUeXBlKHN0ZDo6c3RyaW5nIGtleSkK
K3sKKyAgICBhdXRvIG1hcCA9IGtleVR5cGVNYXAoKTsKKyAgICBhdXRvIGl0ID0gbWFwLmZpbmQo
a2V5KTsKKyAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gS2V5VHlwZTo6
VW5rbm93bjsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKworc3RhdGljIGJvb2wgcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gInRydWUiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgorICAgIGlm
ICh2YWx1ZSA9PSAiZmFsc2UiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0dfRVJS
T1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVj
dGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIGJvb2wgaXNTVkdUZXN0UGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0
aE9yVVJMKQorc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNS
ZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYg
cGF0aE9yVVJMKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnL1cz
Qy1TVkctMS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzNDLVNWRy0xLjEi
KTsKKyAgICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0so
V0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Cisg
ICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkp
KTsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNV
UkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiB0b1NURChhZG9wdFdL
KFdLVVJMQ29weVN0cmluZyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTCh2YWx1ZS5jX3N0
cigpKSkpKTsKK30KKworc3RhdGljIFRlc3RGZWF0dXJlcyBwYXJzZVRlc3RIZWFkZXIoc3RkOjpm
aWxlc3lzdGVtOjpwYXRoIHBhdGgsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7Cisg
ICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmICghc3RkOjpmaWxlc3lzdGVtOjpleGlz
dHMocGF0aCkpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKworICAgIHN0ZDo6aWZzdHJlYW0g
ZmlsZShwYXRoKTsKKyAgICBpZiAoIWZpbGUuZ29vZCgpKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IG9wZW4gZmlsZSB0byBpbnNwZWN0IHRlc3QgaGVhZGVycyBpbiAlcyIsIHBhdGgu
Y19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGQ6OnN0
cmluZyBvcHRpb25zOworICAgIGdldGxpbmUoZmlsZSwgb3B0aW9ucyk7CisgICAgc3RkOjpzdHJp
bmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOworICAgIHN0ZDo6c3RyaW5n
IGVuZFN0cmluZygiIF0iKTsKKyAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmlu
ZChiZWdpblN0cmluZyk7CisgICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5w
b3MpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBv
cHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKKyAgICBpZiAoZW5kTG9jYXRp
b24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
ZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gZmVhdHVyZXM7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRp
b25zLnN1YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlv
biAtIChiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7CisgICAgc2l6ZV90IHBh
aXJTdGFydCA9IDA7CisgICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7
CisgICAgICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0
KTsKKyAgICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAg
ICBwYWlyRW5kID0gcGFpclN0cmluZy5zaXplKCk7CisgICAgICAgIHNpemVfdCBlcXVhbHNMb2Nh
dGlvbiA9IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJTdGFydCk7CisgICAgICAgIGlmIChlcXVh
bHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJNYWxmb3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hh
cmFjdGVyKSBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1
YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOworICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmlu
Zy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsg
MSkpOworCisgICAgICAgIGlmIChrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSA9PSAwKSB7Cisg
ICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDEzKTsKKyAgICAgICAgICAgIGZlYXR1cmVzLmV4
cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkucmZpbmQoImludGVybmFsOiIp
ID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7CisgICAgICAgICAgICBm
ZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChr
ZXlUeXBlKGtleSkpIHsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpCb29sOgorICAgICAgICAgICAg
ZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5
cGU6OkRvdWJsZToKKyAgICAgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7
IGtleSwgc3RkOjpzdG9kKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEtleVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVz
Lmluc2VydCh7IGtleSwgdmFsdWUgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJp
bmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxh
dGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdG
ZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFs
dWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5n
VmVjdG9yOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0
KHsga2V5LCBzcGxpdCh2YWx1ZSwgJywnKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEtleVR5cGU6OlVua25vd246CisgICAgICAgICAgICBMT0dfRVJST1IoIlVua25vd24g
a2V5LCAnJXMsIGluIHRlc3QgaGVhZGVyIGluICVzIiwga2V5LmNfc3RyKCksIHBhdGguY19zdHIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBhaXJTdGFydCA9
IHBhaXJFbmQgKyAxOworICAgIH0KKworICAgIHJldHVybiBmZWF0dXJlczsKK30KKworc3RhdGlj
IGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNo
YXIqIHN1YnN0cmluZykKK3sKKyAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Cisg
ICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4K
K30KKworc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
InZpZXdwb3J0LyIpICYmICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlzdWFsLXZpZXdwb3J0
LyIpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCkBAIC02MSwxMyArMzg5LDIwIEBAIHN0YXRpYyBib29sIHNo
b3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY28KICAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhP
clVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJ3M2NcXEluZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7CiB9CiAKLXN0YXRp
YyBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCkKK3N0YXRpYyBPcHRpb25hbDxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiBvdmVycmlk
ZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkK
K3sKKyAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0MtU1ZHLTEuMSIpIHx8
IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdcXFczQy1TVkctMS4xIikpCisgICAgICAgIHJl
dHVybiB7IHsgNDgwLCAzNjAgfSB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0
YXRpYyBPcHRpb25hbDxkb3VibGU+IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICIvaGlkcGktM3gtIikpCiAgICAgICAgIHJldHVybiAzOwogICAgIGlmIChwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLSIpKQogICAgICAgICByZXR1cm4gMjsKLSAgICByZXR1
cm4gMTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRE
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKQEAg
LTgzLDE0ICs0MTgsMTAxIEBAIHN0YXRpYyBib29sIHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0
ZEUKICAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3dl
YnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvd2Vi
c29ja2V0cyIpOwogfQogCi1UZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCkKLSAgICA6IHVzZUZsZXhpYmxlVmlld3BvcnQoc2hvdWxkTWFrZVZpZXdw
b3J0RmxleGlibGUocGF0aE9yVVJMKSkKLSAgICAsIHVzZUZpeGVkTGF5b3V0KHNob3VsZFVzZUZp
eGVkTGF5b3V0KHBhdGhPclVSTCkpCi0gICAgLCBpc1NWR1Rlc3QoaXNTVkdUZXN0UGF0aChwYXRo
T3JVUkwpKQotICAgICwgdXNlRXBoZW1lcmFsU2Vzc2lvbihzaG91bGRVc2VFcGhlbWVyYWxTZXNz
aW9uKHBhdGhPclVSTCkpCi0gICAgLCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoc2hvdWxkRHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyKHBhdGhPclVSTCkpCi0gICAgLCBkZXZpY2VTY2FsZUZhY3Rv
cihkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QocGF0aE9yVVJMKSkKK1Rlc3RGZWF0dXJlcyBoYXJk
Y29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFu
ZCkKK3sKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisKKyAgICBpZiAoc2hvdWxkTWFrZVZp
ZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQorICAgICAgICBmZWF0dXJlcy5ib29s
RmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0pOworICAgIGlm
IChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkKKyAgICAgICAg
ZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgdHJ1
ZSB9KTsKKyAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQucGF0
aE9yVVJMKSkKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOworICAgIGlmIChhdXRvIGRldmljZVNjYWxlRmFj
dG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwp
OyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQpCisgICAgICAgIGZlYXR1cmVzLmRv
dWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNjYWxlRmFj
dG9yLnZhbHVlKCkgfSk7CisgICAgaWYgKGF1dG8gdmlld1dpZHRoQW5kSGVpZ2h0ID0gb3ZlcnJp
ZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgdmlld1dpZHRo
QW5kSGVpZ2h0ICE9IFdURjo6bnVsbG9wdCkgeworICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0
dXJlcy5pbnNlcnQoeyAidmlld1dpZHRoIiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5maXJzdCB9KTsK
KyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdIZWlnaHQiLCB2
aWV3V2lkdGhBbmRIZWlnaHQtPnNlY29uZCB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmVhdHVy
ZXM7Cit9CisKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRl
c3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7CisgICAgcmV0dXJuIHBhcnNlVGVzdEhl
YWRlcihjb21tYW5kLmFic29sdXRlUGF0aCwgY29tbWFuZC5wYXRoT3JVUkwpOworfQorCitUZXN0
T3B0aW9uczo6VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZlYXR1cmVzKQorICAgIDogbV9mZWF0
dXJlcyB7IGZlYXR1cmVzIH0KK3sKKyNpZiBEVU1QX0ZFQVRVUkVTCisgICAgc3RkOjpjZXJyIDw8
ICJEVU1QSU5HIEZFQVRVUkVTXG4iOworICAgIGR1bXBGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyNl
bmRpZgorfQorCitib29sIFRlc3RPcHRpb25zOjpoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25z
KGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAoreworICAgIGlmIChtX2ZlYXR1cmVz
LmV4cGVyaW1lbnRhbEZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5leHBlcmltZW50YWxG
ZWF0dXJlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8gW2tleSwga2V5VHlw
ZV0gOiBrZXlUeXBlTWFwKCkpIHsKKyAgICAgICAgc3dpdGNoIChrZXlUeXBlKSB7CisgICAgICAg
IGNhc2UgS2V5VHlwZTo6Qm9vbDoKKyAgICAgICAgICAgIGlmIChib29sRmVhdHVyZVZhbHVlKGtl
eSkgIT0gb3B0aW9ucy5ib29sRmVhdHVyZVZhbHVlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6RG91
YmxlOgorICAgICAgICAgICAgaWYgKGRvdWJsZUZlYXR1cmVWYWx1ZShrZXkpICE9IG9wdGlvbnMu
ZG91YmxlRmVhdHVyZVZhbHVlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAg
ICBjYXNlIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoKKyAgICAgICAgY2FzZSBLZXlUeXBl
OjpTdHJpbmdVUkw6CisgICAgICAgICAgICBpZiAoc3RyaW5nRmVhdHVyZVZhbHVlKGtleSkgIT0g
b3B0aW9ucy5zdHJpbmdGZWF0dXJlVmFsdWUoa2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdW
ZWN0b3I6CisgICAgICAgICAgICBpZiAoc3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKGtleSkgIT0g
b3B0aW9ucy5zdHJpbmdWZWN0b3JGZWF0dXJlVmFsdWUoa2V5KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpV
bmtub3duOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIGZlYXR1
cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgVD4mIG1hcCwgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUPiYg
ZGVmYXVsdHNNYXApCit7CisgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7CisgICAgaWYgKGl0
ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgCisgICAgYXV0
byBkZWZhdWx0c01hcEl0ID0gZGVmYXVsdHNNYXAuZmluZChrZXkpOworICAgIEFTU0VSVChkZWZh
dWx0c01hcEl0ICE9IGRlZmF1bHRzTWFwLmVuZCgpKTsKKyAgICByZXR1cm4gZGVmYXVsdHNNYXBJ
dC0+c2Vjb25kOworfQorCitib29sIFRlc3RPcHRpb25zOjpib29sRmVhdHVyZVZhbHVlKHN0ZDo6
c3RyaW5nIGtleSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgbV9mZWF0
dXJlcy5ib29sRmVhdHVyZXMsIGJvb2xEZWZhdWx0c01hcCgpKTsKK30KK2RvdWJsZSBUZXN0T3B0
aW9uczo6ZG91YmxlRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgbV9mZWF0dXJlcy5kb3VibGVGZWF0dXJlcywgZG91Ymxl
RGVmYXVsdHNNYXAoKSk7Cit9CitzdGQ6OnN0cmluZyBUZXN0T3B0aW9uczo6c3RyaW5nRmVhdHVy
ZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmVhdHVyZVZhbHVl
KGtleSwgbV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcywgc3RyaW5nRGVmYXVsdHNNYXAoKSk7Cit9
CitzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gVGVzdE9wdGlvbnM6OnN0cmluZ1ZlY3RvckZlYXR1
cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXkpIGNvbnN0CiB7CisgICAgcmV0dXJuIGZlYXR1cmVWYWx1
ZShrZXksIG1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMsIHN0cmluZ1ZlY3RvckRlZmF1
bHRzTWFwKCkpOwogfQogCiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5o
CShyZXZpc2lvbiAyNjgyMzEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE2NSArMjUsMTQwIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1
bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0
cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAgc3RydWN0IENvbnRleHRPcHRpb25zIHsKLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7Ci0gICAgICAgIGJvb2wgaWdub3JlU3lu
Y2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24geyB0cnVlIH07Ci0gICAgICAgIGJvb2wgZW5hYmxlUHJv
Y2Vzc1N3YXBPbldpbmRvd09wZW4geyBmYWxzZSB9OwotICAgICAgICBib29sIHVzZVNlcnZpY2VX
b3JrZXJTaG9ydFRpbWVvdXQgeyBmYWxzZSB9OwotCi0gICAgICAgIGJvb2wgaGFzU2FtZUluaXRp
YWxpemF0aW9uT3B0aW9ucyhjb25zdCBDb250ZXh0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91
dHMgIT0gb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCi0gICAgICAg
ICAgICAgICAgfHwgb3ZlcnJpZGVMYW5ndWFnZXMgIT0gb3B0aW9ucy5vdmVycmlkZUxhbmd1YWdl
cwotICAgICAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uICE9IG9w
dGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24KLSAgICAgICAgICAgICAgICB8fCBl
bmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2Fw
T25XaW5kb3dPcGVuCi0gICAgICAgICAgICAgICAgfHwgdXNlU2VydmljZVdvcmtlclNob3J0VGlt
ZW91dCAhPSBvcHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIGJvb2wgdXNlVGhyZWFkZWRTY3JvbGxpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wg
dXNlQWNjZWxlcmF0ZWREcmF3aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIHVzZVJlbW90ZUxheWVy
VHJlZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBzaG91bGRTaG93V2ViVmlldyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCB1c2VGbGV4aWJsZVZpZXdwb3J0IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUZpeGVk
TGF5b3V0IHsgZmFsc2UgfTsKLSAgICBib29sIGlzU1ZHVGVzdCB7IGZhbHNlIH07Ci0gICAgYm9v
bCB1c2VEYXRhRGV0ZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIHVzZU1vY2tTY3JvbGxiYXJz
IHsgdHJ1ZSB9OwotICAgIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9Owot
ICAgIGJvb2wgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgeyBmYWxzZSB9OwotICAgIGJvb2wg
dXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5h
YmxlQXR0YWNobWVudEVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJv
b2wgZW5hYmxlS2V5Z2VuRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlUG9pbnRlckxvY2sgeyBmYWxz
ZSB9OwotICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb24geyB0cnVlIH07Ci0gICAgYm9v
bCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciB7IHRydWUgfTsKLSAg
ICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7IGZhbHNlIH07Ci0gICAgYm9vbCBzaG91
bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZG9tUGFzdGVBbGxvd2VkIHsgdHJ1
ZSB9OwotICAgIGJvb2wgZW5hYmxlQ29sb3JGaWx0ZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgcHVu
Y2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBydW5T
aW5nbHkgeyBmYWxzZSB9OwotICAgIGJvb2wgY2hlY2tGb3JXb3JsZExlYWtzIHsgZmFsc2UgfTsK
LSAgICBib29sIHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCB7IGZhbHNlIH07Ci0gICAgYm9vbCBz
aG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlU2Vy
dmljZUNvbnRyb2xzIHsgZmFsc2UgfTsKLSAgICBib29sIGVkaXRhYmxlIHsgZmFsc2UgfTsKLSAg
ICBib29sIHNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCB7IHRydWUgfTsKLSAgICBib29sIHNob3Vs
ZFByZXNlbnRQb3BvdmVycyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUFwcE5hcCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29s
IGFsbG93c0xpbmtQcmV2aWV3IHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVv
SW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQ
cm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNz
IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIHsgdHJ1ZSB9Owot
ICAgIGJvb2wgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSB7IGZhbHNlIH07Ci0gICAgYm9vbCBp
c0FwcEJvdW5kV2ViVmlldyB7IGZhbHNlIH07Ci0KLSAgICBkb3VibGUgY29udGVudEluc2V0VG9w
IHsgMCB9OwotCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgeyAxIH07Ci0gICAgc3RkOjpz
dHJpbmcgYXBwbGljYXRpb25NYW5pZmVzdDsKLSAgICBzdGQ6OnN0cmluZyBqc2NPcHRpb25zOwot
ICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6
c3RyaW5nIHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTDsKLSAgICBIYXNoTWFwPFN0cmluZywg
Ym9vbD4gZXhwZXJpbWVudGFsRmVhdHVyZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IGlu
dGVybmFsRGVidWdGZWF0dXJlczsKLSAgICBTdHJpbmcgY29udGVudE1vZGU7Ci0gICAgU3RyaW5n
IGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKLSAgICAKLSAgICBDb250ZXh0T3B0aW9ucyBj
b250ZXh0T3B0aW9uczsKLQotICAgIFRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRo
T3JVUkwpOwotCi0gICAgLy8gQWRkIGhlcmUgb3B0aW9ucyB0aGF0IGNhbiBvbmx5IGJlIHNldCB1
cG9uIFBsYXRmb3JtV2ViVmlldwotICAgIC8vIGluaXRpYWxpemF0aW9uIGFuZCBtYWtlIHN1cmUg
aXQncyB1cCB0byBkYXRlIHdoZW4gYWRkaW5nIG5ldwotICAgIC8vIG9wdGlvbnMgdG8gdGhpcyBz
dHJ1Y3QuIE90aGVyd2lzZSwgdGVzdHMgdXNpbmcgdGhvc2Ugb3B0aW9ucwotICAgIC8vIG1pZ2h0
IGZhaWwgaWYgV1RSIGlzIHJldXNpbmcgYW4gZXhpc3RpbmcgUGxhdGZvcm1XZWJWaWV3LgotICAg
IGJvb2wgaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0
aW9ucykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICh1c2VUaHJlYWRlZFNjcm9sbGluZyAhPSBv
cHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nCi0gICAgICAgICAgICB8fCB1c2VBY2NlbGVyYXRl
ZERyYXdpbmcgIT0gb3B0aW9ucy51c2VBY2NlbGVyYXRlZERyYXdpbmcKLSAgICAgICAgICAgIHx8
IHVzZU1vY2tTY3JvbGxiYXJzICE9IG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMKLSAgICAgICAg
ICAgIHx8IG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzICE9IG9wdGlvbnMubmVlZHNTaXRlU3BlY2lm
aWNRdWlya3MKLSAgICAgICAgICAgIHx8IHVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5
ICE9IG9wdGlvbnMudXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkKLSAgICAgICAgICAg
IHx8IGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVs
ZW1lbnQKLSAgICAgICAgICAgIHx8IGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyICE9IG9wdGlv
bnMuZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIKLSAgICAgICAgICAgIHx8IHVzZUVwaGVtZXJh
bFNlc3Npb24gIT0gb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uCi0gICAgICAgICAgICB8fCBl
bmFibGVNZW51SXRlbUVsZW1lbnQgIT0gb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQKLSAg
ICAgICAgICAgIHx8IGVuYWJsZUtleWdlbkVsZW1lbnQgIT0gb3B0aW9ucy5lbmFibGVLZXlnZW5F
bGVtZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzICE9IG9wdGlv
bnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scwotICAgICAgICAgICAgfHwgZW5hYmxlUG9pbnRl
ckxvY2sgIT0gb3B0aW9ucy5lbmFibGVQb2ludGVyTG9jawotICAgICAgICAgICAgfHwgZW5hYmxl
V2ViQXV0aGVudGljYXRpb24gIT0gb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbgotICAg
ICAgICAgICAgfHwgZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgIT0g
b3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcgotICAgICAg
ICAgICAgfHwgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zICE9IG9wdGlvbnMuZW5hYmxlSW5zcGVj
dG9yQWRkaXRpb25zCi0gICAgICAgICAgICB8fCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgIT0g
b3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIKLSAgICAgICAgICAgIHx8IGFwcGxpY2F0
aW9uTWFuaWZlc3QgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Ci0gICAgICAgICAgICB8
fCBhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyAhPSBvcHRp
b25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzCi0gICAg
ICAgICAgICB8fCBkb21QYXN0ZUFsbG93ZWQgIT0gb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQKLSAg
ICAgICAgICAgIHx8IGVuYWJsZUNvbG9yRmlsdGVyICE9IG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0
ZXIKLSAgICAgICAgICAgIHx8IHB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgIT0g
b3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlCi0gICAgICAgICAgICB8
fCBqc2NPcHRpb25zICE9IG9wdGlvbnMuanNjT3B0aW9ucwotICAgICAgICAgICAgfHwgYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXMgIT0gb3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlcwotICAgICAgICAgICAgfHwgcnVuU2luZ2x5ICE9IG9wdGlvbnMucnVuU2luZ2x5Ci0g
ICAgICAgICAgICB8fCBjaGVja0ZvcldvcmxkTGVha3MgIT0gb3B0aW9ucy5jaGVja0Zvcldvcmxk
TGVha3MKLSAgICAgICAgICAgIHx8IHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyAhPSBvcHRp
b25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cwotICAgICAgICAgICAgfHwgZW5hYmxlU2Vy
dmljZUNvbnRyb2xzICE9IG9wdGlvbnMuZW5hYmxlU2VydmljZUNvbnRyb2xzCi0gICAgICAgICAg
ICB8fCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgIT0gb3B0aW9ucy5zaG91bGRJZ25vcmVNZXRh
Vmlld3BvcnQKLSAgICAgICAgICAgIHx8IGVkaXRhYmxlICE9IG9wdGlvbnMuZWRpdGFibGUKLSAg
ICAgICAgICAgIHx8IHNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCAhPSBvcHRpb25zLnNob3VsZEhh
bmRsZVJ1bk9wZW5QYW5lbAotICAgICAgICAgICAgfHwgc2hvdWxkUHJlc2VudFBvcG92ZXJzICE9
IG9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92ZXJzCi0gICAgICAgICAgICB8fCBjb250ZW50SW5z
ZXRUb3AgIT0gb3B0aW9ucy5jb250ZW50SW5zZXRUb3AKLSAgICAgICAgICAgIHx8IGNvbnRlbnRN
b2RlICE9IG9wdGlvbnMuY29udGVudE1vZGUKLSAgICAgICAgICAgIHx8IGFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllciAhPSBvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcgotICAg
ICAgICAgICAgfHwgZW5hYmxlQXBwTmFwICE9IG9wdGlvbnMuZW5hYmxlQXBwTmFwCi0gICAgICAg
ICAgICB8fCBlbmFibGVCYWNrRm9yd2FyZENhY2hlICE9IG9wdGlvbnMuZW5hYmxlQmFja0Zvcndh
cmRDYWNoZQotICAgICAgICAgICAgfHwgYWxsb3dzTGlua1ByZXZpZXcgIT0gb3B0aW9ucy5hbGxv
d3NMaW5rUHJldmlldwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nl
c3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcwotICAgICAgICAgICAg
fHwgZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVy
ZVZpZGVvSW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBlbmFibGVDYXB0dXJlQXVkaW9JblVJ
UHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzCi0gICAgICAg
ICAgICB8fCBlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVD
YXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MKLSAgICAgICAgICAgIHx8IGFsbG93VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHMgIT0gb3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzCi0gICAg
ICAgICAgICB8fCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5ICE9IG9wdGlvbnMuZW5hYmxlSW5B
cHBCcm93c2VyUHJpdmFjeQotICAgICAgICAgICAgfHwgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMICE9IG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMCi0gICAgICAgICAgICB8
fCBpc0FwcEJvdW5kV2ViVmlldyAhPSBvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworc3RydWN0IFRlc3RDb21tYW5kOwogCi0gICAgICAgIGlmICgh
Y29udGV4dE9wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRl
eHRPcHRpb25zKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKK3N0cnVjdCBUZXN0RmVhdHVy
ZXMgeworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gZXhwZXJpbWVu
dGFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBp
bnRlcm5hbERlYnVnRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBib29sPiBib29sRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBkb3VibGU+IGRvdWJsZUZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgc3RkOjpzdHJpbmc+IHN0cmluZ0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PiBzdHJpbmdWZWN0b3JGZWF0
dXJlczsKK307CiAKLSAgICAgICAgaWYgKGV4cGVyaW1lbnRhbEZlYXR1cmVzICE9IG9wdGlvbnMu
ZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cit2b2lkIG1l
cmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOwogCi0gICAg
ICAgIGlmIChpbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CitUZXN0RmVhdHVyZXMgaGFyZGNvZGVk
RmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKK1Rlc3RGZWF0
dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmKTsKKworc3RydWN0IENvbnRleHRPcHRpb25zIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CisgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3Nh
Z2luZ1RpbWVvdXRzOworICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb247Cisg
ICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICBib29sIHVzZVNlcnZp
Y2VXb3JrZXJTaG9ydFRpbWVvdXQ7CiAKKyAgICBib29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9w
dGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyAhPSBvcHRpb25zLmlnbm9y
ZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMKKyAgICAgICAgICAgIHx8IG92ZXJyaWRlTGFu
Z3VhZ2VzICE9IG9wdGlvbnMub3ZlcnJpZGVMYW5ndWFnZXMKKyAgICAgICAgICAgIHx8IGVuYWJs
ZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24KKyAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuICE9
IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4KKyAgICAgICAgICAgIHx8IHVz
ZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQgIT0gb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hv
cnRUaW1lb3V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CisKKyAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICB9Cit9OworCitjbGFz
cyBUZXN0T3B0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgVGVzdE9wdGlvbnMoVGVzdEZl
YXR1cmVzKTsKKworICAgIENvbnRleHRPcHRpb25zIGNvbnRleHRPcHRpb25zKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBvdmVycmlkZUxhbmd1YWdlcygpLAor
ICAgICAgICAgICAgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cygpLAorICAgICAg
ICAgICAgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSwKKyAgICAgICAgICAgIGVuYWJs
ZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuKCksCisgICAgICAgICAgICB1c2VTZXJ2aWNlV29ya2Vy
U2hvcnRUaW1lb3V0KCkKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBib29sIHVzZVRocmVhZGVk
U2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlVGhyZWFkZWRT
Y3JvbGxpbmciKTsgfQorICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5nKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlQWNjZWxlcmF0ZWREcmF3aW5nIik7IH0KKyAgICBi
b29sIHVzZVJlbW90ZUxheWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
InVzZVJlbW90ZUxheWVyVHJlZSIpOyB9CisgICAgYm9vbCBzaG91bGRTaG93V2ViVmlldygpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFNob3dXZWJWaWV3Iik7IH0KKyAg
ICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJ1c2VGbGV4aWJsZVZpZXdwb3J0Iik7IH0KKyAgICBib29sIHVzZURhdGFEZXRlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VEYXRhRGV0ZWN0aW9uIik7IH0K
KyAgICBib29sIHVzZU1vY2tTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgidXNlTW9ja1Njcm9sbGJhcnMiKTsgfQorICAgIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJuZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyIpOyB9CisgICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIik7
IH0KKyAgICBib29sIHVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHki
KTsgfQorICAgIGJvb2wgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJlbmFibGVBdHRhY2htZW50RWxlbWVudCIpOyB9CisgICAgYm9vbCBl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIik7IH0KKyAgICBib29sIHVzZUVwaGVtZXJh
bFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VFcGhlbWVyYWxT
ZXNzaW9uIik7IH0KKyAgICBib29sIGVuYWJsZU1lbnVJdGVtRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZU1lbnVJdGVtRWxlbWVudCIpOyB9CisgICAgYm9v
bCBlbmFibGVLZXlnZW5FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
ZW5hYmxlS2V5Z2VuRWxlbWVudCIpOyB9CisgICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRy
b2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlTW9kZXJuTWVkaWFD
b250cm9scyIpOyB9CisgICAgYm9vbCBlbmFibGVQb2ludGVyTG9jaygpIGNvbnN0IHsgcmV0dXJu
IGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVBvaW50ZXJMb2NrIik7IH0KKyAgICBib29sIGVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5h
YmxlV2ViQXV0aGVudGljYXRpb24iKTsgfQorICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRp
b25Mb2NhbEF1dGhlbnRpY2F0b3IoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJl
bmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIpOyB9CisgICAgYm9vbCBl
bmFibGVJbnNwZWN0b3JBZGRpdGlvbnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNo
ZXMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93VG91Y2hlcyIp
OyB9CisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiKTsgfQorICAgIGJvb2wg
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9B
c2tGb3JDcmVkZW50aWFscyIpOyB9CisgICAgYm9vbCBkb21QYXN0ZUFsbG93ZWQoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJkb21QYXN0ZUFsbG93ZWQiKTsgfQorICAgIGJvb2wg
ZW5hYmxlQ29sb3JGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVDb2xvckZpbHRlciIpOyB9CisgICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRh
cmtNb2RlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgicHVuY2hPdXRXaGl0ZUJh
Y2tncm91bmRzSW5EYXJrTW9kZSIpOyB9CisgICAgYm9vbCBydW5TaW5nbHkoKSBjb25zdCB7IHJl
dHVybiBib29sRmVhdHVyZVZhbHVlKCJydW5TaW5nbHkiKTsgfQorICAgIGJvb2wgY2hlY2tGb3JX
b3JsZExlYWtzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiY2hlY2tGb3JXb3Js
ZExlYWtzIik7IH0KKyAgICBib29sIHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCgpIGNvbnN0IHsg
cmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIpOyB9Cisg
ICAgYm9vbCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJzcGVsbENoZWNraW5nRG90cyIpOyB9CisgICAgYm9vbCBlbmFibGVTZXJ2
aWNlQ29udHJvbHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVTZXJ2
aWNlQ29udHJvbHMiKTsgfQorICAgIGJvb2wgZWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJlZGl0YWJsZSIpOyB9CisgICAgYm9vbCBzaG91bGRIYW5kbGVSdW5PcGVu
UGFuZWwoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRIYW5kbGVSdW5P
cGVuUGFuZWwiKTsgfQorICAgIGJvb2wgc2hvdWxkUHJlc2VudFBvcG92ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkUHJlc2VudFBvcG92ZXJzIik7IH0KKyAgICBi
b29sIGVuYWJsZUFwcE5hcCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJs
ZUFwcE5hcCIpOyB9CisgICAgYm9vbCBlbmFibGVCYWNrRm9yd2FyZENhY2hlKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIpOyB9CisgICAg
Ym9vbCBhbGxvd3NMaW5rUHJldmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
ImFsbG93c0xpbmtQcmV2aWV3Iik7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZVZp
ZGVvSW5VSVByb2Nlc3MiKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9j
ZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZVZpZGVv
SW5HUFVQcm9jZXNzIik7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5V
SVByb2Nlc3MiKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQ
cm9jZXNzIik7IH0KKyAgICBib29sIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
Iik7IH0KKyAgICBib29sIGVuYWJsZUluQXBwQnJvd3NlclByaXZhY3koKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5Iik7IH0KKyAgICBi
b29sIGlzQXBwQm91bmRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
aXNBcHBCb3VuZFdlYlZpZXciKTsgfQorICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdp
bmdUaW1lb3V0cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlnbm9yZVN5bmNo
cm9ub3VzTWVzc2FnaW5nVGltZW91dHMiKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbiIpOyB9CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2lu
ZG93T3BlbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVByb2Nlc3NT
d2FwT25XaW5kb3dPcGVuIik7IH0KKyAgICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVv
dXQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VTZXJ2aWNlV29ya2VyU2hv
cnRUaW1lb3V0Iik7IH0KKyAgICBkb3VibGUgY29udGVudEluc2V0VG9wKCkgY29uc3QgeyByZXR1
cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJjb250ZW50SW5zZXQudG9wIik7IH0KKyAgICBkb3VibGUg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoImRl
dmljZVNjYWxlRmFjdG9yIik7IH0KKyAgICBkb3VibGUgdmlld1dpZHRoKCkgY29uc3QgeyByZXR1
cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJ2aWV3V2lkdGgiKTsgfQorICAgIGRvdWJsZSB2aWV3SGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJ2aWV3SGVpZ2h0Iik7IH0K
KyAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0KCkgY29uc3QgeyByZXR1cm4gc3Ry
aW5nRmVhdHVyZVZhbHVlKCJhcHBsaWNhdGlvbk1hbmlmZXN0Iik7IH0KKyAgICBzdGQ6OnN0cmlu
ZyBqc2NPcHRpb25zKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJqc2NPcHRp
b25zIik7IH0KKyAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygp
IGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMiKTsgfQorICAgIHN0ZDo6c3RyaW5nIHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TCgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgic3RhbmRhbG9uZVdlYkFwcGxp
Y2F0aW9uVVJMIik7IH0KKyAgICBzdGQ6OnN0cmluZyBjb250ZW50TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiY29udGVudE1vZGUiKTsgfQorICAgIHN0ZDo6c3RyaW5n
IGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1
cmVWYWx1ZSgiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIik7IH0KKyAgICBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXMoKSBjb25zdCB7IHJldHVybiBzdHJpbmdW
ZWN0b3JGZWF0dXJlVmFsdWUoImxhbmd1YWdlIik7IH0KKworICAgIGNvbnN0IHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGV4cGVyaW1lbnRhbEZlYXR1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGludGVybmFsRGVidWdGZWF0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOyB9CisK
KyAgICBib29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMm
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIGJvb2xGZWF0dXJlVmFsdWUoc3RkOjpzdHJp
bmcga2V5KSBjb25zdDsKKyAgICBkb3VibGUgZG91YmxlRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5n
IGtleSkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nRmVhdHVyZVZhbHVlKHN0ZDo6c3Ry
aW5nIGtleSkgY29uc3Q7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHN0cmluZ1ZlY3Rv
ckZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXkpIGNvbnN0OworCisgICAgVGVzdEZlYXR1cmVz
IG1fZmVhdHVyZXM7CiB9OwogCiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1Rlc3RDb250cm9sbGVyQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCShyZXZpc2lvbiAyNjgyMzEpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTExNCwyNCArMTE0LDMwIEBAIFdLUHJlZmVyZW5jZXNSZWYgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3IKICAgICByZXR1cm4gKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpZ2xv
YmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXM7CiB9CiAKLXZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0
CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3Zl
cnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKKyAgICBU
ZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisKICAgICBpZiAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
Il0pCi0gICAgICAgIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24gPSB0cnVlOworICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsg
ImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgdHJ1ZSB9KTsKICAgICBpZiAoW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkVuYWJsZVByb2Nl
c3NTd2FwT25XaW5kb3dPcGVuIl0pCi0gICAgICAgIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5h
YmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gPSB0cnVlOworICAgICAgICBmZWF0dXJlcy5ib29s
RmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuIiwgdHJ1ZSB9
KTsKKworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRl
c3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Np
b24gfHwgb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkgfHwgb3B0
aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KSB7Ci0gICAgICAgIGF1dG8gd2Vic2l0ZURh
dGFTdG9yZUNvbmZpZyA9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA/IFtbW19XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0Tm9uUGVyc2lzdGVudENvbmZpZ3Vy
YXRpb25dIGF1dG9yZWxlYXNlXSA6IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIGlmICghb3B0aW9ucy51c2VFcGhl
bWVyYWxTZXNzaW9uKQorICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiA9IG9wdGlvbnMudXNl
RXBoZW1lcmFsU2Vzc2lvbigpOworICAgIGF1dG8gc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJM
ID0gb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwoKTsKKyAgICBpZiAodXNlRXBo
ZW1lcmFsU2Vzc2lvbiB8fCBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkgfHwg
b3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkpIHsKKyAgICAgICAgYXV0byB3ZWJz
aXRlRGF0YVN0b3JlQ29uZmlnID0gdXNlRXBoZW1lcmFsU2Vzc2lvbiA/IFtbW19XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0Tm9uUGVyc2lzdGVudENvbmZpZ3VyYXRp
b25dIGF1dG9yZWxlYXNlXSA6IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmICghdXNlRXBoZW1lcmFsU2Vzc2lv
bikKICAgICAgICAgICAgIGNvbmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVUZW1wb3JhcnlEaXJlY3Rv
cmllcygoV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblJlZil3ZWJzaXRlRGF0YVN0b3Jl
Q29uZmlnKTsKLSAgICAgICAgaWYgKG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJM
Lmxlbmd0aCgpKQotICAgICAgICAgICAgW3dlYnNpdGVEYXRhU3RvcmVDb25maWcgc2V0U3RhbmRh
bG9uZUFwcGxpY2F0aW9uVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdX
aXRoVVRGOFN0cmluZzpvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5jX3N0cigp
XV1dOworICAgICAgICBpZiAoc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKQor
ICAgICAgICAgICAgW3dlYnNpdGVEYXRhU3RvcmVDb25maWcgc2V0U3RhbmRhbG9uZUFwcGxpY2F0
aW9uVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
ZzpzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1dXTsKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5
KQorICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkpCiAgICAg
ICAgICAgICBbd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyBzZXRFbmFibGVJbkFwcEJyb3dzZXJQcml2
YWN5Rm9yVGVzdGluZzpZRVNdOwogI2VuZGlmCiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9
IChfX2JyaWRnZSBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFs
bG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWddIGF1dG9y
ZWxlYXNlXTsKQEAgLTE0NCwzMiArMTUwLDMzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtQ3JlYXRlV2ViVmkKICAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtn
bG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmIChvcHRpb25zLnVzZURhdGFEZXRlY3Rpb24pCisgICAgaWYgKG9wdGlvbnMu
dXNlRGF0YURldGVjdGlvbigpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXREYXRh
RGV0ZWN0b3JUeXBlczpXS0RhdGFEZXRlY3RvclR5cGVBbGxdOwotICAgIGlmIChvcHRpb25zLmln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKQorICAgIGlmIChvcHRpb25zLmlnbm9yZXNWaWV3cG9y
dFNjYWxlTGltaXRzKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldElnbm9yZXNW
aWV3cG9ydFNjYWxlTGltaXRzOllFU107Ci0gICAgaWYgKG9wdGlvbnMudXNlQ2hhcmFjdGVyU2Vs
ZWN0aW9uR3JhbnVsYXJpdHkpCisgICAgaWYgKG9wdGlvbnMudXNlQ2hhcmFjdGVyU2VsZWN0aW9u
R3JhbnVsYXJpdHkoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0U2VsZWN0aW9u
R3JhbnVsYXJpdHk6V0tTZWxlY3Rpb25HcmFudWxhcml0eUNoYXJhY3Rlcl07Ci0gICAgaWYgKG9w
dGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgaWYgKG9wdGlvbnMuaXNBcHBCb3VuZFdlYlZp
ZXcoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0TGltaXRzTmF2aWdhdGlvbnNU
b0FwcEJvdW5kRG9tYWluczpZRVNdOwogI2Vsc2UKLSAgICBbY29waWVkQ29uZmlndXJhdGlvbiBf
c2V0U2VydmljZUNvbnRyb2xzRW5hYmxlZDpvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9sc107
CisgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldFNlcnZpY2VDb250cm9sc0VuYWJsZWQ6b3B0
aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHMoKV07CiAjZW5kaWYKIAotICAgIGlmIChvcHRpb25z
LmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KQorICAgIGlmIChvcHRpb25zLmVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50KCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50
RWxlbWVudEVuYWJsZWQ6WUVTXTsKIAotICAgIGlmIChvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVy
KQorICAgIGlmIChvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKCkpCiAgICAgICAgIFtjb3BpZWRD
b25maWd1cmF0aW9uIF9zZXRDb2xvckZpbHRlckVuYWJsZWQ6WUVTXTsKIAogICAgIFtjb3BpZWRD
b25maWd1cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKXdl
YnNpdGVEYXRhU3RvcmUoKV07CiAKLSAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0QWxsb3dU
b3BOYXZpZ2F0aW9uVG9EYXRhVVJMczpvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVS
THNdOworICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0Rh
dGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpXTsKIAogICAgIGNv
bmZpZ3VyZUNvbnRlbnRNb2RlKGNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMpOwog
Ci0gICAgaWYgKG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdC5sZW5ndGgoKSkgewotICAgICAg
ICBhdXRvIG1hbmlmZXN0UGF0aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpvcHRp
b25zLmFwcGxpY2F0aW9uTWFuaWZlc3QuY19zdHIoKV07CisgICAgYXV0byBhcHBsaWNhdGlvbk1h
bmlmZXN0ID0gb3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0KCk7CisgICAgaWYgKGFwcGxpY2F0
aW9uTWFuaWZlc3QubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byBtYW5pZmVzdFBhdGggPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YXBwbGljYXRpb25NYW5pZmVzdC5jX3N0cigpXTsK
ICAgICAgICAgTlNTdHJpbmcgKnRleHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZG
aWxlOm1hbmlmZXN0UGF0aCB1c2VkRW5jb2Rpbmc6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKICAg
ICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFwcGxpY2F0aW9uTWFuaWZlc3Q6W19XS0Fw
cGxpY2F0aW9uTWFuaWZlc3QgYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOnRleHQgbWFuaWZl
c3RVUkw6bmlsIGRvY3VtZW50VVJMOm5pbF1dOwogICAgIH0KQEAgLTE3NywxMyArMTg0LDEzIEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmkKICAgICBtX21haW5XZWJW
aWV3ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVdlYlZpZXc+KGNvcGllZENvbmZpZ3VyYXRpb24uZ2V0
KCksIG9wdGlvbnMpOwogICAgIGZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KG1fbWFpbldl
YlZpZXcuZ2V0KCksIG9wdGlvbnMpOwogCi0gICAgaWYgKG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJh
Y2tncm91bmRzSW5EYXJrTW9kZSkKKyAgICBpZiAob3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dy
b3VuZHNJbkRhcmtNb2RlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNldERyYXdzQmFja2dy
b3VuZChmYWxzZSk7CiAKLSAgICBpZiAob3B0aW9ucy5lZGl0YWJsZSkKKyAgICBpZiAob3B0aW9u
cy5lZGl0YWJsZSgpKQogICAgICAgICBtX21haW5XZWJWaWV3LT5zZXRFZGl0YWJsZSh0cnVlKTsK
IAotICAgIG1fbWFpbldlYlZpZXctPnBsYXRmb3JtVmlldygpLmFsbG93c0xpbmtQcmV2aWV3ID0g
b3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldzsKKyAgICBtX21haW5XZWJWaWV3LT5wbGF0Zm9ybVZp
ZXcoKS5hbGxvd3NMaW5rUHJldmlldyA9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcoKTsKICAg
ICBbbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkgX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJ
bW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzpZRVNdOwogfQogCkBAIC0yMDIsNyAr
MjA5LDcgQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcgogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6ZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXcoUGxhdGZvcm1XZWJW
aWV3KiB2aWV3LCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKICNpZiBQTEFURk9STShN
QUMpCi0gICAgaWYgKG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcpCisgICAgaWYgKG9wdGlvbnMu
c2hvdWxkU2hvd1dlYlZpZXcoKSkKICAgICAgICAgW3ZpZXctPnBsYXRmb3JtV2luZG93KCkgb3Jk
ZXJGcm9udDpuaWxdOwogICAgIGVsc2UKICAgICAgICAgW3ZpZXctPnBsYXRmb3JtV2luZG93KCkg
b3JkZXJCYWNrOm5pbF07CkBAIC0yNjIsMTIgKzI2OSwxMiBAQCB2b2lkIFRlc3RDb250cm9sbGVy
OjpyZXNldENvbnRlbnRFeHRlbnNpCiAgICAgfQogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpz
ZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlm
aWVyKQordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
KGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQogewotICAgIGlmIChidW5kbGVJ
ZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoYnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgW1Rlc3RSdW5uZXJXS1dlYlZpZXcgX3NldEFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKilidW5kbGVJZGVudGlmaWVyLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCldOworICAgIFtUZXN0UnVubmVyV0tXZWJWaWV3IF9zZXRBcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdG9XVEZTdHJpbmcoYnVuZGxlSWRlbnRp
ZmllcikuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyVGVzdGluZ092ZXJyaWRlKCkKQEAgLTI4
NSw3ICsyOTIsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvCiAg
ICAgICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKnBsYXRmb3JtVmlldyA9IHdlYlZpZXctPnBsYXRm
b3JtVmlldygpOwogICAgICAgICBwbGF0Zm9ybVZpZXcuX3ZpZXdTY2FsZSA9IDE7CiAgICAgICAg
IHBsYXRmb3JtVmlldy5fbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoID0gMDsKLSAgICAgICAg
W3BsYXRmb3JtVmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGlu
ZzpvcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90c107CisgICAgICAgIFtwbGF0Zm9y
bVZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6b3B0aW9u
cy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMoKV07CiAgICAgICAgIFtwbGF0Zm9ybVZpZXcg
cmVzZXRJbnRlcmFjdGlvbkNhbGxiYWNrc107CiAgICAgICAgIFtwbGF0Zm9ybVZpZXcgX3Jlc2V0
TmF2aWdhdGlvbkdlc3R1cmVTdGF0ZUZvclRlc3RpbmddOwogICAgIH0KQEAgLTQ4NiwxMiArNDkz
LDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OmlzRG9pbmdNZWRpYUNhcHR1cmUKIAogc3RhdGlj
IFdLQ29udGVudE1vZGUgY29udGVudE1vZGUoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgaWYgKG9wdGlvbnMuY29udGVudE1vZGUgPT0gImRlc2t0b3AiX3MpCisgICAgYXV0byBt
b2RlID0gb3B0aW9ucy5jb250ZW50TW9kZSgpOworICAgIGlmIChtb2RlID09ICJkZXNrdG9wIikK
ICAgICAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVEZXNrdG9wOwotCi0gICAgaWYgKG9wdGlvbnMu
Y29udGVudE1vZGUgPT0gIm1vYmlsZSJfcykKKyAgICBpZiAobW9kZSA9PSAibW9iaWxlIikKICAg
ICAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVNb2JpbGU7Ci0KICAgICByZXR1cm4gV0tDb250ZW50
TW9kZVJlY29tbWVuZGVkOwogfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9U
ZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyNjgyMzEpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MCw5ICsxNTAsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFBy
ZWZlcgogICAgIG1fbWFpbldlYlZpZXctPmRpc21pc3NBbGxQb3B1cE1lbnVzKCk7CiB9CiAKLXZv
aWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRl
c3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RG
ZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0Zv
clRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMuZW5hYmxlTW9k
ZXJuTWVkaWFDb250cm9scyA9IGZhbHNlOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAg
ICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJv
bHMiLCBmYWxzZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvUGxhdGZvcm1XZWJWaWV3SU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1BsYXRmb3JtV2Vi
Vmlld0lPUy5tbQkocmV2aXNpb24gMjY4MjMxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvUGxhdGZvcm1XZWJWaWV3SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcg
QEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tXZWJWaQogICAgIDogbV93aW5k
b3dJc0tleSh0cnVlKQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiB7Ci0gICAgQ0dSZWN0IHJl
Y3QgPSBDR1JlY3RNYWtlKDAsIDAsIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RDb250
cm9sbGVyOjp2aWV3SGVpZ2h0KTsKKyAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwg
b3B0aW9ucy52aWV3V2lkdGgoKSwgb3B0aW9ucy52aWV3SGVpZ2h0KCkpOwogCiAgICAgbV93aW5k
b3cgPSBbW1dlYktpdFRlc3RSdW5uZXJXaW5kb3cgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdF07
CiAgICAgbV93aW5kb3cuYmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgbGlnaHRHcmF5Q29sb3Jd
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJ
T1MubW0JKHJldmlzaW9uIDI2ODIzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rl
c3RDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9v
bCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVAogICAgIH0KIAogICAgIG1fcHJl
c2VudFBvcG92ZXJTd2l6emxlcnMuY2xlYXIoKTsKLSAgICBpZiAoIW9wdGlvbnMuc2hvdWxkUHJl
c2VudFBvcG92ZXJzKSB7CisgICAgaWYgKCFvcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycygp
KSB7CiAjaWYgVVNFKFVJQ09OVEVYVE1FTlUpCiAgICAgICAgIG1fcHJlc2VudFBvcG92ZXJTd2l6
emxlcnMuYXBwZW5kKG1ha2VVbmlxdWU8SW5zdGFuY2VNZXRob2RTd2l6emxlcj4oW1VJQ29udGV4
dE1lbnVJbnRlcmFjdGlvbiBjbGFzc10sIEBzZWxlY3RvcihfcHJlc2VudE1lbnVBdExvY2F0aW9u
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVByZXNlbnRNZW51T3JQb3BvdmVyT3JW
aWV3Q29udHJvbGxlcikpKTsKICNlbmRpZgpAQCAtMjEzLDggKzIxMywxMCBAQCBib29sIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgICAgIFVJU2Nyb2xsVmlldyAqc2Ny
b2xsVmlldyA9IHdlYlZpZXcuc2Nyb2xsVmlldzsKICAgICAgICAgW3Njcm9sbFZpZXcgX3JlbW92
ZUFsbEFuaW1hdGlvbnM6WUVTXTsKICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Wm9vbVNjYWxlOjEg
YW5pbWF0ZWQ6Tk9dOwotICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IFVJRWRnZUlu
c2V0c01ha2Uob3B0aW9ucy5jb250ZW50SW5zZXRUb3AsIDAsIDAsIDApOwotICAgICAgICBzY3Jv
bGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgwLCAtb3B0aW9ucy5jb250ZW50SW5z
ZXRUb3ApOworICAgICAgICAKKyAgICAgICAgYXV0byBjb250ZW50SW5zZXRUb3AgPSBvcHRpb25z
LmNvbnRlbnRJbnNldFRvcCgpOworICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IFVJ
RWRnZUluc2V0c01ha2UoY29udGVudEluc2V0VG9wLCAwLCAwLCAwKTsKKyAgICAgICAgc2Nyb2xs
Vmlldy5jb250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2UoMCwgLWNvbnRlbnRJbnNldFRvcCk7CiAK
ICAgICAgICAgaWYgKHdlYlZpZXcuaW50ZXJhY3RpbmdXaXRoRm9ybUNvbnRyb2wpCiAgICAgICAg
ICAgICBzaG91bGRSZXN0b3JlRmlyc3RSZXNwb25kZXIgPSBbd2ViVmlldyByZXNpZ25GaXJzdFJl
c3BvbmRlcl07CkBAIC0yNjMsMTIgKzI2NSwxNCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybVJlc2V0U3RhdGVUCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJl
Vmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7CisgICAgW1tHZW5lcmF0
ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSBz
ZXRTaG91bGRTaG93VG91Y2hlczp0ZXN0Lm9wdGlvbnMoKS5zaG91bGRTaG93VG91Y2hlcygpXTsK
KwogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBtYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKTsKIAotICAgIGlmICh0ZXN0Lm9wdGlvbnMoKS5zaG91bGRJZ25vcmVNZXRhVmll
d3BvcnQpCisgICAgaWYgKHRlc3Qub3B0aW9ucygpLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCgp
KQogICAgICAgICB3ZWJWaWV3LmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMuX3Nob3VsZElnbm9y
ZU1ldGFWaWV3cG9ydCA9IFlFUzsKIAotICAgIGlmICghdGVzdC5vcHRpb25zKCkudXNlRmxleGli
bGVWaWV3cG9ydCkKKyAgICBpZiAoIXRlc3Qub3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0IHNjcmVlbkJvdW5kcyA9IFtVSVNjcmVl
biBtYWluU2NyZWVuXS5ib3VuZHM7CkBAIC0yODksMTAgKzI5Myw5IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmkKICAgICAvLyBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0
aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKGZhbHNlKS4KIH0KIAotdm9pZCBUZXN0Q29udHJvbGxl
cjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYg
b3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlcyA9IHNob3Vs
ZFNob3dUb3VjaGVzKCk7Ci0gICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVk
R2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSBzZXRTaG91bGRTaG93VG91Y2hlczpvcHRpb25z
LnNob3VsZFNob3dUb3VjaGVzXTsKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0JKHJldmlzaW9uIDI2ODIz
MSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDE4IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZv
cm1XZWJWaWV3KFdLV2ViVmkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogewogICAgIC8vIEZJ
WE1FOiBOb3Qgc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIGZvciB0aGlzOyBtYXliZSB3ZSBz
aG91bGQgaGF2ZSBBUEkgdG8gc2V0IHRoaXMgc28gd2UgY2FuIGRvIGl0IGZyb20gVGVzdENvbnRy
b2xsZXI/Ci0gICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUpCisgICAgaWYgKG1f
b3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUoKSkKICAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJXZWJLaXQyVXNlUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAogICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwotICAgIFdLUHJlZmVyZW5jZXNTZXRU
aHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGll
ZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxp
bmcpOworICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJp
ZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBt
X29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcoKSk7CiAKLSAgICBOU1JlY3QgcmVjdCA9IE5T
TWFrZVJlY3QoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6
OnZpZXdIZWlnaHQpOworICAgIE5TUmVjdCByZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBvcHRpb25z
LnZpZXdXaWR0aCgpLCBvcHRpb25zLnZpZXdIZWlnaHQoKSk7CiAgICAgbV92aWV3ID0gW1tUZXN0
UnVubmVyV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJlY3QgY29uZmlndXJhdGlvbjpj
b3BpZWRDb25maWd1cmF0aW9uLmdldCgpXTsKICAgICBbbV92aWV3IF9zZXRXaW5kb3dPY2NsdXNp
b25EZXRlY3Rpb25FbmFibGVkOk5PXTsKIAogICAgIE5TU2NyZWVuICpmaXJzdFNjcmVlbiA9IFtb
TlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXTsKLSAgICBOU1JlY3Qgd2luZG93UmVj
dCA9IG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA/IE5TT2Zmc2V0UmVjdChyZWN0LCAxMDAs
IDEwMCkgOiBOU09mZnNldFJlY3QocmVjdCwgLTEwMDAwLCBbZmlyc3RTY3JlZW4gZnJhbWVdLnNp
emUuaGVpZ2h0IC0gcmVjdC5zaXplLmhlaWdodCArIDEwMDAwKTsKKyAgICBOU1JlY3Qgd2luZG93
UmVjdCA9IG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldygpID8gTlNPZmZzZXRSZWN0KHJlY3Qs
IDEwMCwgMTAwKSA6IE5TT2Zmc2V0UmVjdChyZWN0LCAtMTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFt
ZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOwogICAgIG1fd2luZG93
ID0gW1tXZWJLaXRUZXN0UnVubmVyV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ondp
bmRvd1JlY3Qgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOihO
U0JhY2tpbmdTdG9yZVR5cGUpX05TQmFja2luZ1N0b3JlVW5idWZmZXJlZCBkZWZlcjpZRVNdOwog
ICAgIG1fd2luZG93LnBsYXRmb3JtV2ViVmlldyA9IHRoaXM7CiAgICAgW21fd2luZG93IHNldENv
bG9yU3BhY2U6W2ZpcnN0U2NyZWVuIGNvbG9yU3BhY2VdXTsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAyNjgyMzEp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTcyLDExICsxNzIsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1SZXNldFN0YXRlVAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRlc3RDb250cm9s
bGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25z
JiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRl
c3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nID0g
dHJ1ZTsKLSAgICBvcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSA9IHNob3VsZFVzZVJlbW90ZUxh
eWVyVHJlZSgpOwotICAgIG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSBzaG91bGRTaG93V2Vi
VmlldygpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVh
dHVyZXMuaW5zZXJ0KHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgdHJ1ZSB9KTsKKyAgICByZXR1
cm4gZmVhdHVyZXM7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRF
eHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCShyZXZp
c2lvbiAyNjgyMzEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZp
ZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUgogICAgICAgICBTV1BfTk9NT1ZFIHwgU1dQX05P
Wk9SREVSIHwgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9DT1BZQklUUyk7CiAKICAgICBVSU5UIGZs
YWdzID0gU1dQX05PWk9SREVSIHwgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9DT1BZQklUUzsKLSAg
ICBpZiAobV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KQorICAgIGlmIChtX29wdGlvbnMuc2hv
dWxkU2hvd1dlYlZpZXcoKSkKICAgICAgICAgZmxhZ3MgfD0gU1dQX05PTU9WRTsKICAgICA6OlNl
dFdpbmRvd1BvcygKICAgICAgICAgbV93aW5kb3csCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAyNjgyMzEpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNyw5ICsyMjcsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bVJlc2V0UHJlZmVyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJv
bGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9u
cyYsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9U
ZXN0Q29udHJvbGxlcldQRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCShyZXZpc2lvbiAyNjgyMzEpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiw5ICsxMzYsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFBy
ZWZlcgogewogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmlj
VGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmlu
ZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNG
ZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBv
cHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBmYWxzZTsKKyAgICBUZXN0RmVhdHVy
ZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVN
b2Rlcm5NZWRpYUNvbnRyb2xzIiwgZmFsc2UgfSk7CisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2ltYWdl
LW9yaWVudGF0aW9uLW5vbmUtY2FudmFzLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2Utb3JpZW50YXRpb24tbm9uZS1jYW52YXMtZXhwZWN0
ZWQuaHRtbAkocmV2aXNpb24gMjY4MjMxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1h
Z2Utb3JpZW50YXRpb24tbm9uZS1jYW52YXMtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMTcsNiArMTcsMTAgQEAKICAgICAgICAgaGVpZ2h0OiA1MHB4OwogICAgIH0KIDwvc3R5bGU+
Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICBpbnRlcm5hbHMu
c2V0dGluZ3Muc2V0Q2FudmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZyhmYWxzZSk7Cis8L3Njcmlw
dD4KIDxib2R5PgogICAgIDxiPkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5kcmF3SW1hZ2UoKSBz
aG91bGQgaWdub3JlIHRoZSBpbWFnZSdzIEVYSUYgb3JpZW50YXRpb24gaWYgaXRzIHN0eWxlIGlt
YWdlLW9yaWVudGF0aW9uIGlzIHNldCB0byAibm9uZSIuPC9iPgogICAgIDxicj4KQEAgLTc4LDYg
KzgyLDkgQEAKICAgICAgICAgPGJyPlVuZGVmaW5lZCAoaW52YWxpZCB2YWx1ZSkKICAgICA8L2Rp
dj4KICAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAg
ICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKGZh
bHNlKTsKKwogICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAgICAgICAgICB3aW5k
b3cudGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
aW1hZ2VzL2ltYWdlLW9yaWVudGF0aW9uLW5vbmUtY2FudmFzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2Utb3JpZW50YXRpb24tbm9uZS1jYW52YXMuaHRt
bAkocmV2aXNpb24gMjY4MjMxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2Utb3Jp
ZW50YXRpb24tbm9uZS1jYW52YXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsMTAg
QEAKICAgICAgICAgaGVpZ2h0OiA1MHB4OwogICAgIH0KIDwvc3R5bGU+Cis8c2NyaXB0PgorICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0Q2Fu
dmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZyhmYWxzZSk7Cis8L3NjcmlwdD4KIDxib2R5PgogICAg
IDxiPkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5kcmF3SW1hZ2UoKSBzaG91bGQgaWdub3JlIHRo
ZSBpbWFnZSdzIEVYSUYgb3JpZW50YXRpb24gaWYgaXRzIHN0eWxlIGltYWdlLW9yaWVudGF0aW9u
IGlzIHNldCB0byAibm9uZSIuPC9iPgogICAgIDxicj4K
</data>

          </attachment>
      

    </bug>

</bugzilla>