<?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>163181</bug_id>
          
          <creation_ts>2016-10-09 07:35:22 -0700</creation_ts>
          <short_desc>Refactor binding generated casted-this checks for attribute setters</short_desc>
          <delta_ts>2016-10-10 01:16:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1238077</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-09 07:35:22 -0700</bug_when>
    <thetext>We should align setters and getters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238080</commentid>
    <comment_count>1</comment_count>
      <attachid>291045</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-09 07:39:53 -0700</bug_when>
    <thetext>Created attachment 291045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238120</commentid>
    <comment_count>2</comment_count>
      <attachid>291045</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-09 15:34:19 -0700</bug_when>
    <thetext>Comment on attachment 291045
Patch

As long as everything gets inlined enough that it still generates efficient code, this looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238214</commentid>
    <comment_count>3</comment_count>
      <attachid>291045</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 00:36:24 -0700</bug_when>
    <thetext>Comment on attachment 291045
Patch

Rejecting attachment 291045 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 291045, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
offset -119 lines).
Hunk #69 succeeded at 4626 (offset -119 lines).
2 out of 69 hunks FAILED -- saving rejects to file Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp.rej
patching file Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp
patching file Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Darin Adler&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.webkit.org/results/2254123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238216</commentid>
    <comment_count>4</comment_count>
      <attachid>291071</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-10 00:40:18 -0700</bug_when>
    <thetext>Created attachment 291071
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238224</commentid>
    <comment_count>5</comment_count>
      <attachid>291071</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 01:16:30 -0700</bug_when>
    <thetext>Comment on attachment 291071
Patch for landing

Clearing flags on attachment: 291071

Committed r206989: &lt;http://trac.webkit.org/changeset/206989&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238225</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 01:16:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291045</attachid>
            <date>2016-10-09 07:39:53 -0700</date>
            <delta_ts>2016-10-10 00:40:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163181-20161009163632.patch</filename>
            <type>text/plain</type>
            <size>134534</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRiN2Q1NWQ4YjYyN2Qw
NTdhNWEwMzNmYWEzYWY3Njk4MmI4MTMyNi4uYTYyY2FiMmM4OWQ2MjZiMDA5ZmM5NGE5YmMwODlh
YTlkZDVjNGJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMxIEBACiAyMDE2LTEwLTA5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZWZhY3RvciBiaW5kaW5n
IGdlbmVyYXRlZCBjYXN0ZWQtdGhpcyBjaGVja3MgZm9yIGF0dHJpYnV0ZSBzZXR0ZXJzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxODEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2Ugb2Yg
YmVoYXZpb3IuCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMgYW5kIGJpbmRpbmcg
ZXhwZWN0YXRpb25zLgorCisgICAgICAgIEFkZGluZyBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgc2V0
dGVyIGluIEJpbmRpbmdDYWxsZXIuCisgICAgICAgIFVwZGF0aW5nIGJpbmRpbmcgZ2VuZXJhdG9y
IHRvIG1ha2UgdXNlIG9mIGl0LgorICAgICAgICBGdXR1cmUgcmVmYWN0b3Jpbmcgc2hvdWxkIHVz
ZSBtb3JlIHJlZmVyZW5jZSBhbmQgcmVuYW1lIGNhc3RlZFRoaXMgdG8gdGhpc09iamVjdCwgbGlr
ZSBmb3IgZ2V0dGVycy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgor
ICAgICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6c2V0QXR0cmlidXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
SW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorCisyMDE2LTEwLTA5
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwogICAgICAgICBQcm9taXNlIGF0
dHJpYnV0ZSBnZXR0ZXJzIHNob3VsZCByZWplY3QgcHJvbWlzZXMgaW4gY2FzZSBvZiBjYXN0ZWQt
dGhpcyBlcnJvcnMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzE2NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCmlu
ZGV4IGExMmYxZGU1YjBkYTJhZGVjOGJmMTJmNzQ5NDJiOThjNTRjM2RjYzcuLjM3NmI5YTNmNDdl
NDVkNzliZDliYjk0MmExOGQyMWZiNTRjZTc4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oCkBAIC0zMzUsOCArMzM1LDIzIEBAIGVudW0gY2xhc3MgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UgfTsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KIHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKKyAg
ICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUqLCBK
U0NsYXNzKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKICAgICB1c2luZyBBdHRy
aWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xh
c3MqLCBKU0M6OlRocm93U2NvcGUmKTsKIAorICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1
bmN0aW9uIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBKU0NsYXNzOjpjYXN0Rm9yQXR0cmlidXRlKHN0YXRlLCB0aGlzVmFsdWUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICBBU1NFUlQoSlND
bGFzczo6aW5mbygpKTsKKyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDog
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0
aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5k
IHRoaXNPYmplY3QuCisgICAgICAgIHJldHVybiBzZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIEpT
Qzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRocm93U2NvcGUpOworICAgIH0KKwog
ICAgIHRlbXBsYXRlPEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+
CiAgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgYXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA3ODFhMWI1OTg3YjcyYzk0N2ViNjA0ODI0YjRiOGVj
OTE5ZGZiZmI4Li44MDAxM2U0NWYyZDU0MWM2ZGM4NTZjZjg3ZDEzZWNiZjQyYTE4M2IyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQpAQCAtMzIyMSwyNiArMzIyMSwyOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgbXkgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3It
PkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7YXR0cmlidXRlQ29uZGl0aW9uYWxTdHJp
bmd9XG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmc7CiAKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiYm9vbCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAgICAg
IGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMpIHsKLSAgICAgICAgICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHJveHlUb0pTT2JqZWN0fSkgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIGNh
c3RlZFRoaXMgPSB0byR7Y2xhc3NOYW1lfShKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMgPSAiIC4gR2V0Q2FzdGlu
Z0hlbHBlckZvclRoaXNPYmplY3QoJGludGVyZmFjZSkgLiAiKEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTtcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7Ci0gICAgICAg
ICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
TGVuaWVudFRoaXN9KSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgXCIkdmlzaWJsZUludGVyZmFjZU5h
bWVcIiwgXCIkbmFtZVwiKTtcbiIpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBteSAkc2V0dGVyRnVuY3Rpb24gPSAiJHtwdXRGdW5jdGlvbk5hbWV9RnVuY3Rpb24iOworICAg
ICAgICAgICAgICAgIG15ICR0ZW1wbGF0ZVBhcmFtZXRlcnMgPSAkc2V0dGVyRnVuY3Rpb247Cisg
ICAgICAgICAgICAgICAgJHRlbXBsYXRlUGFyYW1ldGVycyAuPSAiLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6UmV0dXJuRWFybHkiIGlmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57TGVuaWVudFRoaXN9OworCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJzdGF0aWMgaW5saW5lIGJvb2wgJHtzZXR0ZXJGdW5jdGlvbn0oRXhlY1N0YXRlKiwg
JHtjbGFzc05hbWV9KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpO1xuXG4iKTsKKworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPCR7Y2xhc3NOYW1lfT46OnNldEF0dHJpYnV0ZTwke3RlbXBsYXRlUGFyYW1ldGVyc30+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgXCIkbmFtZVwiKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBib29sICR7c2V0dGVyRnVuY3Rpb259
KEV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtwdXRG
dW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKCRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9ICYmICEkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eX0g
JiYgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9Ob3RDaGVj
a1NlY3VyaXR5T25TZXR0ZXJ9KSB7CiAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1l
IGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KHN0YXRlLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggMWFhN2ViZTE3NGQyYTE2NjI1NjUyZTcy
N2M0MmQ2ZDk5MDUzNGI5My4uNmMzOGRjYWNhYjFiMTM4NGM0OGVlOGYxYTA1NmYxYjcwMDhhZTk3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTI3NiwxNiArMjc2LDE3IEBAIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlCiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0
YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9i
amVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAicmVndWxhckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0R2xv
YmFsT2JqZWN0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3Qq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAicmVndWxhckF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTI5NCwxNiArMjk1LDE3IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVi
bGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0
cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RHbG9iYWxPYmpl
Y3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAi
VGVzdEdsb2JhbE9iamVjdCIsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtMzEzLDE2ICszMTUsMTcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1YKIAogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CisKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlv
bmFsQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHVibGljQW5kUHJpdmF0ZUNv
bmRpdGlvbmFsQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwotICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMzMywx
NiArMzM2LDE3IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNv
bmRpdGlvbmFsQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShURVNUX0ZFQVRVUkUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2Jh
bE9iamVjdCosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdEds
b2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGU0YmVkYjUw
NGE5OTE1ZTIzZDlkYjM2ZDNhN2Q2NzVmYmI1OTRiNmIuLmYxYjgxMGJhNmIwMjY1Zjk1ZTlhNmMy
MjBlYmY0MjliN2U4NjUwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCkBAIC02NzgsMTIgKzY3
OCw5IEBAIGJvb2wgSlNUZXN0SW50ZXJmYWNlOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsCiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFRlc3RJbnRl
cmZhY2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAg
LTY5MywxNiArNjkwLDE3IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBs
ZW1lbnRzU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzU3RyMiIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAg
IEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJm
YWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIyIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNzEzLDE2ICs3MTEsMTcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CisKIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50
ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImltcGxlbWVudHNTdHIzIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
M0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcywg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7Ci0gICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjMi
KTsKICAgICBjYXN0ZWRUaGlzLT5zZXRJbXBsZW1lbnRzU3RyMygqc3RhdGUsIHZhbHVlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTczMCwxNiArNzI5LDE3IEBAIGJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNO
b2RlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOworCiBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
Tm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRz
Tm9kZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3Rl
ZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVu
dHNOb2RlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gSlNOb2RlOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJ
S0VMWSghbmF0aXZlVmFsdWUpKSB7CkBAIC03NTMsMTIgKzc1Myw5IEBAIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQotYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRh
bFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpA
QCAtNzY4LDE2ICs3NjUsMTcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1
cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2QKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdEludGVyZmFjZSosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBz
ZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEludGVyZmFjZT46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjIiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJG
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwotICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbFN0cjIi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC03ODgsMTYgKzc4NiwxNyBAQCBib29sIHNldEpT
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxTdHIzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAic3VwcGxlbWVudGFsU3RyMyIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0SW50ZXJmYWNlKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RJbnRl
cmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMyIpOwogICAgIGNhc3RlZFRoaXMtPnNldFN1cHBsZW1l
bnRhbFN0cjMoKnN0YXRlLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04MDUsMTYg
KzgwNCwxNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0SW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3VwcGxlbWVudGFsTm9kZSIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUZ1bmN0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0g
ICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRl
cmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVl
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKaW5kZXggMTgx
ZjlmMzE2NjBiZTExZjEwMjg2MWRjNzdjZGY5ZDA4MjFkNTgyZC4uNWRjMGFhN2I2OGJhM2I1NGZk
MTRjZGRhZjM5Zjc4M2NmYmM4ZThiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IuY3BwCkBAIC0xODksMTYgKzE4OSwxNyBAQCBib29sIHNldEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dAogICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRy
aWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0QXR0cmlidXRlUldD
dXN0b20iKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvcio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIiwgInRl
c3RBdHRyaWJ1dGVSV0N1c3RvbSIpOwogICAgIGNhc3RlZFRoaXMtPnNldFRlc3RBdHRyaWJ1dGVS
V0N1c3RvbSgqc3RhdGUsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApp
bmRleCBhYTY3YThiOThhOWE5MGYzYzIwOGVhNWUxZDE4NDI2YTdmODY2YjJjLi5lMzU0MTRkNDI4
MDdiNjUyMjM5MTM2NjkwZTQ5MWIzNGRiZGMzMzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCkBAIC0yMTIsMTYg
KzIxMiwxNyBAQCBib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZQogICAgIHJldHVybiBkb21PYmplY3Qt
PnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgdmFsdWUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBi
b29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vZGU+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0Tm9kZU5hbWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
bmFtZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVGdW5jdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAg
ICBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0Tm9kZSIsICJuYW1lIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vbmRldGVybWluaXN0aWMuY3BwCmluZGV4IDI2YWM1OGU5ZDA3Yjk5ODQ5OGViNGM1NDI5NDdi
YmFkOTg4MDgxZGQuLjY0MzcyOTg4YjYyODMxMjQ4MDI5MDIxMzZjMWZlYjE4ZDkyZmEzNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKQEAgLTM1NiwxNiArMzU2LDE3IEBA
IGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWCiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0
KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
YyogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAg
ICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNzQsMTYgKzM3NSwxNyBAQCBib29sIHNldEpTVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbgogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpT
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNFeGNlcHRpb25BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTIsMTYgKzM5NCwxNyBAQCBib29sIHNl
dEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbgogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OworCiBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVy
RXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9u
QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJub25kZXRlcm1p
bmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRy
RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVk
VGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1
cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE5vbmRldGVy
bWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC00MTAsMTYgKzQxMywxNyBAQCBib29sIHNldEpTVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUq
IHN0YQogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNl
dEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3ROb25kZXRlcm1pbmlzdGljPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJub25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcywgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7Ci0gICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAi
bm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4
IGUwYmY4MTY5MjdkNjBmMjQ2ZjhmZmYyODYwM2ZkZjIwZjcyNWNiYjUuLjA3M2M4MjhlMDc1ODU1
YTU5MGQ0MTJiZTRkOWE2NzEyOWUxNzQ3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0zMjc2LDEyICszMjc2
LDkgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWQKICAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXRE
aXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZh
bHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwogICAgIFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwpAQCAtMzI4OSwzMSArMzI4NiwzMyBAQCBib29sIHNldEpTVGVzdE9iakNvbnN0cnVj
dG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAog
fQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIlRlc3RTdWJPYmpFbmFibGVkQnlT
ZXR0aW5nIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAg
cmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiksIHZhbHVlKTsKIH0K
IAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
akVudW1BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImVudW1B
dHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0g
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
LSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RPYmplY3QiLCAiZW51bUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlw
ZT4oKnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zMzI0LDE2ICszMzIzLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWCiB9
CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpT
VGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpCeXRlQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJieXRl
QXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHJGdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgImJ5dGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ4X3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtMzM0MiwxNiArMzM0MiwxNyBAQCBib29sIHNldEpTVGVzdE9i
akJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVgogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJG
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisK
IGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpPY3RldEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAib2N0ZXRBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpPY3RldEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm9jdGV0QXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8dWludDhfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzYwLDE2ICszMzYxLDE3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaG9ydEF0dHIiKTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic2hvcnRBdHRy
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMz
NzgsMTYgKzMzODAsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlMKIH0KIAogCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RP
YmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpDbGFtcGVkU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImNsYW1wZWRTaG9ydEF0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakNsYW1wZWRTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNsYW1wZWRTaG9ydEF0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMzOTYsMTYgKzMz
OTksMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KIH0KIAogCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1
cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0
ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC0zNDE0LDE2ICszNDE4LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5m
b3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OworCiBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46
OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50MTZfdD4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNDMyLDE2ICszNDM3LDE3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OworCiBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJsb25nQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImxvbmdBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM0NTAsMTYgKzM0NTYsMTcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1YKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxvbmdMb25nQXR0ciIpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJsb25nTG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDY0X3Q+KCpzdGF0ZSwgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtMzQ2OCwxNiArMzQ3NSwxNyBAQCBib29sIHNldEpTVGVzdE9iakxvbmdM
b25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZQogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25n
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlv
bj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzQ4NiwxNiArMzQ5NCwx
NyBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZQogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0ciIpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
c3RyaW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM1MDQsMTYgKzM1MTMsMTcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEoKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqVXN2c3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVzdnN0cmluZ0F0dHIiKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5jdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJU
ZXN0T2JqZWN0IiwgInVzdnN0cmluZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0
YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC0zNTIyLDE2ICszNTMyLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kCiB9CiAKIAor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVz
dE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpUZXN0T2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0
ZXN0T2JqQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9i
akF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3RPYmpBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CkBA
IC0zNTQzLDE2ICszNTU0LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkCiB9CiAKIAorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0
SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IG51bGxwdHI7CiAgICAgaWYg
KCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC0zNTY3LDE2ICszNTc5LDE3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakxlbmllbnRUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpT
VmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakxlbmllbnRUZXN0
T2JqQXR0ckZ1bmN0aW9uLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxlbmllbnRUZXN0T2JqQXR0ciIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CkBAIC0zNTg4LDE2ICszNjAxLDE3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RP
YmplY3QiLCAic3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzYwNiwxNiArMzYy
MCwxNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKUwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9v
bCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAidXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0zNjI0LDE2ICszNjM5LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51
bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CisKIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRhdGlvbkVu
dW1BdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRh
dGlvbkVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJpbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gcGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+KCpzdGF0ZSwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY0NCwxNiArMzY2MCwx
NyBAQCBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpYTUxPYmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiWE1MT2JqQXR0ciIpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
WE1MT2JqQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewpAQCAtMzY2NSwxNiArMzY4MiwxNyBAQCBib29s
IHNldEpTVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSgogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDcmVhdGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiY3JlYXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNyZWF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9v
bGVhbihzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC0zNjgzLDE2ICszNzAxLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsCiB9CiAKIAor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
c3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
MzcwMSwxNiArMzcyMCwxNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogfQogCiAKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVVNWU3RyaW5nQXR0ciIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAicmVmbGVjdGVkVVNWU3RyaW5nQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
VG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTM3MTksMTYgKzM3MzksMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWwKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50
ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRy
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEludGVn
cmFsQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
SW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzczNywx
NiArMzc1OCwxNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogfQogCiAKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJG
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVW5zaWdu
ZWRJbnRlZ3JhbEF0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
LSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRV
bnNpZ25lZEludGVncmFsQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtMzc1NSwxNiArMzc3NywxNyBAQCBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xl
YW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRCb29sZWFuQXR0
ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVh
bkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInJlZmxlY3RlZEJvb2xlYW5BdHRyIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9Cb29sZWFuKHN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTM3NzMsMTYgKzM3OTYsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJGdW5jdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgInJlZmxlY3RlZFVSTEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNzkxLDE2
ICszODE1LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuCiB9CiAKIAorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJyZWZsZWN0ZWRVU1ZVUkxBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZs
ZWN0ZWRVU1ZVUkxBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzgwOSwx
NiArMzgzNCwxNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogfQogCiAKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicmVm
bGVjdGVkU3RyaW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM4MjcsMTYgKzM4
NTMsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKIH0KIAogCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0
ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
SW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
Mzg0NSwxNiArMzg3MiwxNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVn
cmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogfQogCiAKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tQm9v
bGVhbkF0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRDdXN0b21Cb29s
ZWFuQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbihzdGF0ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODYzLDE2ICszODkxLDE3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJyZWZsZWN0ZWRDdXN0b21VUkxBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZs
ZWN0ZWRDdXN0b21VUkxBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzg4MiwxNiAr
MzkxMSwxNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogCiAKICNpZiBFTkFCTEUoVEVTVF9G
RUFUVVJFKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
LSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJlbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzkwMSwxNiArMzkz
MSwxNyBAQCBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogCiAjZW5kaWYKIAorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialR5cGVk
QXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUeXBl
ZEFycmF5QXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0eXBl
ZEFycmF5QXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRB
cnJheUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9G
bG9hdDMyQXJyYXkodmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzkyMywxNiArMzk1NCwxNyBAQCBib29sIHNldEpTVGVzdE9ialR5cGVkQXJy
YXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jbwog
fQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVy
RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhH
ZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
YXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3Qi
LCAiYXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJf
dD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTQxLDE2ICszOTczLDE3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0
dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmli
dXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoR2V0dGVyTGVn
YWN5RXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJhdHRyaWJ1
dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5NTksMTYgKzM5OTIsMTcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1YKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0
aE1lc3NhZ2UiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtMzk3NywxNiArNDAxMSwxNyBAQCBib29sIHNldEpTVGVzdE9i
akF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVgogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVX
aXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJp
YnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiYXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbiIpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAiYXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTk1LDE2ICs0MDMwLDE3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJMZWdhY3lFeGNlcHRpb25GdW5jdGlvbihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0
T2JqQXR0cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlv
bkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRo
U2V0dGVyTGVnYWN5RXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1
cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJhdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKQEAgLTQwMTUsMTYgKzQwNTEsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1YKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25XaXRoTWVzc2FnZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2Ui
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uV2l0aE1lc3NhZ2VGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uV2l0aE1lc3NhZ2UiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKQEAg
LTQwMzUsMTYgKzQwNzIsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKIH0KIAogCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25G
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisK
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhz
dGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00
MDUzLDE2ICs0MDkxLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKIH0KIAogCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CkBAIC00MDczLDYxICs0MTEyLDY1IEBAIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqQ3VzdG9tQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImN1c3RvbUF0dHIiKTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImN1c3RvbUF0
dHIiKTsKICAgICBjYXN0ZWRUaGlzLT5zZXRDdXN0b21BdHRyKCpzdGF0ZSwgdmFsdWUpOwogICAg
IHJldHVybiB0cnVlOwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZv
b0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqT25mb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAib25mb28iKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9uZm9vRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
LSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJvbmZvbyIpOwogICAgIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZSgq
c3RhdGUsICpjYXN0ZWRUaGlzLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5m
b29FdmVudCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZv
byhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqT253ZWJraXRmb29G
dW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib253ZWJraXRmb28iKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAg
ICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE9iamVjdCIsICJvbndlYmtpdGZvbyIpOwogICAgIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZSgq
c3RhdGUsICpjYXN0ZWRUaGlzLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5m
b29FdmVudCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0
ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00MTM2LDE2ICs0MTc5LDE3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNl
dEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJD
YWxsV2l0aEF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRy
aWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0
cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTQxNTQsMTYgKzQxOTgsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKIH0KIAogCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQxNzgsMTYgKzQyMjMsMTcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlMKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQxOTksMTYgKzQyNDUsMTcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQyMjMsMTYgKzQyNzAsMTcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmMKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYg
KFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQyNDcsMTYgKzQyOTUsMTcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3QKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwog
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rl
c3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkp
IHsKQEAgLTQyNzEsMTYgKzQzMjAsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGEKIH0KIAog
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rl
c3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkp
IHsKQEAgLTQyOTUsMTYgKzQzNDUsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGUKIH0KIAog
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5k
Q2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxs
U3RhY2tBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdp
dGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVy
biB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
IndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rl
c3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkp
IHsKQEAgLTQzMTcsMTYgKzQzNjgsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJn
dW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY28KIAogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjEpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgImNvbmRpdGlvbmFsQXR0cjEiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDMzNywxNiArNDM4OSwxNyBAQCBib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5B
QkxFKENvbmRpdGlvbjIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9i
aj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIiKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgImNvbmRpdGlvbmFsQXR0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDM1NywxNiArNDQxMCwxNyBAQCBib29sIHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
M0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjMiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgImNvbmRpdGlvbmFsQXR0cjMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDM3NywxNiArNDQzMSwxNyBAQCBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNCIpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9y
RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25hbEF0dHI0Iik7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVj
dChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNvbmRpdGlvbmFs
QXR0cjQiKSwgdmFsdWUpOwogfQpAQCAtNDM5NCwxNiArNDQ0OSwxNyBAQCBib29sIHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NUNvbnN0cnVjdG9yRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhy
b3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNUNvbnN0cnVjdG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
ImNvbmRpdGlvbmFsQXR0cjUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9u
YWxBdHRyNSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiBjYXN0ZWRUaGlzLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoc3RhdGUsICJjb25kaXRpb25hbEF0dHI1IiksIHZhbHVlKTsKIH0KQEAgLTQ0MTEs
MzIgKzQ0NjcsMzQgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICNlbmRpZgogCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JG
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0T2JqZWN0IiwgImNvbmRpdGlvbmFsQXR0cjYiKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gY2FzdGVkVGhpcy0+cHV0RGlyZWN0
KHN0YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY29uZGl0aW9uYWxB
dHRyNiIpLCB2YWx1ZSk7CiB9CiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImFueUF0dHJpYnV0ZSIpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJhbnlBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZTsKICAgICBpbXBsLnNldEFueUF0dHJp
YnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC00NDQ0LDE2ICs0NTAyLDE3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
ak11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
bXV0YWJsZVBvaW50Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+KiBuYXRpdmVWYWx1ZSA9IG51bGxwdHI7
CiAgICAgaWYgKCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC00NDY4LDE2ICs0NTI3
LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlCiB9CiAKIAorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBv
aW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpJbW11dGFibGVQ
b2ludEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbW11dGFibGVQ
b2ludCIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9p
bnRGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0T2JqZWN0IiwgImltbXV0YWJsZVBvaW50Iik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+
KiBuYXRpdmVWYWx1ZSA9IG51bGxwdHI7CiAgICAgaWYgKCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CkBAIC00NDkyLDE2ICs0NTUyLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxl
UG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvCiB9
CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnlGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0
SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqU3RyYXdiZXJyeUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJzdHJhd2JlcnJ5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJh
d2JlcnJ5RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJzdHJhd2JlcnJ5Iik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ1MTAsMTYgKzQ1NzEsMTcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEoKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqSWRGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CisKIGJvb2wgc2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9iaklkRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
ImlkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RP
YmplY3QiLCAiaWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtNDUyOCwzMSArNDU5MCwzMyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZQogfQog
CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwog
Ym9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
LSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIHByb3BlcnR5LgogICAgIHJldHVybiBjYXN0ZWRUaGlzLT5wdXREaXJlY3Qo
c3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJyZXBsYWNlYWJsZUF0
dHJpYnV0ZSIpLCB2YWx1ZSk7CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iak51bGxhYmxl
TG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVB
dHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ1
NjEsMTYgKzQ2MjUsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogfQogCiAKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBi
b29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFi
bGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0
dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3Qi
LCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ1NzksMTYgKzQ2NDQsMTcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpO
dWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVu
Y3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm51bGxhYmxlVVNWU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm51
bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NTk3LDE2ICs0NjYzLDE3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iak51bGxhYmxlU3RyaW5nVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdW
YWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmlu
ZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVT
dHJpbmdWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxs
YWJsZVN0cmluZ1ZhbHVlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpO
dWxsYWJsZVN0cmluZ1ZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJudWxsYWJsZVN0cmluZ1ZhbHVl
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ2
MTUsMTYgKzQ2ODIsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKIH0KIAogCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJv
b2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1U
eXBlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdp
dGhSZXNlcnZlZEVudW1UeXBlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiYXR0cmli
dXRlV2l0aFJlc2VydmVkRW51bVR5cGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25h
bD4oKnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC00NjM1LDE2ICs0NzAzLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKIH0K
IAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVG
dW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisK
IGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKICAgICBSZWY8VGVzdE5v
ZGU+IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRy
aWJ1dGUoKTsKICAgICBhdXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtNDY1NCwxNiArNDcy
MywxNyBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZQogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVz
dE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJp
YnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNO
dWxsYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0
dHJpYnV0ZSIpOwogICAgIFJlZlB0cjxUZXN0Tm9kZT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKS5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCk7CiAgICAgaWYgKCFm
b3J3YXJkZWRJbXBsKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00Njc1LDE2ICs0NzQ1LDE3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialN0cmluZ2lm
aWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpT
dHJpbmdpZmllckF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInN0cmluZ2lm
aWVyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCBh
ZTE4ZjhkYTk2MGVmZDA5NTczMzI2MDhlYjlhNTY0YTY4NmNlMGMyLi4xNzJlZTE4NDFkZDQ5NDhi
OTJkYTZmNjZlN2FlMzE0NTU4MTdlM2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjQ3LDE2ICsyNDcsMTcgQEAg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKICAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qo
c3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsK
IH0KIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJ2YWx1ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInZhbHVlIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI2NSwxNiArMjY2LDE3
IEBAIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDYWNoZWRWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJj
YWNoZWRWYWx1ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZhbHVlIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAw
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCmluZGV4IDgxMTE0OGY0NWJkYTM2YWI1NDlmODRjYzU3MjI2YWNkZjhhMWJmMWUu
LjBiNjJmYmRmYTZhOGI5NGU1NGU3OGU0NDYzZGQxNjgwNjFkYzgzNTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcApAQCAtMzUzLDE2ICszNTMsMTcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0NvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KICAg
ICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Rlc3RUeXBlZGVmcyosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0
dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7Ci0gICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0VHlwZWRlZnMiLCAidW5zaWduZWRMb25nTG9uZ0F0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTM3MSwxNiArMzcyLDE3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiB9CiAKIAorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CisKIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtMzg5LDE2ICszOTEsMTcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlMKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlw
ZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
LSAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlw
ZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00MDcsMTYg
KzQxMCwxNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogfQogCiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wg
c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1
cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdFR5cGVkZWZz
IiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKQEAgLTQyNywxNiArNDMxLDE3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiB9CiAKIAor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2Fz
dGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NDUsMTYg
KzQ1MCwxNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogfQogCiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisK
IGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxl
cjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwotICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291071</attachid>
            <date>2016-10-10 00:40:18 -0700</date>
            <delta_ts>2016-10-10 01:16:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-163181-20161010093654.patch</filename>
            <type>text/plain</type>
            <size>131843</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM1MDFlZTQzY2M0OGEx
ZTcxY2M1N2VlM2NlZDlhMjI4MTFiMTk0Ni4uMzBlYjg1MWIzYzU4NTZkMzEwOGQ0ZDUwMWVkOTc5
ZWNiNmJjNzA2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE2LTEwLTEwICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBiaW5kaW5n
IGdlbmVyYXRlZCBjYXN0ZWQtdGhpcyBjaGVja3MgZm9yIGF0dHJpYnV0ZSBzZXR0ZXJzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMxODEKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVo
YXZpb3IuCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMgYW5kIGJpbmRpbmcgZXhw
ZWN0YXRpb25zLgorCisgICAgICAgIEFkZGluZyBzdXBwb3J0IGZvciBhdHRyaWJ1dGUgc2V0dGVy
IGluIEJpbmRpbmdDYWxsZXIuCisgICAgICAgIFVwZGF0aW5nIGJpbmRpbmcgZ2VuZXJhdG9yIHRv
IG1ha2UgdXNlIG9mIGl0LgorICAgICAgICBGdXR1cmUgcmVmYWN0b3Jpbmcgc2hvdWxkIHVzZSBt
b3JlIHJlZmVyZW5jZSBhbmQgcmVuYW1lIGNhc3RlZFRoaXMgdG8gdGhpc09iamVjdCwgbGlrZSBm
b3IgZ2V0dGVycy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6QmluZGluZ0NhbGxlcjo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorCiAyMDE2LTEwLTA5ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGVuY3J5cHRlZCBt
ZWRpYSBmcm9tIGxlZ2FjeSB0byBuZXcgRE9NIGV4Y2VwdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgKaW5kZXggZWIyN2UyYzRlZmRjZjBhZjQ1MzJlOGY2MDMx
NmMwNTI1ZGE0ODQ5MC4uNWEyY2VlNTBjZDZmZmFjM2Q1NTY2Y2I1ZTM4MDBkNGNlNDE0NWE5OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKQEAgLTMzMyw4ICsz
MzMsMjMgQEAgZW51bSBjbGFzcyBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1
cm5FYXJseSwgUmVqZWN0UHJvbWlzZSB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgog
c3RydWN0IEJpbmRpbmdDYWxsZXIgeworICAgIHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9u
ID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhy
b3dTY29wZSYpOwogICAgIHVzaW5nIEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1Zh
bHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIEpTQzo6VGhyb3dTY29wZSYpOwogCisgICAg
dGVtcGxhdGU8QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAg
ICBzdGF0aWMgYm9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUp
OworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52
bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IEpTQ2xhc3M6OmNhc3RGb3JBdHRyaWJ1
dGUoc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAgICAgcmV0
dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNs
YXNzTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVz
ZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJuIHNl
dHRlcihzdGF0ZSwgdGhpc09iamVjdCwgSlNDOjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgdGhyb3dTY29wZSk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVu
Y3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KICAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDk1YWQy
Njk1MDg1ODc2NTBiNDFkZDdhMTRlNzU1NzBmMTc4NmMxZGIuLmJiYjY2YWQ4ZjcxZGExNTYyNGQ0
ZDY0ZWUzNmRjNzI4NTA2ZTZlYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0zMjAxLDI2ICszMjAxLDI4IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAkYXR0cmlidXRlQ29uZGl0aW9u
YWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0
cmlidXRlLT5zaWduYXR1cmUpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYg
JHthdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRhdHRyaWJ1dGVDb25kaXRpb25h
bFN0cmluZzsKIAotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7cHV0RnVu
Y3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpO1xuIikgaWYgISRhdHRyaWJ1
dGUtPmlzU3RhdGljOwogICAgICAgICAgICAgaWYgKCEkYXR0cmlidXRlLT5pc1N0YXRpYykgewot
ICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0
b21Qcm94eVRvSlNPYmplY3R9KSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcyA9IHRvJHtjbGFzc05hbWV9KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSog
Y2FzdGVkVGhpcyA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJmYWNl
KSAuICIoSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntMZW5pZW50VGhpc30pIHsKLSAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCBcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG15ICRzZXR0ZXJGdW5jdGlvbiA9ICIke3B1dEZ1
bmN0aW9uTmFtZX1GdW5jdGlvbiI7CisgICAgICAgICAgICAgICAgbXkgJHRlbXBsYXRlUGFyYW1l
dGVycyA9ICRzZXR0ZXJGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICAkdGVtcGxhdGVQYXJhbWV0
ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZXR1cm5FYXJseSIgaWYgJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntMZW5pZW50VGhpc307CisKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUgYm9vbCAke3Nl
dHRlckZ1bmN0aW9ufShFeGVjU3RhdGUqLCAke2NsYXNzTmFtZX0qLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7XG5cbiIpOworCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29s
ICR7cHV0RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8JHtjbGFzc05hbWV9Pjo6c2V0QXR0cmli
dXRlPCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCBcIiRuYW1lXCIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
XG5cbiIpOworCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5s
aW5lIGJvb2wgJHtzZXR0ZXJGdW5jdGlvbn0oRXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFzc05hbWV9
KiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpO1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiYm9vbCAke3B1dEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSlcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwogICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q2hlY2tTZWN1cml0eX0gJiYgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5fSAmJiAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHlPblNldHRlcn0pIHsKICAgICAgICAg
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSwg
VGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRl
eCAxYWE3ZWJlMTc0ZDJhMTY2MjU2NTJlNzI3YzQyZDZkOTkwNTM0YjkzLi42YzM4ZGNhY2FiMWIx
Mzg0YzQ4ZWU4ZjFhMDU2ZjFiNzAwOGFlOTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNw
cApAQCAtMjc2LDE2ICsyNzYsMTcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUKICAgICByZXR1
cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIHZhbHVlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUZ1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWd1bGFyQXR0cmlidXRlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRl
RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlz
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEdsb2JhbE9iamVjdCIsICJyZWd1
bGFyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjk0LDE2ICsyOTUsMTcg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdEdsb2JhbE9iamVjdD46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJs
aWNBbmRQcml2YXRlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwotICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInB1YmxpY0FuZFBy
aXZhdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMTMsMTYgKzMxNSwx
NyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9i
amVjdCosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25k
aXRpb25hbEF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9i
amVjdCogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RHbG9i
YWxPYmplY3QiLCAicHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtMzMzLDE2ICszMzYsMTcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYp
OworCiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEdsb2JhbE9i
amVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhp
cywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAiZW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZS5jcHAKaW5kZXggZTRiZWRiNTA0YTk5MTVlMjNkOWRiMzZkM2E3ZDY3NWZiYjU5NGI2
Yi4uZjFiODEwYmE2YjAyNjVmOTVlOWE2YzIyMGViZjQyOWI3ZTg2NTA0MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZS5jcHAKQEAgLTY3OCwxMiArNjc4LDkgQEAgYm9vbCBKU1Rlc3RJbnRlcmZhY2U6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwK
IH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNT
dGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50c1N0YXRpY0F0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtNjkzLDE2ICs2OTAsMTcgQEAgYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWQKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImltcGxl
bWVudHNTdHIyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1w
bGVtZW50c1N0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC03MTMsMTYgKzcxMSwxNyBA
QCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyM0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFj
ZSosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiaW1wbGVtZW50c1N0cjMiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdElu
dGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMyIpOwogICAgIGNhc3RlZFRoaXMtPnNldEltcGxlbWVu
dHNTdHIzKCpzdGF0ZSwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNzMwLDE2ICs3
MjksMTcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RJ
bnRlcmZhY2UqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImltcGxlbWVudHNOb2RlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0SW50
ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
LSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05vZGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU05vZGU6OnRvV3Jh
cHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTc1Mywx
MiArNzUzLDkgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1ib29sIHNldEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RhdGljQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC03NjgsMTYgKzc2NSwxNyBAQCBib29sIHNldEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxTdHIyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0SW50ZXJmYWNlPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAic3VwcGxlbWVudGFsU3RyMiIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEludGVyZmFjZSogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0SW50ZXJmYWNlKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RJbnRl
cmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTc4
OCwxNiArNzg2LDE3IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU1Rlc3RJbnRlcmZhY2UqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRB
dHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0Z1bmN0aW9uPihzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxTdHIzIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzRnVuY3Rp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzLCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKLSAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxTdHIzIik7CiAg
ICAgY2FzdGVkVGhpcy0+c2V0U3VwcGxlbWVudGFsU3RyMygqc3RhdGUsIHZhbHVlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTgwNSwxNiArODA0LDE3IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5v
ZGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CisKIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RJbnRlcmZhY2U+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVt
ZW50YWxOb2RlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxOb2RlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFjZSIsICJz
dXBwbGVtZW50YWxOb2RlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNOb2RlOjp0b1dyYXBwZWQodmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcAppbmRleCAxODFmOWYzMTY2MGJlMTFmMTAyODYxZGM3N2NkZjlkMDgy
MWQ1ODJkLi41ZGMwYWE3YjY4YmEzYjU0ZmQxNGNkZGFmMzlmNzgzY2ZiYzhlOGI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTE4OSwxNiArMTg5LDE3
IEBAIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGly
ZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1
ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
clRlc3RBdHRyaWJ1dGVSV0N1c3RvbUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInRlc3RBdHRyaWJ1dGVSV0N1c3RvbSIpOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21GdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogY2FzdGVk
VGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IiLCAidGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgY2Fz
dGVkVGhpcy0+c2V0VGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKCpzdGF0ZSwgdmFsdWUpOwogICAgIHJl
dHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCmluZGV4IGFhNjdhOGI5OGE5YTkwZjNjMjA4ZWE1ZTFk
MTg0MjZhN2Y4NjZiMmMuLmUzNTQxNGQ0MjgwN2I2NTIyMzkxMzY2OTBlNDkxYjM0ZGJkYzMzODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAKQEAgLTIxMiwxNiArMjEyLDE3IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlCiAgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+
cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNU
ZXN0Tm9kZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJuYW1lIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3ROb2RlTmFtZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUq
IGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE5vZGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3ROb2RlIiwgIm5hbWUiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKaW5kZXggMjZh
YzU4ZTlkMDdiOTk4NDk4ZWI0YzU0Mjk0N2JiYWQ5ODgwODFkZC4uNjQzNzI5ODhiNjI4MzEyNDgw
MjkwMjEzNmMxZmViMThkOTJmYTM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGlj
LmNwcApAQCAtMzU2LDE2ICszNTYsMTcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKICAgICBy
ZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5h
bWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CisKIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vbmRldGVybWluaXN0aWM+OjpzZXRBdHRyaWJ1dGU8c2V0
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBK
U1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RO
b25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1p
bmlzdGljV3JpdGVhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM3NCwxNiAr
Mzc1LDE3IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNX
cml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiB9CiAKIAorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vbmRldGVybWluaXN0aWM+OjpzZXRBdHRy
aWJ1dGU8c2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25B
dHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5vbmRldGVybWlu
aXN0aWNFeGNlcHRpb25BdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzLCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKLSAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJu
b25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KHN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTM5MiwxNiArMzk0LDE3IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVy
bWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiB9CiAKIAorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0
dGVyRXhjZXB0aW9uQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0
aWMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vbmRl
dGVybWluaXN0aWM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1p
bmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljR2V0
dGVyRXhjZXB0aW9uQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQxMCwxNiArNDEz
LDE3IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0
ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhCiB9CiAKIAorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9u
QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVy
bWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE5vbmRldGVybWluaXN0aWM+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNT
ZXR0ZXJFeGNlcHRpb25BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRl
ckV4Y2VwdGlvbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
LSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9u
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggN2Y2YjliODRkM2U3MjI3ZTQyOTYzZGE1MWRjNmY0
Y2Y5YTRlNjQzYS4uY2Y4MWExY2NhMDAxMTM0MmYxMzk0N2Q5OWYyN2EzM2M5OGM2ZDg4MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTMxOTUsMTIgKzMxOTUsOSBAQCBib29sIHNldEpTVGVzdE9iakNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZAog
ICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgVGVzdE9iajo6c2V0U3RhdGlj
U3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zMjA4LDMxICszMjA1LDMzIEBA
IGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RP
Ymo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0
U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmpl
Y3QiLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gY2FzdGVkVGhpcy0+cHV0RGlyZWN0KHN0
YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiVGVzdFN1Yk9iakVuYWJs
ZWRCeVNldHRpbmciKSwgdmFsdWUpOwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpFbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+
OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqRW51bUF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW51bUF0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakVudW1BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJlbnVtQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMyNDMsMTYgKzMyNDIsMTcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1YKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQnl0ZUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakJ5dGVBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImJ5dGVBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpCeXRlQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiYnl0ZUF0dHIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMjYxLDE2ICsz
MjYxLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWCiB9CiAKIAorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvY3RldEF0dHIiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
b2N0ZXRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTMyNzksMTYgKzMyODAsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlMKIH0KIAog
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVz
dE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2Jq
U2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNob3J0
QXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyRnVu
Y3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
LSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJzaG9ydEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzI5NywxNiArMzI5OSwxNyBAQCBib29sIHNldEpTVGVz
dE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKUwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVk
U2hvcnRBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dT
Y29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJGdW5jdGlvbj4o
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckZ1bmN0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAiY2xhbXBlZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4o
KnN0YXRlLCB2YWx1ZSwgQ2xhbXApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtMzMxNSwxNiArMzMxOCwxNyBAQCBib29sIHNldEpTVGVzdE9iakNsYW1w
ZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bgogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9y
dEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3Bl
Jik7CisKIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5mb3JjZVJhbmdlU2hvcnRB
dHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VT
aG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMzMzMsMTYgKzMzMzcs
MTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRT
aG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJu
IEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialVuc2ln
bmVkU2hvcnRBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVu
c2lnbmVkU2hvcnRBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpV
bnNpZ25lZFNob3J0QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidW5zaWduZWRTaG9ydEF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMzNTEs
MTYgKzMzNTYsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEUKIH0KIAogCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdD
YWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakxvbmdBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxvbmdBdHRyIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
bG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtMzM2OSwxNiArMzM3NSwxNyBAQCBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVgogfQogCiAK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAibG9uZ0xvbmdBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpM
b25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImxvbmdMb25nQXR0ciIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50NjRfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzg3LDE2ICszMzk0LDE3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialVuc2lnbmVk
TG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInVuc2lnbmVk
TG9uZ0xvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNDA1LDE2ICszNDEzLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRM
b25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlCiB9
CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0
SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqU3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJzdHJpbmdBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJzdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9X
VEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMzQyMywxNiArMzQzMiwxNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSgogfQog
CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNl
dEpTVGVzdE9ialVzdnN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNl
dEpTVGVzdE9ialVzdnN0cmluZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAidXN2c3RyaW5nQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidXN2c3RyaW5nQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM0NDEsMTYgKzM0NTEsMTcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2QKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
VGVzdE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2Jq
Pjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialRlc3RPYmpBdHRyRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3RPYmpBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidGVzdE9i
akF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTM0NjIsMTYgKzM0NzMsMTcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWQKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVz
dE51bGxhYmxlT2JqQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpB
dHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3ROdWxsYWJs
ZU9iakF0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3ROdWxs
YWJsZU9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFRlc3RPYmoqIG5hdGl2
ZVZhbHVlID0gbnVsbHB0cjsKICAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
QEAgLTM0ODYsMTYgKzM0OTgsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKIH0KIAogCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNl
dEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1
dGU8c2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyRnVuY3Rpb24sIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpSZXR1cm5FYXJseT4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
bGVuaWVudFRlc3RPYmpBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpMZW5pZW50VGVzdE9iakF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBK
U1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1
ZSkpIHsKQEAgLTM1MDcsMTYgKzM1MjAsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVz
dE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogfQog
CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRo
cm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nKHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0zNTI1LDE2ICszNTM5LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Z1bmN0aW9uPihz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInVz
dnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VT
VlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM1NDMsMTYgKzM1NTgsMTcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1l
bnRhdGlvbkVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVy
biB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
ImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxBbHRlcm5hdGVFbnVtTmFt
ZT4oKnN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNTYzLDE2ICszNTc5LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50
YXRpb25FbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsCiB9
CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0
SlNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNU
ZXN0T2JqWE1MT2JqQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJYTUxPYmpBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpYTUxP
YmpBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJYTUxPYmpBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CkBA
IC0zNTg0LDE2ICszNjAxLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKCiB9CiAKIAorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNyZWF0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpDcmVh
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRp
bmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakNyZWF0ZUZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjcmVhdGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNyZWF0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY3Jl
YXRlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFuKHN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2MDIsMTYgKzM2MjAsMTcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWwKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFs
dWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJp
bmdBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3Rl
ZFN0cmluZ0F0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNjIwLDE2ICszNjM5LDE3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFVTVlN0cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVl
LCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGlu
Z0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNW
U3RyaW5nQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZs
ZWN0ZWRVU1ZTdHJpbmdBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzYzOCwxNiArMzY1
OCwxNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVy
biB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
InJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zNjU2LDE2ICszNjc3LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50
ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJGdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDx1aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNjc0LDE2ICszNjk2
LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
alJlZmxlY3RlZEJvb2xlYW5BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInJlZmxlY3RlZEJvb2xlYW5BdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicmVmbGVj
dGVkQm9vbGVhbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY5MiwxNiArMzcxNSwx
NyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZQogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVS
TEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJp
bmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVSTEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVj
dGVkVVJMQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTM3MTAsMTYgKzM3MzQsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW4KIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNW
VVJMQXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2Nv
cGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVz
dE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFVTVlVSTEF0dHIi
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0
dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0T2JqZWN0IiwgInJlZmxlY3RlZFVTVlVSTEF0dHIiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zNzI4LDE2ICszNzUzLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Nj
b3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckZ1bmN0
aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRy
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdB
dHRyRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtMzc0NiwxNiArMzc3MiwxNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LAogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21J
bnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
cmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJGdW5jdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVy
biB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
InJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNzY0LDE2ICszNzkxLDE3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNW
YWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAg
IHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29s
ZWFuKHN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTM3ODIsMTYgKzM4MTAsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21C
b29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKIH0KIAogCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0
dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0T2JqZWN0IiwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC0zODAxLDE2ICszODMwLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsCiAKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpFbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0zODIwLDE2ICszODUwLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
CiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0
dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7
CisKIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInR5cGVkQXJyYXlBdHRyIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0ckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidHlw
ZWRBcnJheUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0Zsb2F0MzJBcnJheSh2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODQyLDE2ICszODczLDE3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqQXR0
cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9uIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVy
RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJhdHRyaWJ1dGVXaXRoR2V0dGVyRXhjZXB0aW9u
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM4
NjAsMTYgKzM4OTIsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHQKIH0KIAogCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aEdldHRlckxlZ2FjeUV4Y2VwdGlv
bkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0dGVyTGVnYWN5RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoR2V0
dGVyTGVnYWN5RXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb24iKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb25G
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0T2JqZWN0IiwgImF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lFeGNlcHRpb24iKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzg3OCwx
NiArMzkxMSwxNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhHZXR0ZXJMZWdhY3lF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogfQogCiAKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNl
dEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6
c2V0QXR0cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aFNldHRl
ckV4Y2VwdGlvbiIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmli
dXRlV2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiYXR0cmlidXRlV2l0aFNl
dHRlckV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zODk2LDE2ICszOTMwLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiB9
CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhTZXR0ZXJM
ZWdhY3lFeGNlcHRpb25GdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBU
aHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFNldHRlckxlZ2Fj
eUV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQXR0
cmlidXRlV2l0aFNldHRlckxlZ2FjeUV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0aW9uIik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVn
YWN5RXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJhdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5
RXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKQEAgLTM5MTYsMTYgKzM5
NTEsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoU2V0dGVyTGVnYWN5RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKIH0KIAogCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uRnVuY3Rp
b24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTM0LDE2ICszOTcw
LDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25GdW5jdGlvbihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50
b1dURlN0cmluZyhzdGF0ZSk7CkBAIC0zOTU0LDYxICszOTkxLDY1IEBAIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ3VzdG9tQXR0
ckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpDdXN0b21BdHRyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImN1c3RvbUF0dHIiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakN1c3RvbUF0dHJGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImN1c3RvbUF0dHIiKTsKICAgICBj
YXN0ZWRUaGlzLT5zZXRDdXN0b21BdHRyKCpzdGF0ZSwgdmFsdWUpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvb0Z1bmN0aW9uKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRK
U1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBy
ZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2Jq
T25mb29GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib25mb28iKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9uZm9vRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJvbmZvbyIpOwogICAgIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZSgqc3RhdGUsICpjYXN0
ZWRUaGlzLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgdmFs
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpPbndlYmtpdGZvb0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUs
IFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqT253ZWJraXRmb29GdW5jdGlvbj4oc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib253ZWJraXRmb28iKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vRnVuY3Rpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJv
bndlYmtpdGZvbyIpOwogICAgIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZSgqc3RhdGUsICpjYXN0
ZWRUaGlzLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgdmFs
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAg
IHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJf
dD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00MDE3LDE2ICs0MDU4LDE3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialdp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJp
YnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ3aXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVGdW5jdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJU
ZXN0T2JqZWN0IiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQwMzUsMTYg
KzQwNzcsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0
aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKIH0KIAogCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFu
YXRpdmVWYWx1ZSkpIHsKQEAgLTQwNTksMTYgKzQxMDIsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlMKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
LSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1
cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
RnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRp
dmVWYWx1ZSkpIHsKQEAgLTQwODAsMTYgKzQxMjQsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
LCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmli
dXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2Vz
RnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0g
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
LSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQxMDQsMTYgKzQxNDksMTcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmMKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVy
PEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFu
YXRpdmVWYWx1ZSkpIHsKQEAgLTQxMjgsMTYgKzQxNzQsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3QKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0Z1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5k
aW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzRnVuY3Rpb24+KHN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQxNTIs
MTYgKzQxOTksMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGEKIH0KIAogCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBK
U1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0
T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0
dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQxNzYs
MTYgKzQyMjQsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGUKIH0KIAogCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUm
KTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRBcmd1
bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwot
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwot
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRB
cmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKQEAgLTQxOTgs
MTYgKzQyNDcsMTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2Fs
bFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY28KIAogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNl
dEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxRnVuY3Rpb24+KHN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFGdW5jdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgImNvbmRpdGlvbmFsQXR0cjEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDIxOCwxNiArNDI2OCwxNyBAQCBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlv
bjIpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJp
YnV0ZTxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjIiKTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJGdW5jdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNv
bmRpdGlvbmFsQXR0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtNDIzOCwxNiArNDI4OSwxNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0Z1bmN0aW9uKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjMiKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNvbmRpdGlv
bmFsQXR0cjMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDI1OCwxNiArNDMxMCwxNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNCIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yRnVuY3Rpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJjb25kaXRpb25hbEF0dHI0Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnB1dERpcmVjdChzdGF0ZS0+dm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImNvbmRpdGlvbmFsQXR0cjQiKSwgdmFs
dWUpOwogfQpAQCAtNDI3NSwxNiArNDMyOCwxNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9y
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOwor
CiBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rl
c3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVj
dG9yRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFs
QXR0cjUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjVDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9uYWxBdHRyNSIpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiBjYXN0
ZWRUaGlzLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3Rh
dGUsICJjb25kaXRpb25hbEF0dHI1IiksIHZhbHVlKTsKIH0KQEAgLTQyOTIsMzIgKzQzNDYsMzQg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JGdW5jdGlvbihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAg
IHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgImNvbmRpdGlvbmFsQXR0cjYiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KICAgICByZXR1cm4gY2FzdGVkVGhpcy0+cHV0RGlyZWN0KHN0YXRlLT52bSgp
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiY29uZGl0aW9uYWxBdHRyNiIpLCB2YWx1
ZSk7CiB9CiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0
cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworCiBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+Ojpz
ZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImFueUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJhbnlBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZTsKICAgICBpbXBsLnNldEFueUF0dHJpYnV0ZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CkBAIC00MzI1LDE2ICs0MzgxLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
QW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2lu
dEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iak11dGFibGVQb2ludEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAibXV0YWJsZVBvaW50
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBTVkdQcm9w
ZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+KiBuYXRpdmVWYWx1ZSA9IG51bGxwdHI7CiAgICAgaWYgKCF2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC00MzQ5LDE2ICs0NDA2LDE3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akltbXV0YWJsZVBvaW50RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwg
VGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpT
VGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludEZ1bmN0aW9u
PihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbW11dGFibGVQb2ludCIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnRGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAg
ICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgImltbXV0YWJsZVBvaW50Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+KiBuYXRpdmVWYWx1
ZSA9IG51bGxwdHI7CiAgICAgaWYgKCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC00
MzczLDE2ICs0NDMxLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvCiB9CiAKIAorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnlGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
YXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4g
QmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqU3RyYXdi
ZXJyeUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJhd2JlcnJ5
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5RnVuY3Rp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAi
VGVzdE9iamVjdCIsICJzdHJhd2JlcnJ5Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTQzOTEsMTYgKzQ0NTAsMTcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEoKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSWRGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wg
c2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdE9i
aklkRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImlkIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpJZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiaWQi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDQw
OSwzMSArNDQ2OSwzMyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZQogfQogCiAKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rl
c3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8
c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAicmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IHByb3BlcnR5LgogICAgIHJldHVybiBjYXN0ZWRUaGlzLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCks
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpLCB2
YWx1ZSk7CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVy
biBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpOdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVGdW5j
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
Ci0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ0NDIsMTYgKzQ1MDQs
MTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVz
dE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0
QXR0cmlidXRlPHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5j
dGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibnVsbGFibGVTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVs
bGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAibnVsbGFibGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ0NjAsMTYgKzQ1MjMsMTcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHUKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVV
U1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRK
U1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNW
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm51bGxhYmxlVVNWU3Ry
aW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NDc4LDE2ICs0NTQyLDE3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxl
U3RyaW5nVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJv
d1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxK
U1Rlc3RPYmo+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUZ1
bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZVN0cmluZ1Zh
bHVlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzLCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ0OTYsMTYgKzQ1NjEs
MTcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKIH0KIAogCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVGdW5jdGlvbihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0
T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0
cmlidXRlPHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVu
dW1UeXBlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVX
aXRoUmVzZXJ2ZWRFbnVtVHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiYXR0cmlidXRlV2l0aFJlc2Vy
dmVkRW51bVR5cGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oKnN0YXRlLCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00
NTE2LDE2ICs0NTgyLDE3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVk
RW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKIH0KIAogCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVGdW5jdGlvbihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRl
PHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAg
cmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmpl
Y3QiLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKICAgICBSZWY8VGVzdE5vZGU+IGZvcndhcmRl
ZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKTsKICAg
ICBhdXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtNDUzNSwxNiArNDYwMiwxNyBAQCBib29s
IHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZQogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialB1dEZvcndh
cmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8SlNUZXN0T2JqPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVGdW5jdGlvbj4oc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJp
YnV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcywgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RPYmplY3QiLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwog
ICAgIFJlZlB0cjxUZXN0Tm9kZT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KS5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCk7CiAgICAgaWYgKCFmb3J3YXJkZWRJbXBs
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTU2LDE2ICs0NjI0LDE3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0CiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0
cmluZ2lmaWVyQXR0cmlidXRlRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgSlNWYWx1
ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5n
Q2FsbGVyPEpTVGVzdE9iaj46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0
dHJpYnV0ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdp
ZmllckF0dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5naWZpZXJBdHRyaWJ1dGVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInN0cmluZ2lmaWVyQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCBhZTE4ZjhkYTk2MGVm
ZDA5NTczMzI2MDhlYjlhNTY0YTY4NmNlMGMyLi4xNzJlZTE4NDFkZDQ5NDhiOTJkYTZmNjZlN2Fl
MzE0NTU4MTdlM2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjQ3LDE2ICsyNDcsMTcgQEAgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGUKICAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCks
IHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKIH0KIAorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiwgSlNWYWx1ZSwgVGhyb3dTY29wZSYpOworCiBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZT46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VWYWx1ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ2YWx1
ZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJl
dHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInZhbHVlIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI2NSwxNiArMjY2LDE3IEBAIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsCiB9CiAKIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworCiBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hl
ZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBC
aW5kaW5nQ2FsbGVyPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1
ZUZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjYWNoZWRWYWx1ZSIp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ2FjaGVkVmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAg
IHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZhbHVlIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCmlu
ZGV4IDgxMTE0OGY0NWJkYTM2YWI1NDlmODRjYzU3MjI2YWNkZjhhMWJmMWUuLjBiNjJmYmRmYTZh
OGI5NGU1NGU3OGU0NDYzZGQxNjgwNjFkYzgzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcApAQCAt
MzUzLDE2ICszNTMsMTcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KICAgICByZXR1cm4gZG9t
T2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29u
c3RydWN0b3IsIHZhbHVlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVk
ZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVm
cyosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsKKwogYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2ln
bmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IHJldHVybiBCaW5kaW5nQ2FsbGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpT
VGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJGdW5jdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7Ci0g
ICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVk
ZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0VHlwZWRlZnMiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM3MSwxNiArMzcy
LDE3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiB9CiAKIAorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlRnVuY3Rpb24o
RXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJv
b2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8
SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVT
ZXJpYWxpemVkU2NyaXB0VmFsdWVGdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKLSAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkKLSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVTZXJpYWxpemVkU2Ny
aXB0VmFsdWUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwg
dmFsdWUsIDAsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtMzg5LDE2ICszOTEsMTcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlMKIH0KIAogCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bkZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgSlNWYWx1ZSwgVGhyb3dTY29w
ZSYpOworCiBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEJpbmRpbmdDYWxs
ZXI8SlNUZXN0VHlwZWRlZnM+OjpzZXRBdHRyaWJ1dGU8c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uPihzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkZ1bmN0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1Rlc3RU
eXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
LSAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00MDcsMTYgKzQxMCwxNyBAQCBi
b29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNU
ZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNUZXN0VHlw
ZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBlZGVmcz46OnNldEF0
dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24+
KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNh
c3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKQEAgLTQyNywx
NiArNDMxLDE3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiB9CiAKIAorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIEpTVmFsdWUsIFRocm93U2NvcGUmKTsK
KwogYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBCaW5kaW5nQ2Fs
bGVyPEpTVGVzdFR5cGVkZWZzPjo6c2V0QXR0cmlidXRlPHNldEpTVGVzdFR5cGVkZWZzU3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25GdW5jdGlvbj4oc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25G
dW5jdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcywgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7Ci0gICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpCi0gICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NDUsMTYgKzQ1MCwxNyBAQCBi
b29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogfQogCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNUZXN0VHlwZWRlZnMqLCBKU1ZhbHVlLCBUaHJvd1Njb3BlJik7CisKIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gQmluZGluZ0NhbGxlcjxKU1Rlc3RUeXBl
ZGVmcz46OnNldEF0dHJpYnV0ZTxzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uRnVuY3Rpb24+KHN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uRnVuY3Rpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpT
VGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQotICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>