<?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>99046</bug_id>
          
          <creation_ts>2012-10-11 06:28:12 -0700</creation_ts>
          <short_desc>Web Inspector: NMI move instrumentation tests from chromium test set to the cross platform test set</short_desc>
          <delta_ts>2012-10-12 00:06:29 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>0</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>alph</cc>
    
    <cc>apavlov</cc>
    
    <cc>benjamin</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rakuco</cc>
    
    <cc>rik</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>739892</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-10-11 06:28:12 -0700</bug_when>
    <thetext>We test the hard cases like WTF containers and Strings in chromium specific code at the moment.
But the better place for such tests is Tools/TestWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739898</commentid>
    <comment_count>1</comment_count>
      <attachid>168214</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-10-11 06:31:41 -0700</bug_when>
    <thetext>Created attachment 168214
for try bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739925</commentid>
    <comment_count>2</comment_count>
      <attachid>168214</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-11 06:56:20 -0700</bug_when>
    <thetext>Comment on attachment 168214
for try bots

Attachment 168214 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14254567</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740665</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-10-12 00:06:29 -0700</bug_when>
    <thetext>Committed r131149: &lt;http://trac.webkit.org/changeset/131149&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168214</attachid>
            <date>2012-10-11 06:31:41 -0700</date>
            <delta_ts>2012-10-11 06:56:20 -0700</delta_ts>
            <desc>for try bots</desc>
            <filename>bug-99046-20121011173037.patch</filename>
            <type>text/plain</type>
            <size>64352</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpp
bmRleCBlODE3ZjlhYjMxMzJhMTNlZGRiZWRiYWExYjFjOWUxMDE2ZWI2MzFhLi4yNGNhZTI5OGZm
NTA0OTFmZWMxM2ZhYjQzYmQ5MDg2OTY2Nzg2YzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKQEAgLTg0LDcgKzg0LDYgQEAKICAgICAgICAgICAgICd0ZXN0cy9MaW5rSGlnaGxpZ2h0
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xpc3RlbmVyTGVha1Rlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9NZW1vcnlJbmZvLmNwcCcsCi0gICAgICAgICAgICAndGVzdHMvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL09wYXF1ZVJl
Y3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL09wZW5UeXBlVmVydGljYWxEYXRhVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BP
REFyZW5hVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNmMTFhYTk0YmMxYjg3MzlmMzkwODEyMDU0ZTc2MDIyNjVjY2VlNDguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDY5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRGF0YVJl
Zi5oIgotI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaCIKLSNpbmNsdWRlICJX
ZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCi0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgotCi0jaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hDb3Vu
dGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25BcnJheUJ1ZmZlclZpZXcu
aD4KLSNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL01lbW9y
eUluc3RydW1lbnRhdGlvblN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50
YXRpb25WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0ltcGwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSB7Ci1lbnVtIFRlc3RFbnVtIHsgT05FID0gMSwg
VFdPLCBUSFJFRSwgTVlfRU5VTV9NQVggfTsKLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFRlc3RFbnVtPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNo
PHVuc2lnbmVkPiBIYXNoOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxUZXN0
RW51bT4gOiBHZW5lcmljSGFzaFRyYWl0czxUZXN0RW51bT4gewotICAgIHN0YXRpYyBjb25zdCBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSBmYWxzZTsKLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoVGVzdEVudW0mIHNsb3QpIHsgc2xvdCA9IHN0YXRpY19jYXN0PFRlc3RFbnVtPihNWV9FTlVN
X01BWCArIDEpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoVGVzdEVudW0gdmFs
dWUpIHsgcmV0dXJuIHZhbHVlID09IChNWV9FTlVNX01BWCArIDEpOyB9Ci19OwotCi19Ci0KLW5h
bWVzcGFjZSB7Ci0KLWNsYXNzIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgewotcHVibGljOgot
ICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIoKSA6IG1fY2xpZW50KDApLCBtX2luc3RydW1l
bnRhdGlvbigmbV9jbGllbnQpIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2
b2lkIGFkZFJvb3RPYmplY3QoY29uc3QgVCYgdCkgeyBtX2luc3RydW1lbnRhdGlvbi5hZGRSb290
T2JqZWN0KHQpOyB9Ci0gICAgc2l6ZV90IHJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jbGllbnQucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKTsgfQotICAgIGludCB2
aXNpdGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50LnZpc2l0ZWRPYmplY3RzKCk7
IH0KLSAgICBzaXplX3QgdG90YWxTaXplKE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQudG90YWxTaXplKG9iamVjdFR5cGUpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBtX2NsaWVudDsKLSAgICBNZW1v
cnlJbnN0cnVtZW50YXRpb25JbXBsIG1faW5zdHJ1bWVudGF0aW9uOwotfTsKLQotY2xhc3MgTm90
SW5zdHJ1bWVudGVkIHsKLXB1YmxpYzoKLSAgICBOb3RJbnN0cnVtZW50ZWQoY29uc3QgY2hhciog
PSAwKSB7IH0KLSAgICBjaGFyIG1fZGF0YVs0Ml07Ci19OwotCi1jbGFzcyBJbnN0cnVtZW50ZWQg
ewotcHVibGljOgotICAgIEluc3RydW1lbnRlZCgpIDogbV9ub3RJbnN0cnVtZW50ZWQobmV3IE5v
dEluc3RydW1lbnRlZCkgeyB9Ci0gICAgdmlydHVhbCB+SW5zdHJ1bWVudGVkKCkgeyBkZWxldGUg
bV9ub3RJbnN0cnVtZW50ZWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAgICAg
ICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1l
bW9yeVR5cGVzOjpET00pOwotICAgICAgICBpbmZvLmFkZE1lbWJlcihtX25vdEluc3RydW1lbnRl
ZCk7Ci0gICAgfQotICAgIE5vdEluc3RydW1lbnRlZCogbV9ub3RJbnN0cnVtZW50ZWQ7Ci19Owot
Ci1URVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHNpemVPZikKLXsKLSAgICBJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKLSAgICBJbnN0cnVtZW50ZWQgaW5zdHJ1bWVudGVk
OwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VR
KHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7Ci0gICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKLX0KLQotVEVT
VChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBudWxsQ2hlY2spCi17Ci0gICAgSW5zdHJ1bWVu
dGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0gICAgSW5zdHJ1bWVudGVkKiBpbnN0cnVtZW50ZWQg
PSAwOwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNU
X0VRKDB1LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VR
KDAsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKLX0KLQotVEVTVChNZW1vcnlJbnN0cnVtZW50
YXRpb25UZXN0LCBwdHJWc1JlZikKLXsKLSAgICB7Ci0gICAgICAgIEluc3RydW1lbnRhdGlvblRl
c3RIZWxwZXIgaGVscGVyOwotICAgICAgICBJbnN0cnVtZW50ZWQgaW5zdHJ1bWVudGVkOwotICAg
ICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCgmaW5zdHJ1bWVudGVkKTsKLSAgICAgICAgRVhQRUNU
X0VRKHNpemVvZihJbnN0cnVtZW50ZWQpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBl
ci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBl
ci52aXNpdGVkT2JqZWN0cygpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBJbnN0cnVtZW50YXRp
b25UZXN0SGVscGVyIGhlbHBlcjsKLSAgICAgICAgSW5zdHJ1bWVudGVkIGluc3RydW1lbnRlZDsK
LSAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkKTsKLSAgICAgICAgRVhQ
RUNUX0VRKHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxs
VHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7
Ci0gICAgfQotfQotCi1URVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIG93blB0cikKLXsK
LSAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKLSAgICBPd25QdHI8SW5zdHJ1
bWVudGVkPiBpbnN0cnVtZW50ZWQoYWRvcHRQdHIobmV3IEluc3RydW1lbnRlZCkpOwotICAgIGhl
bHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJ
bnN0cnVtZW50ZWQpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3Rz
KCkpOwotfQotCi1jbGFzcyBJbnN0cnVtZW50ZWRSZWZQdHIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bnN0cnVtZW50ZWRSZWZQdHI+IHsKLXB1YmxpYzoKLSAgICBJbnN0cnVtZW50ZWRSZWZQdHIoKSA6
IG1fbm90SW5zdHJ1bWVudGVkKG5ldyBOb3RJbnN0cnVtZW50ZWQpIHsgfQotICAgIHZpcnR1YWwg
fkluc3RydW1lbnRlZFJlZlB0cigpIHsgZGVsZXRlIG1fbm90SW5zdHJ1bWVudGVkOyB9Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zdHJ1bWVudGVkUmVmUHRyPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zdHJ1bWVudGVkUmVmUHRyKCkpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKLSAgICB7Ci0gICAgICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8s
IHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKTsKLSAgICAgICAgaW5mby5hZGRNZW1iZXIo
bV9ub3RJbnN0cnVtZW50ZWQpOwotICAgIH0KLSAgICBOb3RJbnN0cnVtZW50ZWQqIG1fbm90SW5z
dHJ1bWVudGVkOwotfTsKLQotVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBkYXRhUmVm
KQotewotICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotICAgIERhdGFSZWY8
SW5zdHJ1bWVudGVkUmVmUHRyPiBpbnN0cnVtZW50ZWRSZWZQdHI7Ci0gICAgaW5zdHJ1bWVudGVk
UmVmUHRyLmluaXQoKTsKLSAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChpbnN0cnVtZW50ZWRSZWZQ
dHIpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkUmVmUHRyKSArIHNpemVvZihO
b3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAg
RVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKLX0KLQotVEVTVChNZW1vcnlJ
bnN0cnVtZW50YXRpb25UZXN0LCByZWZQdHIpCi17Ci0gICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7Ci0gICAgUmVmUHRyPEluc3RydW1lbnRlZFJlZlB0cj4gaW5zdHJ1bWVudGVk
UmVmUHRyKGFkb3B0UmVmKG5ldyBJbnN0cnVtZW50ZWRSZWZQdHIpKTsKLSAgICBoZWxwZXIuYWRk
Um9vdE9iamVjdChpbnN0cnVtZW50ZWRSZWZQdHIpOwotICAgIEVYUEVDVF9FUShzaXplb2YoSW5z
dHJ1bWVudGVkUmVmUHRyKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2Jq
ZWN0cygpKTsKLX0KLQotY2xhc3MgSW5zdHJ1bWVudGVkV2l0aE93blB0ciA6IHB1YmxpYyBJbnN0
cnVtZW50ZWQgewotcHVibGljOgotICAgIEluc3RydW1lbnRlZFdpdGhPd25QdHIoKSA6IG1fbm90
SW5zdHJ1bWVudGVkT3duUHRyKGFkb3B0UHRyKG5ldyBOb3RJbnN0cnVtZW50ZWQpKSB7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAgICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8o
bWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgICAg
ICBJbnN0cnVtZW50ZWQ6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAg
ICAgICBpbmZvLmFkZE1lbWJlcihtX25vdEluc3RydW1lbnRlZE93blB0cik7Ci0gICAgfQotICAg
IE93blB0cjxOb3RJbnN0cnVtZW50ZWQ+IG1fbm90SW5zdHJ1bWVudGVkT3duUHRyOwotfTsKLQot
VEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25QdHJOb3RJbnN0cnVtZW50ZWQpCi17
Ci0gICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0gICAgSW5zdHJ1bWVudGVk
V2l0aE93blB0ciBpbnN0cnVtZW50ZWRXaXRoT3duUHRyOwotICAgIGhlbHBlci5hZGRSb290T2Jq
ZWN0KGluc3RydW1lbnRlZFdpdGhPd25QdHIpOwotICAgIEVYUEVDVF9FUSgyICogc2l6ZW9mKE5v
dEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBF
WFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwotfQotCi1jbGFzcyBJbnN0cnVt
ZW50ZWRVbmRlZmluZWQgewotcHVibGljOgotICAgIEluc3RydW1lbnRlZFVuZGVmaW5lZCgpIDog
bV9kYXRhKDApIHsgfQotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAgICAgICAgTWVtb3J5Q2xhc3NJ
bmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcyk7Ci0gICAgfQotICAgIGludCBtX2RhdGE7
Ci19OwotCi1jbGFzcyBJbnN0cnVtZW50ZWRET00gewotcHVibGljOgotICAgIEluc3RydW1lbnRl
ZERPTSgpIDogbV9pbnN0cnVtZW50ZWRVbmRlZmluZWQoYWRvcHRQdHIobmV3IEluc3RydW1lbnRl
ZFVuZGVmaW5lZCkpIHsgfQotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAgICAgICAgTWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpE
T00pOwotICAgICAgICBpbmZvLmFkZE1lbWJlcihtX2luc3RydW1lbnRlZFVuZGVmaW5lZCk7Ci0g
ICAgfQotICAgIE93blB0cjxJbnN0cnVtZW50ZWRVbmRlZmluZWQ+IG1faW5zdHJ1bWVudGVkVW5k
ZWZpbmVkOwotfTsKLQotVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBvd25lclR5cGVQ
cm9wYWdhdGlvbikKLXsKLSAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKLSAg
ICBPd25QdHI8SW5zdHJ1bWVudGVkRE9NPiBpbnN0cnVtZW50ZWRET00oYWRvcHRQdHIobmV3IElu
c3RydW1lbnRlZERPTSkpOwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KGluc3RydW1lbnRlZERP
TSk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRET00pICsgc2l6ZW9mKEluc3Ry
dW1lbnRlZFVuZGVmaW5lZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAg
ICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZERPTSkgKyBzaXplb2YoSW5zdHJ1bWVudGVk
VW5kZWZpbmVkKSwgaGVscGVyLnRvdGFsU2l6ZShXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSkpOwot
ICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci19Ci0KLWNsYXNzIE5v
blZpcnR1YWxJbnN0cnVtZW50ZWQgewotcHVibGljOgotICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLSAgICB7Ci0gICAg
ICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVN
ZW1vcnlUeXBlczo6RE9NKTsKLSAgICAgICAgaW5mby5hZGRNZW1iZXIobV9pbnN0cnVtZW50ZWQp
OwotICAgIH0KLQotICAgIEluc3RydW1lbnRlZCBtX2luc3RydW1lbnRlZDsKLX07Ci0KLVRFU1Qo
TWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmlzaXRGaXJzdE1lbWJlckluTm9uVmlydHVhbENs
YXNzKQotewotICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotICAgIE5vblZp
cnR1YWxJbnN0cnVtZW50ZWQgbm9uVmlydHVhbEluc3RydW1lbnRlZDsKLSAgICBoZWxwZXIuYWRk
Um9vdE9iamVjdCgmbm9uVmlydHVhbEluc3RydW1lbnRlZCk7Ci0gICAgRVhQRUNUX0VRKHNpemVv
ZihOb25WaXJ0dWFsSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpLCBoZWxw
ZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIsIGhlbHBlci52
aXNpdGVkT2JqZWN0cygpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEluc3Ry
dW1lbnRlZE93bmVyIHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotICAgIElu
c3RydW1lbnRlZE93bmVyKGNvbnN0IFYmIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgfQotICAg
IEluc3RydW1lbnRlZE93bmVyKCkgeyB9Ci0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAgICAgICAgTWVt
b3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5
cGVzOjpET00pOwotICAgICAgICBpbmZvLmFkZE1lbWJlcihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAg
ICBUIG1fdmFsdWU7Ci19OwotCi1URVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZpc2l0
U3RyaW5ncykKLXsKLSAgICB7IC8vIDgtYml0IHN0cmluZy4KLSAgICAgICAgSW5zdHJ1bWVudGF0
aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0gICAgICAgIEluc3RydW1lbnRlZE93bmVyPFN0cmluZz4g
c3RyaW5nSW5zdHJ1bWVudGVkT3duZXIoIlN0cmluZyIpOwotICAgICAgICBoZWxwZXIuYWRkUm9v
dE9iamVjdChzdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShzaXpl
b2YoU3RyaW5nSW1wbCkgKyBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgp
LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgx
LCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci0gICAgfQotCi0gICAgeyAvLyA4LWJpdCBzdHJp
bmcgd2l0aCAxNmJpdCBzaGFkb3cuCi0gICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIg
aGVscGVyOwotICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJpbmc+IHN0cmluZ0luc3RydW1l
bnRlZE93bmVyKCJTdHJpbmciKTsKLSAgICAgICAgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92
YWx1ZS5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHN0cmluZ0lu
c3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSAr
IHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCkgKiAoc2l6ZW9mKExDaGFy
KSArIHNpemVvZihVQ2hhcikpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0g
ICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci0gICAgfQotCi0g
ICAgeyAvLyAxNiBiaXQgc3RyaW5nLgotICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVy
IGhlbHBlcjsKLSAgICAgICAgU3RyaW5nIHN0cmluZygiU3RyaW5nIik7Ci0gICAgICAgIEluc3Ry
dW1lbnRlZE93bmVyPFN0cmluZz4gc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIoU3RyaW5nKHN0cmlu
Zy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSkpOwotICAgICAgICBoZWxwZXIuYWRkUm9v
dE9iamVjdChzdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShzaXpl
b2YoU3RyaW5nSW1wbCkgKyBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAg
ICAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwotICAgIH0KLQotICAg
IHsgLy8gQVNDSUlMaXRlcmFsCi0gICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVs
cGVyOwotICAgICAgICBBU0NJSUxpdGVyYWwgbGl0ZXJhbCgiU3RyaW5nIik7Ci0gICAgICAgIElu
c3RydW1lbnRlZE93bmVyPFN0cmluZz4gc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIobGl0ZXJhbCk7
Ci0gICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHN0cmluZ0luc3RydW1lbnRlZE93bmVyKTsK
LSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSwgaGVscGVyLnJlcG9ydGVkU2l6
ZUZvckFsbFR5cGVzKCkpOwotICAgICAgICBFWFBFQ1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmpl
Y3RzKCkpOwotICAgIH0KLQotICAgIHsgLy8gWmVybyB0ZXJtaW5hdGVkIGludGVybmFsIGJ1ZmZl
ci4KLSAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0gICAgICAgIElu
c3RydW1lbnRlZE93bmVyPFN0cmluZz4gc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIoInN0cmluZyIp
OwotICAgICAgICBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCk7Ci0gICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHN0cmluZ0lu
c3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSAr
IChzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgpICsgMSkgKiAoc2l6ZW9m
KExDaGFyKSArIHNpemVvZihVQ2hhcikpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMo
KSk7Ci0gICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci0gICAg
fQotCi0gICAgeyAvLyBTdWJzdHJpbmcKLSAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBl
ciBoZWxwZXI7Ci0gICAgICAgIFN0cmluZyBiYXNlU3RyaW5nKCJTdHJpbmciKTsKLSAgICAgICAg
YmFzZVN0cmluZy5jaGFyYWN0ZXJzKCk7IC8vIEZvcmNlIDE2IHNoYWRvdyBjcmVhdGlvbi4KLSAg
ICAgICAgSW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nPiBzdHJpbmdJbnN0cnVtZW50ZWRPd25lcihi
YXNlU3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJbXBsKDEsIDQpKTsKLSAgICAgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3Qoc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOwotICAgICAgICBFWFBFQ1RfRVEo
c2l6ZW9mKFN0cmluZ0ltcGwpICogMiArIGJhc2VTdHJpbmcubGVuZ3RoKCkgKiAoc2l6ZW9mKExD
aGFyKSArIHNpemVvZihVQ2hhcikpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7
Ci0gICAgICAgIEVYUEVDVF9FUSgzLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci0gICAgfQot
Ci0gICAgeyAvLyBPd25lZCBidWZmZXIuCi0gICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxw
ZXIgaGVscGVyOwotICAgICAgICBTdHJpbmdCdWZmZXI8TENoYXI+IGJ1ZmZlcig2KTsKLSAgICAg
ICAgSW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nPiBzdHJpbmdJbnN0cnVtZW50ZWRPd25lcihTdHJp
bmc6OmFkb3B0KGJ1ZmZlcikpOwotICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChzdHJpbmdJ
bnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShzaXplb2YoU3RyaW5nSW1wbCkg
KyBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmxlbmd0aCgpLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRl
ZE9iamVjdHMoKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0
SGVscGVyIGhlbHBlcjsKLSAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8QXRvbWljU3RyaW5nPiBh
dG9taWNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcigiQXRvbWljU3RyaW5nIik7Ci0gICAgICAgIGF0
b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUuc3RyaW5nKCkuY2hhcmFjdGVycygp
OyAvLyBGb3JjZSAxNmJpdCBzaGFkb3cgY3JlYXRpb24uCi0gICAgICAgIGhlbHBlci5hZGRSb290
T2JqZWN0KGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKLSAgICAgICAgRVhQRUNUX0VR
KHNpemVvZihTdHJpbmdJbXBsKSArIGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFs
dWUubGVuZ3RoKCkgKiAoc2l6ZW9mKExDaGFyKSArIHNpemVvZihVQ2hhcikpLCBoZWxwZXIucmVw
b3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlz
aXRlZE9iamVjdHMoKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBJbnN0cnVtZW50YXRpb25U
ZXN0SGVscGVyIGhlbHBlcjsKLSAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8Q1N0cmluZz4gY1N0
cmluZ0luc3RydW1lbnRlZE93bmVyKCJDU3RyaW5nIik7Ci0gICAgICAgIGhlbHBlci5hZGRSb290
T2JqZWN0KGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lcik7Ci0gICAgICAgIEVYUEVDVF9FUShzaXpl
b2YoV1RGOjpDU3RyaW5nQnVmZmVyKSArIGNTdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVl
Lmxlbmd0aCgpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIEVY
UEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci0gICAgfQotfQotCi1jbGFzcyBU
d29Qb2ludGVyc1RvUmVmUHRyIHsKLXB1YmxpYzoKLSAgICBUd29Qb2ludGVyc1RvUmVmUHRyKGNv
bnN0IFJlZlB0cjxTdHJpbmdJbXBsPiYgdmFsdWUpIDogbV9wdHIxKCZ2YWx1ZSksIG1fcHRyMigm
dmFsdWUpICB7IH0KLSAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
IG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci0gICAgewotICAgICAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7Ci0g
ICAgICAgIGluZm8uYWRkTWVtYmVyKG1fcHRyMSk7Ci0gICAgICAgIGluZm8uYWRkTWVtYmVyKG1f
cHRyMik7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+KiBtX3B0cjE7Ci0g
ICAgY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+KiBtX3B0cjI7Ci19OwotCi1URVNUKE1lbW9yeUlu
c3RydW1lbnRhdGlvblRlc3QsIHJlZlB0clB0cikKLXsKLSAgICBJbnN0cnVtZW50YXRpb25UZXN0
SGVscGVyIGhlbHBlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVmUHRyOwotICAgIFR3b1Bv
aW50ZXJzVG9SZWZQdHIgcm9vdChyZWZQdHIpOwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJv
b3QpOwotICAgIEVYUEVDVF9FUShzaXplb2YoUmVmUHRyPFN0cmluZ0ltcGw+KSwgaGVscGVyLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRl
ZE9iamVjdHMoKSk7Ci19Ci0KLWNsYXNzIFR3b1BvaW50ZXJzVG9Pd25QdHIgewotcHVibGljOgot
ICAgIFR3b1BvaW50ZXJzVG9Pd25QdHIoY29uc3QgT3duUHRyPE5vdEluc3RydW1lbnRlZD4mIHZh
bHVlKSA6IG1fcHRyMSgmdmFsdWUpLCBtX3B0cjIoJnZhbHVlKSAgeyB9Ci0gICAgdm9pZCByZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAot
ICAgIHsKLSAgICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhp
cywgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOwotICAgICAgICBpbmZvLmFkZE1lbWJlcihtX3B0
cjEpOwotICAgICAgICBpbmZvLmFkZE1lbWJlcihtX3B0cjIpOwotICAgIH0KLQotICAgIGNvbnN0
IE93blB0cjxOb3RJbnN0cnVtZW50ZWQ+KiBtX3B0cjE7Ci0gICAgY29uc3QgT3duUHRyPE5vdElu
c3RydW1lbnRlZD4qIG1fcHRyMjsKLX07Ci0KLVRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVz
dCwgb3duUHRyUHRyKQotewotICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwot
ICAgIE93blB0cjxOb3RJbnN0cnVtZW50ZWQ+IG93blB0cjsKLSAgICBUd29Qb2ludGVyc1RvT3du
UHRyIHJvb3Qob3duUHRyKTsKLSAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICBF
WFBFQ1RfRVEoc2l6ZW9mKE93blB0cjxOb3RJbnN0cnVtZW50ZWQ+KSwgaGVscGVyLnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVj
dHMoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBJbnN0cnVtZW50ZWRUZW1w
bGF0ZSB7Ci1wdWJsaWM6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4KLSAgICBJbnN0cnVtZW50
ZWRUZW1wbGF0ZShjb25zdCBWJiB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1lbW9yeU9iamVjdEluZm8+Ci0gICAgdm9pZCByZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAg
ICAgICAgdHlwZW5hbWUgTWVtb3J5T2JqZWN0SW5mbzo6Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOwotICAgICAgICBpbmZvLmFk
ZE1lbWJlcihtX3ZhbHVlKTsKLSAgICB9Ci0KLSAgICBUIG1fdmFsdWU7Ci19OwotCi1URVNUKE1l
bW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGRldGVjdFJlcG9ydE1lbW9yeVVzYWdlTWV0aG9kKQot
ewotICAgIHsKLSAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0KLSAg
ICAgICAgT3duUHRyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4gPiB2YWx1ZSA9IGFkb3B0
UHRyKG5ldyBJbnN0cnVtZW50ZWRUZW1wbGF0ZTxTdHJpbmc+KCIiKSk7Ci0gICAgICAgIEluc3Ry
dW1lbnRlZE93bmVyPEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4qID4gcm9vdCh2YWx1ZS5n
ZXQoKSk7Ci0gICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgICAgICBFWFBF
Q1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZFRlbXBsYXRlPFN0cmluZz4pICsgc2l6ZW9mKFN0cmlu
Z0ltcGwpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBpdCBpcyBmYWlsaW5nIG9uIENocm9taXVtIENhbmFyeSBib3RzIGJ1dCB3b3JrcyBmaW5l
IGxvY2FsbHkuCi0gICAgICAgIC8vIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMo
KSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxw
ZXI7Ci0KLSAgICAgICAgT3duUHRyPEluc3RydW1lbnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRl
ZD4gPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWRUZW1wbGF0ZTxOb3RJbnN0cnVt
ZW50ZWQ+KCIiKSk7Ci0gICAgICAgIEluc3RydW1lbnRlZE93bmVyPEluc3RydW1lbnRlZFRlbXBs
YXRlPE5vdEluc3RydW1lbnRlZD4qID4gcm9vdCh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIGhlbHBl
ci5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1l
bnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRlZD4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxs
VHlwZXMoKSk7Ci0gICAgICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7
Ci0gICAgfQotfQotCi1URVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZlY3Rvclplcm9J
bmxpbmVDYXBhY2l0eSkKLXsKLSAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsK
LSAgICBJbnN0cnVtZW50ZWRPd25lcjxWZWN0b3I8aW50PiA+IHZlY3Rvck93bmVyKDE2KTsKLSAg
ICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7Ci0gICAgRVhQRUNUX0VRKDE2ICog
c2l6ZW9mKGludCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBF
Q1RfRVEoMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwotfQotCi1URVNUKE1lbW9yeUluc3Ry
dW1lbnRhdGlvblRlc3QsIHZlY3RvckZpZWxkV2l0aElubGluZUNhcGFjaXR5KQotewotICAgIElu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotICAgIEluc3RydW1lbnRlZE93bmVyPFZl
Y3RvcjxpbnQsIDQ+ID4gdmVjdG9yT3duZXI7Ci0gICAgaGVscGVyLmFkZFJvb3RPYmplY3QodmVj
dG9yT3duZXIpOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDApLCBoZWxwZXIu
cmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGhlbHBlci52aXNp
dGVkT2JqZWN0cygpKTsKLX0KLQotVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCB2ZWN0
b3JGaWVsZFdpdGhJbmxpbmVDYXBhY2l0eVJlc2l6ZWQpCi17Ci0gICAgSW5zdHJ1bWVudGF0aW9u
VGVzdEhlbHBlciBoZWxwZXI7Ci0gICAgSW5zdHJ1bWVudGVkT3duZXI8VmVjdG9yPGludCwgND4g
PiB2ZWN0b3JPd25lcjsKLSAgICB2ZWN0b3JPd25lci5tX3ZhbHVlLnJlc2VydmVDYXBhY2l0eSg4
KTsKLSAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7Ci0gICAgRVhQRUNUX0VR
KDggKiBzaXplb2YoaW50KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAg
IEVYUEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci19Ci0KLVRFU1QoTWVtb3J5
SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGVhcEFsbG9jYXRlZFZlY3RvcldpdGhJbmxpbmVDYXBhY2l0
eSkKLXsKLSAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKLSAgICBJbnN0cnVt
ZW50ZWRPd25lcjxPd25QdHI8VmVjdG9yPGludCwgND4gPiA+IHZlY3Rvck93bmVyOwotICAgIHZl
Y3Rvck93bmVyLm1fdmFsdWUgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGludCwgND4oKSk7Ci0gICAg
aGVscGVyLmFkZFJvb3RPYmplY3QodmVjdG9yT3duZXIpOwotICAgIEVYUEVDVF9FUShzaXplb2Yo
VmVjdG9yPGludCwgND4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAg
RVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKLX0KLQotVEVTVChNZW1vcnlJ
bnN0cnVtZW50YXRpb25UZXN0LCBoZWFwQWxsb2NhdGVkVmVjdG9yV2l0aElubGluZUNhcGFjaXR5
UmVzaXplZCkKLXsKLSAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKLSAgICBJ
bnN0cnVtZW50ZWRPd25lcjxPd25QdHI8VmVjdG9yPGludCwgND4gPiA+IHZlY3Rvck93bmVyOwot
ICAgIHZlY3Rvck93bmVyLm1fdmFsdWUgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGludCwgND4oKSk7
Ci0gICAgdmVjdG9yT3duZXIubV92YWx1ZS0+cmVzZXJ2ZUNhcGFjaXR5KDgpOwotICAgIGhlbHBl
ci5hZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKLSAgICBFWFBFQ1RfRVEoOCAqIHNpemVvZihp
bnQpICsgc2l6ZW9mKFZlY3RvcjxpbnQsIDQ+KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5
cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci19Ci0K
LVRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmVjdG9yV2l0aEluc3RydW1lbnRlZFR5
cGUpCi17Ci0gICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0KLSAgICB0eXBl
ZGVmIFZlY3RvcjxTdHJpbmc+IFN0cmluZ1ZlY3RvcjsKLSAgICBPd25QdHI8U3RyaW5nVmVjdG9y
PiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBTdHJpbmdWZWN0b3IoKSk7Ci0gICAgc2l6ZV90IGNvdW50
ID0gMTA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICB2
YWx1ZS0+YXBwZW5kKCJzdHJpbmciKTsKLSAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJpbmdWZWN0
b3IqID4gcm9vdCh2YWx1ZS5nZXQoKSk7Ci0gICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7
Ci0gICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdWZWN0b3IpICsgc2l6ZW9mKFN0cmluZykgKiB2
YWx1ZS0+Y2FwYWNpdHkoKSArIChzaXplb2YoU3RyaW5nSW1wbCkgKyA2KSAqIHZhbHVlLT5zaXpl
KCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoY291
bnQgKyAyLCAoc2l6ZV90KWhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKLX0KLQotVEVTVChNZW1v
cnlJbnN0cnVtZW50YXRpb25UZXN0LCBoYXNoU2V0V2l0aEluc3RydW1lbnRlZFR5cGUpCi17Ci0g
ICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0KLSAgICB0eXBlZGVmIEhhc2hT
ZXQ8U3RyaW5nPiBWYWx1ZVR5cGU7Ci0gICAgT3duUHRyPFZhbHVlVHlwZT4gdmFsdWUgPSBhZG9w
dFB0cihuZXcgVmFsdWVUeXBlKCkpOwotICAgIHNpemVfdCBjb3VudCA9IDEwOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgdmFsdWUtPmFkZChTdHJpbmc6
Om51bWJlcihpKSk7Ci0gICAgSW5zdHJ1bWVudGVkT3duZXI8VmFsdWVUeXBlKiA+IHJvb3QodmFs
dWUuZ2V0KCkpOwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgIEVYUEVDVF9F
UShzaXplb2YoVmFsdWVUeXBlKSArIHNpemVvZihTdHJpbmcpICogdmFsdWUtPmNhcGFjaXR5KCkg
KyAoc2l6ZW9mKFN0cmluZ0ltcGwpICsgMSkgKiB2YWx1ZS0+c2l6ZSgpLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKGNvdW50ICsgMSwgKHNpemVfdClo
ZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci19Ci0KLVRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9u
VGVzdCwgaGFzaE1hcFdpdGhOb3RJbnN0cnVtZW50ZWRLZXlzQW5kVmFsdWVzKQotewotICAgIElu
c3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgaW50PiBJbnRUb0ludE1hcDsKLSAgICBPd25QdHI8SW50VG9JbnRNYXA+IHZhbHVlID0gYWRv
cHRQdHIobmV3IEludFRvSW50TWFwKCkpOwotICAgIHNpemVfdCBjb3VudCA9IDEwOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDw9IGNvdW50OyArK2kpCi0gICAgICAgIHZhbHVlLT5zZXQoaSwg
aSk7Ci0gICAgSW5zdHJ1bWVudGVkT3duZXI8SW50VG9JbnRNYXAqID4gcm9vdCh2YWx1ZS5nZXQo
KSk7Ci0gICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNpemVv
ZihJbnRUb0ludE1hcCkgKyBzaXplb2YoSW50VG9JbnRNYXA6OlZhbHVlVHlwZSkgKiB2YWx1ZS0+
Y2FwYWNpdHkoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVD
VF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci19Ci0KLVRFU1QoTWVtb3J5SW5zdHJ1
bWVudGF0aW9uVGVzdCwgaGFzaE1hcFdpdGhJbnN0cnVtZW50ZWRLZXlzKQotewotICAgIEluc3Ry
dW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgaW50PiBTdHJpbmdUb0ludE1hcDsKLSAgICBPd25QdHI8U3RyaW5nVG9JbnRNYXA+IHZhbHVl
ID0gYWRvcHRQdHIobmV3IFN0cmluZ1RvSW50TWFwKCkpOwotICAgIGludCBjb3VudCA9IDEwOwot
ICAgIGZvciAoaW50IGkgPSAxMDsgaSA8IDEwICsgY291bnQ7ICsraSkKLSAgICAgICAgdmFsdWUt
PnNldChTdHJpbmc6Om51bWJlcihpKSwgaSk7Ci0gICAgSW5zdHJ1bWVudGVkT3duZXI8U3RyaW5n
VG9JbnRNYXAqID4gcm9vdCh2YWx1ZS5nZXQoKSk7Ci0gICAgaGVscGVyLmFkZFJvb3RPYmplY3Qo
cm9vdCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdUb0ludE1hcCkgKyBzaXplb2YoU3Ry
aW5nVG9JbnRNYXA6OlZhbHVlVHlwZSkgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIChzaXplb2YoU3Ry
aW5nSW1wbCkgKyAyKSAqIHZhbHVlLT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoY291bnQgKyAxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMo
KSk7Ci19Ci0KLVRFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGFzaE1hcFdpdGhJbnN0
cnVtZW50ZWRWYWx1ZXMpCi17Ci0gICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7
Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEludFRvU3RyaW5nTWFwOwotICAg
IE93blB0cjxJbnRUb1N0cmluZ01hcD4gdmFsdWUgPSBhZG9wdFB0cihuZXcgSW50VG9TdHJpbmdN
YXAoKSk7Ci0gICAgaW50IGNvdW50ID0gMTA7Ci0gICAgZm9yIChpbnQgaSA9IDEwOyBpIDwgMTAg
KyBjb3VudDsgKytpKQotICAgICAgICB2YWx1ZS0+c2V0KGksIFN0cmluZzo6bnVtYmVyKGkpKTsK
LSAgICBJbnN0cnVtZW50ZWRPd25lcjxJbnRUb1N0cmluZ01hcCogPiByb290KHZhbHVlLmdldCgp
KTsKLSAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9m
KEludFRvU3RyaW5nTWFwKSArIHNpemVvZihJbnRUb1N0cmluZ01hcDo6VmFsdWVUeXBlKSAqIHZh
bHVlLT5jYXBhY2l0eSgpICsgKHNpemVvZihTdHJpbmdJbXBsKSArIDIpICogdmFsdWUtPnNpemUo
KSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUShjb3Vu
dCArIDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKLX0KLQotVEVTVChNZW1vcnlJbnN0cnVt
ZW50YXRpb25UZXN0LCBoYXNoTWFwV2l0aEluc3RydW1lbnRlZEtleXNBbmRWYWx1ZXMpCi17Ci0g
ICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0KLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IFN0cmluZ1RvU3RyaW5nTWFwOwotICAgIE93blB0cjxTdHJpbmdU
b1N0cmluZ01hcD4gdmFsdWUgPSBhZG9wdFB0cihuZXcgU3RyaW5nVG9TdHJpbmdNYXAoKSk7Ci0g
ICAgaW50IGNvdW50ID0gMTA7Ci0gICAgZm9yIChpbnQgaSA9IDEwOyBpIDwgMTAgKyBjb3VudDsg
KytpKQotICAgICAgICB2YWx1ZS0+c2V0KFN0cmluZzo6bnVtYmVyKGNvdW50ICsgaSksIFN0cmlu
Zzo6bnVtYmVyKGkpKTsKLSAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJpbmdUb1N0cmluZ01hcCog
PiByb290KHZhbHVlLmdldCgpKTsKLSAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKLSAg
ICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ1RvU3RyaW5nTWFwKSArIHNpemVvZihTdHJpbmdUb1N0
cmluZ01hcDo6VmFsdWVUeXBlKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgMiAqIChzaXplb2YoU3Ry
aW5nSW1wbCkgKyAyKSAqIHZhbHVlLT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKLSAgICBFWFBFQ1RfRVEoMiAqIGNvdW50ICsgMSwgaGVscGVyLnZpc2l0ZWRPYmpl
Y3RzKCkpOwotfQotCi1URVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGhhc2hNYXBXaXRo
SW5zdHJ1bWVudGVkUG9pbnRlcktleXNBbmRQb2ludGVyVmFsdWVzKQotewotICAgIEluc3RydW1l
bnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPEluc3RydW1l
bnRlZCosIEluc3RydW1lbnRlZCo+IEluc3RydW1lbnRlZFRvSW5zdHJ1bWVudGVkTWFwOwotICAg
IE93blB0cjxJbnN0cnVtZW50ZWRUb0luc3RydW1lbnRlZE1hcD4gdmFsdWUgPSBhZG9wdFB0cihu
ZXcgSW5zdHJ1bWVudGVkVG9JbnN0cnVtZW50ZWRNYXAoKSk7Ci0gICAgVmVjdG9yPE93blB0cjxJ
bnN0cnVtZW50ZWQ+ID4gdmFsdWVzVmVjdG9yOwotICAgIGludCBjb3VudCA9IDEwOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICB2YWx1ZXNWZWN0b3IuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWQoKSkpOwotICAgICAgICB2YWx1ZXNWZWN0b3Iu
YXBwZW5kKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWQoKSkpOwotICAgICAgICB2YWx1ZS0+c2V0
KHZhbHVlc1ZlY3RvclsyICogaV0uZ2V0KCksIHZhbHVlc1ZlY3RvclsyICogaSArIDFdLmdldCgp
KTsKLSAgICB9Ci0gICAgSW5zdHJ1bWVudGVkT3duZXI8SW5zdHJ1bWVudGVkVG9JbnN0cnVtZW50
ZWRNYXAqID4gcm9vdCh2YWx1ZS5nZXQoKSk7Ci0gICAgaGVscGVyLmFkZFJvb3RPYmplY3Qocm9v
dCk7Ci0gICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRUb0luc3RydW1lbnRlZE1hcCkg
KyBzaXplb2YoSW5zdHJ1bWVudGVkVG9JbnN0cnVtZW50ZWRNYXA6OlZhbHVlVHlwZSkgKiB2YWx1
ZS0+Y2FwYWNpdHkoKSArIDIgKiAoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90SW5z
dHJ1bWVudGVkKSkgKiB2YWx1ZS0+c2l6ZSgpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlw
ZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIgKiAyICogY291bnQgKyAxLCBoZWxwZXIudmlzaXRlZE9i
amVjdHMoKSk7Ci19Ci0KLWNsYXNzIEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQgewotcHVi
bGljOgotICAgIEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQoKSA6IG1fbm90SW5zdHJ1bWVu
dGVkKDApIHsgfQotICAgIHZpcnR1YWwgfkluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQoKSB7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAgICAgICAgTWVtb3J5Q2xhc3NJbmZv
IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOwot
ICAgICAgICBpbmZvLmFkZE1lbWJlcihtX25vdEluc3RydW1lbnRlZCk7Ci0gICAgfQotCi0gICAg
b3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gMjAxMjsgfQotCi0gICAgTm90SW5zdHJ1bWVu
dGVkKiBtX25vdEluc3RydW1lbnRlZDsKLX07Ci0KLS8vIFRoaXMgdGVzdCBjaGVja3MgaWYgcmVw
b3J0TWVtb3J5VXNhZ2UgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG9uIGEgY2xhc3MKLS8vIHRoYXQg
Y2FuIGJlIGltcGxpY2l0bHkgY2FzdCB0byBpbnQuIEN1cnJlbnRseSBvYmplY3RzIG9mIHN1Y2gg
Y2xhc3NlcyBhcmUKLS8vIHRyZWF0ZWQgYXMgaW50ZWdlcnMgd2hlbiB0aGV5IGFyZSBzdG9yZWQg
aW4gYSBIYXNoTWFwIGJ5IHZhbHVlIGFuZAotLy8gcmVwb3J0TWVtb3J5VXNhZ2Ugd2lsbCBub3Qg
YmUgY2FsbGVkIG9uIHRoZW0uIFdlIG1heSBmaXggdGhhdCBsYXRlci4KLVRFU1QoTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVGVzdCwgaGFzaE1hcFdpdGhWYWx1ZXNDb252ZXJ0aWJsZVRvSW50KQotewot
ICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQqLCBJbnN0cnVtZW50ZWRDb252ZXJ0aWJs
ZVRvSW50PiBUZXN0TWFwOwotICAgIE93blB0cjxUZXN0TWFwPiB2YWx1ZSA9IGFkb3B0UHRyKG5l
dyBUZXN0TWFwKCkpOwotICAgIFZlY3RvcjxPd25QdHI8SW5zdHJ1bWVudGVkQ29udmVydGlibGVU
b0ludD4gPiBrZXlzVmVjdG9yOwotICAgIFZlY3RvcjxPd25QdHI8Tm90SW5zdHJ1bWVudGVkPiA+
IHZhbHVlc1ZlY3RvcjsKLSAgICBpbnQgY291bnQgPSAxMDsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAga2V5c1ZlY3Rvci5hcHBlbmQoYWRvcHRQdHIobmV3
IEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQoKSkpOwotICAgICAgICB2YWx1ZXNWZWN0b3Iu
YXBwZW5kKGFkb3B0UHRyKG5ldyBOb3RJbnN0cnVtZW50ZWQoKSkpOwotICAgICAgICB2YWx1ZS0+
c2V0KGtleXNWZWN0b3JbaV0uZ2V0KCksIEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQoKSku
aXRlcmF0b3ItPnZhbHVlLm1fbm90SW5zdHJ1bWVudGVkID0gdmFsdWVzVmVjdG9yW2ldLmdldCgp
OwotICAgIH0KLSAgICBJbnN0cnVtZW50ZWRPd25lcjxUZXN0TWFwKiA+IHJvb3QodmFsdWUuZ2V0
KCkpOwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgIEVYUEVDVF9FUShzaXpl
b2YoVGVzdE1hcCkgKyBzaXplb2YoVGVzdE1hcDo6VmFsdWVUeXBlKSAqIHZhbHVlLT5jYXBhY2l0
eSgpICsKLSAgICAgICAgc2l6ZW9mKEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQpICogY291
bnQgLyogKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSAqIGNvdW50ICovLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKGNvdW50ICsgMSwgaGVscGVyLnZp
c2l0ZWRPYmplY3RzKCkpOwotfQotCi1URVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGhh
c2hNYXBXaXRoRW51bUtleXNBbmRJbnN0cnVtZW50ZWRWYWx1ZXMpCi17Ci0gICAgSW5zdHJ1bWVu
dGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8VGVzdEVudW0s
IFN0cmluZz4gRW51bVRvU3RyaW5nTWFwOwotICAgIE93blB0cjxFbnVtVG9TdHJpbmdNYXA+IHZh
bHVlID0gYWRvcHRQdHIobmV3IEVudW1Ub1N0cmluZ01hcCgpKTsKLSAgICBpbnQgY291bnQgPSBN
WV9FTlVNX01BWDsKLSAgICBmb3IgKGludCBpID0gT05FOyBpIDw9IGNvdW50OyArK2kpCi0gICAg
ICAgIHZhbHVlLT5zZXQoc3RhdGljX2Nhc3Q8VGVzdEVudW0+KGkpLCBTdHJpbmc6Om51bWJlcihp
KSk7Ci0gICAgSW5zdHJ1bWVudGVkT3duZXI8RW51bVRvU3RyaW5nTWFwKiA+IHJvb3QodmFsdWUu
Z2V0KCkpOwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOwotICAgIEVYUEVDVF9FUShz
aXplb2YoRW51bVRvU3RyaW5nTWFwKSArIHNpemVvZihFbnVtVG9TdHJpbmdNYXA6OlZhbHVlVHlw
ZSkgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIChzaXplb2YoU3RyaW5nSW1wbCkgKyAxKSAqIHZhbHVl
LT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKLSAgICBFWFBFQ1Rf
RVEoY291bnQgKyAxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Ci19Ci0KLVRFU1QoTWVtb3J5
SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGFzaENvdW50ZWRTZXRXaXRoSW5zdHJ1bWVudGVkVmFsdWVz
KQotewotICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOwotCi0gICAgdHlwZWRl
ZiBIYXNoQ291bnRlZFNldDxJbnN0cnVtZW50ZWQqPiBUZXN0U2V0OwotICAgIE93blB0cjxUZXN0
U2V0PiBzZXQgPSBhZG9wdFB0cihuZXcgVGVzdFNldCgpKTsKLSAgICBWZWN0b3I8T3duUHRyPElu
c3RydW1lbnRlZD4gPiBrZXlzVmVjdG9yOwotICAgIGludCBjb3VudCA9IDEwOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBrZXlzVmVjdG9yLmFwcGVuZChh
ZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkKCkpKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PD0gaTsgaisrKQotICAgICAgICAgICAgc2V0LT5hZGQoa2V5c1ZlY3Rvci5sYXN0KCkuZ2V0KCkp
OwotICAgIH0KLSAgICBJbnN0cnVtZW50ZWRPd25lcjxUZXN0U2V0KiA+IHJvb3Qoc2V0LmdldCgp
KTsKLSAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKLSAgICBFWFBFQ1RfRVEoc2l6ZW9m
KFRlc3RTZXQpICsgc2l6ZW9mKEhhc2hNYXA8SW5zdHJ1bWVudGVkKiwgdW5zaWduZWQ+OjpWYWx1
ZVR5cGUpICogc2V0LT5jYXBhY2l0eSgpICsgKHNpemVvZihJbnN0cnVtZW50ZWQpICsgc2l6ZW9m
KE5vdEluc3RydW1lbnRlZCkpICAqIHNldC0+c2l6ZSgpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9y
QWxsVHlwZXMoKSk7Ci0gICAgRVhQRUNUX0VRKDIgKiBjb3VudCArIDEsIGhlbHBlci52aXNpdGVk
T2JqZWN0cygpKTsKLX0KLQotVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBhcnJheUJ1
ZmZlcikKLXsKLSAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKLQotICAgIHR5
cGVkZWYgSW5zdHJ1bWVudGVkVGVtcGxhdGU8UmVmUHRyPEFycmF5QnVmZmVyPiA+IFZhbHVlVHlw
ZTsKLSAgICBWYWx1ZVR5cGUgdmFsdWUoQXJyYXlCdWZmZXI6OmNyZWF0ZSgxMDAwLCBzaXplb2Yo
aW50KSkpOwotICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHZhbHVlKTsKLSAgICBFWFBFQ1RfRVEo
c2l6ZW9mKGludCkgKiAxMDAwICsgc2l6ZW9mKEFycmF5QnVmZmVyKSwgaGVscGVyLnJlcG9ydGVk
U2l6ZUZvckFsbFR5cGVzKCkpOwotICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVj
dHMoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMTRkYjRkNDRlNTg0N2M3ODJjNjJhOGU5Nzg4NTU4
MjQ3OTRjYjhkLi4wNmJlOGE1ZmJjZjlhNmRkZWUzNDBmNDNiNWNmZmQyNDg3MzNlNTg3IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTIgQEAKKzIwMTItMTAtMTEgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSSBtb3ZlIGluc3RydW1lbnRhdGlvbiB0ZXN0
cyBmcm9tIGNocm9taXVtIHRlc3Qgc2V0IHRvIHRoZSBjcm9zcyBwbGF0Zm9ybSB0ZXN0IHNldC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MDQ2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9NZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcDoKKwogMjAxMi0x
MC0xMCAgTHVjYXMgRm9yc2NobGVyICA8bGZvcnNjaGxlckBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIEFwcGxlIE1hYyBTbm93IExlb3BhcmQgYm90cy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0CmluZGV4IGEyM2MwZDEwNWY0NThmMzY1NjJmNzMzYWZlY2YzOWRlY2I0NGE0ZTUuLmM0
ZTQyN2UxZDYzNDE3M2EwNzhhZGUyMmZhMTQ1YzBlZjA3YWM4NjggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dApAQCAtNzQsNiArNzQsNyBAQCBBRERfRVhFQ1VUQUJMRSh0ZXN0X3d0Zgog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJz
aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NYXRoRXh0cmFzLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAor
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZW1vcnlJbnN0cnVtZW50YXRpb25U
ZXN0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9SZWRCbGFja1RyZWUu
Y3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9TdHJp
bmdCdWlsZGVyLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmls
ZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXggOGUyZjE5Njc0
NDZkYjdmN2I4NjA4OGQ5YzZlZGI2YWE3NTU2ZmI4Ny4uZDI5NGQwNjI5MWExNjlkZTc1M2RiNjlh
ZjBhYjkxNDMxZTRlMjQ5MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC01OCw2
ICs1OCw3IEBAIFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9TT1VSQ0VTID0gXAogCVRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3Bw
IFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NYXRoRXh0cmFzLmNwcCBcCiAJVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWVkaWFUaW1lLmNwcCBcCisJVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAgXAogCVRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAgXAogCVRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBcCiAJ
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nQnVpbGRlci5jcHAgXApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLmd5cGkgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkuZ3lwaQppbmRleCA5MjRkYzEyNzgxZGRjYjE1MzVjODVk
YjVlMGJiYjllZjUxZGE0YzRhLi4yYzA3OTQwYzgyNzZjMzlmNjY0YTNhNTA1NWM3Yzk0ODkxZjVh
NWY1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkuZ3lwaQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkuZ3lwaQpAQCAtMzgsNiArMzgs
NyBAQAogICAgICAgICAgICAgJ1Rlc3RzL1dURi9IYXNoTWFwLmNwcCcsCiAgICAgICAgICAgICAn
VGVzdHMvV1RGL01hdGhFeHRyYXMuY3BwJywKICAgICAgICAgICAgICdUZXN0cy9XVEYvTWVkaWFU
aW1lLmNwcCcsCisgICAgICAgICAgICAnVGVzdHMvV1RGL01lbW9yeUluc3RydW1lbnRhdGlvblRl
c3QuY3BwJywKICAgICAgICAgICAgICdUZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcCcsCiAgICAg
ICAgICAgICAnVGVzdHMvV1RGL1NhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCcsCiAg
ICAgICAgICAgICAnVGVzdHMvV1RGL1N0cmluZ0J1aWxkZXIuY3BwJywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYmNkY2Q0YzQ1MTZlZGUxNGJiNTg0YmNkM2MzMTU0OGM5ZDdmNmEzNC4uNzdl
ZWU4NDVkOWIxZjc4NGM4Yjk5YmYxN2IxM2JhZDZlNjFhZGZhYSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTUxLDYgKzUxLDcgQEAKIAkJNDQwQTFEMzkxNEEwMTAzQTAwOEE2NkYyIC8qIEtV
UkwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQw
QTFEMzgxNEEwMTAzQTAwOEE2NkYyIC8qIEtVUkwuY3BwICovOyB9OwogCQk0QkZERkZBNzEzMTQ3
NzZDMDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCRkRGRkE2MTMxNDc3NkMw
MDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwICovOyB9OwogCQk0
QkZERkZBOTEzMTQ3Nzc3MDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJGREZGQTgxMzE0
Nzc3NzAwNjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlLmNwcCAqLzsgfTsKKwkJNEY0
RDJDMEUxNjI2RkUyNzAwMzIwRkUxIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY0RDJDMEQxNjI2
RkUyNzAwMzIwRkUxIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QuY3BwICovOyB9OwogCQk1
MTM5M0UyMDE1MjM5NDRBMDA1RjM5QzUgLyogRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzOTNFMUUxNTIz
OTQ0QTAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljLmNwcCAqLzsgfTsKIAkJNTEz
OTNFMjIxNTIzOTUyRDAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTM5M0Ux
RDE1MjM5NDRBMDA1RjM5QzUgLyogRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCAq
LzsgfTsKIAkJNTE0MkIyNzExNTE3Qzg4QjAwQzMyQjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVS
TC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNDJC
MjcwMTUxN0M4OEIwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlVUkwubW0gKi87IH07CkBA
IC0yODgsNiArMjg5LDcgQEAKIAkJNDRBNjIyQzExNEEwRTJCNjAwNDg1MTVCIC8qIFdURlN0cmlu
Z1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZTdHJpbmdV
dGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJGREZGQTYxMzE0Nzc2
QzAwNjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5k
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkZERkZBODEzMTQ3Nzc3MDA2
MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0RjREMkMwRDE2MjZGRTI3MDAzMjBGRTEgLyogTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcDsgcGF0aCA9IFdURi9NZW1vcnlJbnN0cnVt
ZW50YXRpb25UZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEzOTNFMUQx
NTIzOTQ0QTAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01XaW5kb3dFeHRlbnNpb25CYXNp
Y19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTM5M0UxRTE1MjM5
NDRBMDA1RjM5QzUgLyogRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTQyQjI3MDE1MTdDODhCMDBDMzJCMTkgLyogQ29u
dGV4dE1lbnVDYW5Db3B5VVJMLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQ29udGV4dE1lbnVDYW5Db3B5VVJMLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjQyLDYgKzY0NCw3IEBACiAJCQkJMjZGMUI0NDIxNUNBNDM0RjAwRDFFNEJGIC8qIEF0
b21pY1N0cmluZy5jcHAgKi8sCiAJCQkJMjZBMkM3MkUxNUUyRTczQzAwNUIxQTE0IC8qIENTdHJp
bmcuY3BwICovLAogCQkJCUNENTQ5N0IzMTU4NTdGMEMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3Bw
ICovLAorCQkJCTRGNEQyQzBEMTYyNkZFMjcwMDMyMEZFMSAvKiBNZW1vcnlJbnN0cnVtZW50YXRp
b25UZXN0LmNwcCAqLywKIAkJCQkwRkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJl
ZS5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1l
dGljT3BlcmF0aW9ucy5jcHAgKi8sCkBAIC05OTEsNiArOTk0LDcgQEAKIAkJCQkyNjVBRjU1MDE1
RDFFNDhBMDBCMENCNEEgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMTg3
Nzg5MTVFRUM1NzcwMEE5Q0NFMyAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJ
bWFnZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk0M0JFODYxNjFERkVCODAwOTk5RTNEIC8q
IFVzZXJDb250ZW50VGVzdC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTRGNEQyQzBFMTYyNkZFMjcw
MDMyMEZFMSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uVGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YmIwNGFlOTdjYWIwN2E3Y2FkZjZmY2M2
NWIyZWZhOWY2YmJmZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdC5jcHAKQEAgLTAsMCArMSw3MzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVk
ZSA8d3RmL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5z
dHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3Ry
dW1lbnRhdGlvbkhhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1l
bnRhdGlvbkhhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25TdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSB7CitlbnVtIFRlc3RFbnVtIHsgT05FID0gMSwg
VFdPLCBUSFJFRSwgTVlfRU5VTV9NQVggfTsKK30KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFRlc3RFbnVtPiB7CisgICAgdHlwZWRlZiBJbnRIYXNo
PHVuc2lnbmVkPiBIYXNoOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxUZXN0
RW51bT4gOiBHZW5lcmljSGFzaFRyYWl0czxUZXN0RW51bT4geworICAgIHN0YXRpYyBjb25zdCBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoVGVzdEVudW0mIHNsb3QpIHsgc2xvdCA9IHN0YXRpY19jYXN0PFRlc3RFbnVtPihNWV9FTlVN
X01BWCArIDEpOyB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoVGVzdEVudW0gdmFs
dWUpIHsgcmV0dXJuIHZhbHVlID09IChNWV9FTlVNX01BWCArIDEpOyB9Cit9OworCit9CisKK25h
bWVzcGFjZSB7CisKK3VzaW5nIFdURjo6TWVtb3J5T2JqZWN0SW5mbzsKK3VzaW5nIFdURjo6TWVt
b3J5Q2xhc3NJbmZvOwordXNpbmcgV1RGOjpNZW1vcnlPYmplY3RUeXBlOworCitNZW1vcnlPYmpl
Y3RUeXBlIFRlc3RUeXBlID0gIlRlc3RUeXBlIjsKKworY2xhc3MgSW5zdHJ1bWVudGF0aW9uVGVz
dEhlbHBlciA6IHB1YmxpYyBXVEY6Ok1lbW9yeUluc3RydW1lbnRhdGlvbiB7CitwdWJsaWM6Cisg
ICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlcigpCisgICAgICAgIDogTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uKCZtX2NsaWVudCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGVm
ZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycygpOworICAgIHZpcnR1YWwgdm9pZCBkZWZlckluc3Ry
dW1lbnRlZFBvaW50ZXIoUGFzc093blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4pOworCisg
ICAgc2l6ZV90IHZpc2l0ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQudmlzaXRl
ZE9iamVjdHMoKTsgfQorICAgIHNpemVfdCByZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50LnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCk7IH0KKyAgICBzaXpl
X3QgdG90YWxTaXplKGNvbnN0IE1lbW9yeU9iamVjdFR5cGUgb2JqZWN0VHlwZSkgY29uc3QgeyBy
ZXR1cm4gbV9jbGllbnQudG90YWxTaXplKG9iamVjdFR5cGUpOyB9CisKK3ByaXZhdGU6CisgICAg
Y2xhc3MgQ2xpZW50IDogcHVibGljIFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb3VudE9iamVjdFNpemUoY29uc3Qg
TWVtb3J5T2JqZWN0VHlwZSBvYmplY3RUeXBlLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgVHlwZVRvU2l6ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdG90YWxTaXplcy5h
ZGQob2JqZWN0VHlwZSwgc2l6ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gc2l6ZTsKKyAgICAg
ICAgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgdmlzaXRlZChjb25zdCB2b2lkKiBvYmplY3QpIHsg
cmV0dXJuICFtX3Zpc2l0ZWRPYmplY3RzLmFkZChvYmplY3QpLmlzTmV3RW50cnk7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNoZWNrQ291bnRlZE9iamVjdChjb25zdCB2b2lkKikgeyB9CisKKyAg
ICAgICAgc2l6ZV90IHZpc2l0ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aXNpdGVkT2Jq
ZWN0cy5zaXplKCk7IH0KKyAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZShjb25zdCBNZW1vcnlPYmpl
Y3RUeXBlIG9iamVjdFR5cGUpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIFR5cGVUb1Np
emVNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3RvdGFsU2l6ZXMuZmluZChvYmplY3RUeXBlKTsK
KyAgICAgICAgICAgIHJldHVybiBpID09IG1fdG90YWxTaXplcy5lbmQoKSA/IDAgOiBpLT52YWx1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCByZXBvcnRlZFNpemVGb3JBbGxUeXBlcygp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gMDsKKyAgICAgICAg
ICAgIGZvciAoVHlwZVRvU2l6ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fdG90YWxTaXplcy5i
ZWdpbigpOyBpICE9IG1fdG90YWxTaXplcy5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgIHNp
emUgKz0gaS0+dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPE1lbW9yeU9iamVjdFR5cGUsIHNp
emVfdD4gVHlwZVRvU2l6ZU1hcDsKKyAgICAgICAgVHlwZVRvU2l6ZU1hcCBtX3RvdGFsU2l6ZXM7
CisgICAgICAgIFdURjo6SGFzaFNldDxjb25zdCB2b2lkKj4gbV92aXNpdGVkT2JqZWN0czsKKyAg
ICB9OworCisgICAgQ2xpZW50IG1fY2xpZW50OworICAgIFZlY3RvcjxPd25QdHI8SW5zdHJ1bWVu
dGVkUG9pbnRlckJhc2U+ID4gbV9kZWZlcnJlZEluc3RydW1lbnRlZFBvaW50ZXJzOworfTsKKwor
dm9pZCBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyOjpwcm9jZXNzRGVmZXJyZWRJbnN0cnVtZW50
ZWRQb2ludGVycygpCit7CisgICAgd2hpbGUgKCFtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRl
cnMuaXNFbXB0eSgpKSB7CisgICAgICAgIE93blB0cjxJbnN0cnVtZW50ZWRQb2ludGVyQmFzZT4g
cG9pbnRlciA9IG1fZGVmZXJyZWRJbnN0cnVtZW50ZWRQb2ludGVycy5sYXN0KCkucmVsZWFzZSgp
OworICAgICAgICBtX2RlZmVycmVkSW5zdHJ1bWVudGVkUG9pbnRlcnMucmVtb3ZlTGFzdCgpOwor
ICAgICAgICBwb2ludGVyLT5wcm9jZXNzKHRoaXMpOworICAgIH0KK30KKwordm9pZCBJbnN0cnVt
ZW50YXRpb25UZXN0SGVscGVyOjpkZWZlckluc3RydW1lbnRlZFBvaW50ZXIoUGFzc093blB0cjxJ
bnN0cnVtZW50ZWRQb2ludGVyQmFzZT4gcG9pbnRlcikKK3sKKyAgICBtX2RlZmVycmVkSW5zdHJ1
bWVudGVkUG9pbnRlcnMuYXBwZW5kKHBvaW50ZXIpOworfQorCitjbGFzcyBOb3RJbnN0cnVtZW50
ZWQgeworcHVibGljOgorICAgIE5vdEluc3RydW1lbnRlZChjb25zdCBjaGFyKiA9IDApIHsgfQor
ICAgIGNoYXIgbV9kYXRhWzQyXTsKK307CisKK2NsYXNzIEluc3RydW1lbnRlZCB7CitwdWJsaWM6
CisgICAgSW5zdHJ1bWVudGVkKCkgOiBtX25vdEluc3RydW1lbnRlZChuZXcgTm90SW5zdHJ1bWVu
dGVkKSB7IH0KKyAgICB2aXJ0dWFsIH5JbnN0cnVtZW50ZWQoKSB7IGRlbGV0ZSBtX25vdEluc3Ry
dW1lbnRlZDsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CisgICAgeworICAgICAgICBNZW1vcnlD
bGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBUZXN0VHlwZSk7CisgICAgICAg
IGluZm8uYWRkTWVtYmVyKG1fbm90SW5zdHJ1bWVudGVkKTsKKyAgICB9CisgICAgTm90SW5zdHJ1
bWVudGVkKiBtX25vdEluc3RydW1lbnRlZDsKK307CisKK1RFU1QoTWVtb3J5SW5zdHJ1bWVudGF0
aW9uVGVzdCwgc2l6ZU9mKQoreworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVy
OworICAgIEluc3RydW1lbnRlZCBpbnN0cnVtZW50ZWQ7CisgICAgaGVscGVyLmFkZFJvb3RPYmpl
Y3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vdEluc3RydW1lbnRlZCks
IGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVs
cGVyLnZpc2l0ZWRPYmplY3RzKCkpOworfQorCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRl
c3QsIG51bGxDaGVjaykKK3sKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsK
KyAgICBJbnN0cnVtZW50ZWQqIGluc3RydW1lbnRlZCA9IDA7CisgICAgaGVscGVyLmFkZFJvb3RP
YmplY3QoaW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoMHUsIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgaGVscGVyLnZpc2l0ZWRPYmplY3Rz
KCkpOworfQorCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHB0clZzUmVmKQorewor
ICAgIHsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CisgICAgICAg
IEluc3RydW1lbnRlZCBpbnN0cnVtZW50ZWQ7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0
KCZpbnN0cnVtZW50ZWQpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZCkg
KyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVz
KCkpOworICAgICAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOworICAg
IH0KKyAgICB7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAg
ICAgICBJbnN0cnVtZW50ZWQgaW5zdHJ1bWVudGVkOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9i
amVjdChpbnN0cnVtZW50ZWQpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vdEluc3RydW1l
bnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9Cit9CisKK1RFU1QoTWVtb3J5
SW5zdHJ1bWVudGF0aW9uVGVzdCwgb3duUHRyKQoreworICAgIEluc3RydW1lbnRhdGlvblRlc3RI
ZWxwZXIgaGVscGVyOworICAgIE93blB0cjxJbnN0cnVtZW50ZWQ+IGluc3RydW1lbnRlZChhZG9w
dFB0cihuZXcgSW5zdHJ1bWVudGVkKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1
bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90
SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVY
UEVDVF9FUSgyLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Cit9CisKK2NsYXNzIEluc3RydW1l
bnRlZFJlZlB0ciA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3RydW1lbnRlZFJlZlB0cj4geworcHVi
bGljOgorICAgIEluc3RydW1lbnRlZFJlZlB0cigpIDogbV9ub3RJbnN0cnVtZW50ZWQobmV3IE5v
dEluc3RydW1lbnRlZCkgeyB9CisgICAgdmlydHVhbCB+SW5zdHJ1bWVudGVkUmVmUHRyKCkgeyBk
ZWxldGUgbV9ub3RJbnN0cnVtZW50ZWQ7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnN0cnVt
ZW50ZWRSZWZQdHI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnN0cnVtZW50ZWRS
ZWZQdHIoKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAorICAgIHsKKyAgICAgICAgTWVtb3J5
Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgVGVzdFR5cGUpOworICAgICAg
ICBpbmZvLmFkZE1lbWJlcihtX25vdEluc3RydW1lbnRlZCk7CisgICAgfQorICAgIE5vdEluc3Ry
dW1lbnRlZCogbV9ub3RJbnN0cnVtZW50ZWQ7Cit9OworCitURVNUKE1lbW9yeUluc3RydW1lbnRh
dGlvblRlc3QsIHJlZlB0cikKK3sKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBl
cjsKKyAgICBSZWZQdHI8SW5zdHJ1bWVudGVkUmVmUHRyPiBpbnN0cnVtZW50ZWRSZWZQdHIoYWRv
cHRSZWYobmV3IEluc3RydW1lbnRlZFJlZlB0cikpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0
KGluc3RydW1lbnRlZFJlZlB0cik7CisgICAgRVhQRUNUX0VRKHNpemVvZihJbnN0cnVtZW50ZWRS
ZWZQdHIpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JB
bGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwor
fQorCitjbGFzcyBJbnN0cnVtZW50ZWRXaXRoT3duUHRyIDogcHVibGljIEluc3RydW1lbnRlZCB7
CitwdWJsaWM6CisgICAgSW5zdHJ1bWVudGVkV2l0aE93blB0cigpIDogbV9ub3RJbnN0cnVtZW50
ZWRPd25QdHIoYWRvcHRQdHIobmV3IE5vdEluc3RydW1lbnRlZCkpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdElu
Zm8pIGNvbnN0CisgICAgeworICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBUZXN0VHlwZSk7CisgICAgICAgIEluc3RydW1lbnRlZDo6cmVwb3J0TWVt
b3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fbm90
SW5zdHJ1bWVudGVkT3duUHRyKTsKKyAgICB9CisgICAgT3duUHRyPE5vdEluc3RydW1lbnRlZD4g
bV9ub3RJbnN0cnVtZW50ZWRPd25QdHI7Cit9OworCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlv
blRlc3QsIG93blB0ck5vdEluc3RydW1lbnRlZCkKK3sKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0
SGVscGVyIGhlbHBlcjsKKyAgICBJbnN0cnVtZW50ZWRXaXRoT3duUHRyIGluc3RydW1lbnRlZFdp
dGhPd25QdHI7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoaW5zdHJ1bWVudGVkV2l0aE93blB0
cik7CisgICAgRVhQRUNUX0VRKDIgKiBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSwgaGVscGVyLnJl
cG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIudmlzaXRl
ZE9iamVjdHMoKSk7Cit9CisKK2NsYXNzIEluc3RydW1lbnRlZFVuZGVmaW5lZCB7CitwdWJsaWM6
CisgICAgSW5zdHJ1bWVudGVkVW5kZWZpbmVkKCkgOiBtX2RhdGEoMCkgeyB9CisKKyAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNv
bnN0CisgICAgeworICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZv
LCB0aGlzKTsKKyAgICB9CisgICAgaW50IG1fZGF0YTsKK307CisKK2NsYXNzIEluc3RydW1lbnRl
ZERPTSB7CitwdWJsaWM6CisgICAgSW5zdHJ1bWVudGVkRE9NKCkgOiBtX2luc3RydW1lbnRlZFVu
ZGVmaW5lZChhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkVW5kZWZpbmVkKSkgeyB9CisKKyAgICB2
b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0CisgICAgeworICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJ
bmZvLCB0aGlzLCBUZXN0VHlwZSk7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1faW5zdHJ1bWVu
dGVkVW5kZWZpbmVkKTsKKyAgICB9CisgICAgT3duUHRyPEluc3RydW1lbnRlZFVuZGVmaW5lZD4g
bV9pbnN0cnVtZW50ZWRVbmRlZmluZWQ7Cit9OworCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlv
blRlc3QsIG93bmVyVHlwZVByb3BhZ2F0aW9uKQoreworICAgIEluc3RydW1lbnRhdGlvblRlc3RI
ZWxwZXIgaGVscGVyOworICAgIE93blB0cjxJbnN0cnVtZW50ZWRET00+IGluc3RydW1lbnRlZERP
TShhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkRE9NKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmpl
Y3QoaW5zdHJ1bWVudGVkRE9NKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEluc3RydW1lbnRlZERP
TSkgKyBzaXplb2YoSW5zdHJ1bWVudGVkVW5kZWZpbmVkKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZv
ckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkRE9NKSArIHNp
emVvZihJbnN0cnVtZW50ZWRVbmRlZmluZWQpLCBoZWxwZXIudG90YWxTaXplKFRlc3RUeXBlKSk7
CisgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKK30KKworY2xhc3Mg
Tm9uVmlydHVhbEluc3RydW1lbnRlZCB7CitwdWJsaWM6CisgICAgdm9pZCByZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAorICAgIHsKKyAg
ICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgVGVzdFR5
cGUpOworICAgICAgICBpbmZvLmFkZE1lbWJlcihtX2luc3RydW1lbnRlZCk7CisgICAgfQorCisg
ICAgSW5zdHJ1bWVudGVkIG1faW5zdHJ1bWVudGVkOworfTsKKworVEVTVChNZW1vcnlJbnN0cnVt
ZW50YXRpb25UZXN0LCB2aXNpdEZpcnN0TWVtYmVySW5Ob25WaXJ0dWFsQ2xhc3MpCit7CisgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CisgICAgTm9uVmlydHVhbEluc3RydW1l
bnRlZCBub25WaXJ0dWFsSW5zdHJ1bWVudGVkOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KCZu
b25WaXJ0dWFsSW5zdHJ1bWVudGVkKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKE5vblZpcnR1YWxJ
bnN0cnVtZW50ZWQpICsgc2l6ZW9mKE5vdEluc3RydW1lbnRlZCksIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLnZpc2l0ZWRPYmplY3Rz
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zdHJ1bWVudGVkT3duZXIg
eworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+CisgICAgSW5zdHJ1bWVudGVkT3du
ZXIoY29uc3QgViYgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9CisgICAgSW5zdHJ1bWVudGVk
T3duZXIoKSB7IH0KKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
IG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CisgICAgeworICAgICAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBUZXN0VHlwZSk7CisgICAgICAgIGluZm8uYWRk
TWVtYmVyKG1fdmFsdWUpOworICAgIH0KKworICAgIFQgbV92YWx1ZTsKK307CisKK1RFU1QoTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmlzaXRTdHJpbmdzKQoreworICAgIHsgLy8gOC1iaXQg
c3RyaW5nLgorICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKKyAgICAg
ICAgSW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nPiBzdHJpbmdJbnN0cnVtZW50ZWRPd25lcigiU3Ry
aW5nIik7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHN0cmluZ0luc3RydW1lbnRlZE93
bmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSArIHN0cmluZ0luc3Ry
dW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxU
eXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsK
KyAgICB9CisKKyAgICB7IC8vIDgtYml0IHN0cmluZyB3aXRoIDE2Yml0IHNoYWRvdy4KKyAgICAg
ICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CisgICAgICAgIEluc3RydW1lbnRl
ZE93bmVyPFN0cmluZz4gc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIoIlN0cmluZyIpOworICAgICAg
ICBzdHJpbmdJbnN0cnVtZW50ZWRPd25lci5tX3ZhbHVlLmNoYXJhY3RlcnMoKTsKKyAgICAgICAg
aGVscGVyLmFkZFJvb3RPYmplY3Qoc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBF
WFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ0ltcGwpICsgc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92
YWx1ZS5sZW5ndGgoKSAqIChzaXplb2YoTENoYXIpICsgc2l6ZW9mKFVDaGFyKSksIGhlbHBlci5y
ZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52
aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9CisKKyAgICB7IC8vIDE2IGJpdCBzdHJpbmcuCisgICAg
ICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAgICAgICBTdHJpbmcgc3Ry
aW5nKCJTdHJpbmciKTsKKyAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nPiBzdHJpbmdJ
bnN0cnVtZW50ZWRPd25lcihTdHJpbmcoc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0
aCgpKSk7CisgICAgICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHN0cmluZ0luc3RydW1lbnRlZE93
bmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSArIHN0cmluZ0luc3Ry
dW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCBoZWxwZXIucmVw
b3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIudmlz
aXRlZE9iamVjdHMoKSk7CisgICAgfQorCisgICAgeyAvLyBBU0NJSUxpdGVyYWwKKyAgICAgICAg
SW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCBs
aXRlcmFsKCJTdHJpbmciKTsKKyAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nPiBzdHJp
bmdJbnN0cnVtZW50ZWRPd25lcihsaXRlcmFsKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmpl
Y3Qoc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0
cmluZ0ltcGwpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgICAgIEVY
UEVDVF9FUSgxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7CisgICAgfQorCisgICAgeyAvLyBa
ZXJvIHRlcm1pbmF0ZWQgaW50ZXJuYWwgYnVmZmVyLgorICAgICAgICBJbnN0cnVtZW50YXRpb25U
ZXN0SGVscGVyIGhlbHBlcjsKKyAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8U3RyaW5nPiBzdHJp
bmdJbnN0cnVtZW50ZWRPd25lcigic3RyaW5nIik7CisgICAgICAgIHN0cmluZ0luc3RydW1lbnRl
ZE93bmVyLm1fdmFsdWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKTsKKyAgICAgICAg
aGVscGVyLmFkZFJvb3RPYmplY3Qoc3RyaW5nSW5zdHJ1bWVudGVkT3duZXIpOworICAgICAgICBF
WFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ0ltcGwpICsgKHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1f
dmFsdWUubGVuZ3RoKCkgKyAxKSAqIChzaXplb2YoTENoYXIpICsgc2l6ZW9mKFVDaGFyKSksIGhl
bHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGhl
bHBlci52aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9CisKKyAgICB7IC8vIFN1YnN0cmluZworICAg
ICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKKyAgICAgICAgU3RyaW5nIGJh
c2VTdHJpbmcoIlN0cmluZyIpOworICAgICAgICBiYXNlU3RyaW5nLmNoYXJhY3RlcnMoKTsgLy8g
Rm9yY2UgMTYgc2hhZG93IGNyZWF0aW9uLgorICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJp
bmc+IHN0cmluZ0luc3RydW1lbnRlZE93bmVyKGJhc2VTdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0lt
cGwoMSwgNCkpOworICAgICAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChzdHJpbmdJbnN0cnVtZW50
ZWRPd25lcik7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoU3RyaW5nSW1wbCkgKiAyICsgYmFz
ZVN0cmluZy5sZW5ndGgoKSAqIChzaXplb2YoTENoYXIpICsgc2l6ZW9mKFVDaGFyKSksIGhlbHBl
ci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDMsIGhlbHBl
ci52aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9CisKKyAgICB7IC8vIE93bmVkIGJ1ZmZlci4KKyAg
ICAgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7CisgICAgICAgIFN0cmluZ0J1
ZmZlcjxMQ2hhcj4gYnVmZmVyKDYpOworICAgICAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJpbmc+
IHN0cmluZ0luc3RydW1lbnRlZE93bmVyKFN0cmluZzo6YWRvcHQoYnVmZmVyKSk7CisgICAgICAg
IGhlbHBlci5hZGRSb290T2JqZWN0KHN0cmluZ0luc3RydW1lbnRlZE93bmVyKTsKKyAgICAgICAg
RVhQRUNUX0VRKHNpemVvZihTdHJpbmdJbXBsKSArIHN0cmluZ0luc3RydW1lbnRlZE93bmVyLm1f
dmFsdWUubGVuZ3RoKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAgICAgICBJbnN0
cnVtZW50ZWRPd25lcjxBdG9taWNTdHJpbmc+IGF0b21pY1N0cmluZ0luc3RydW1lbnRlZE93bmVy
KCJBdG9taWNTdHJpbmciKTsKKyAgICAgICAgYXRvbWljU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIu
bV92YWx1ZS5zdHJpbmcoKS5jaGFyYWN0ZXJzKCk7IC8vIEZvcmNlIDE2Yml0IHNoYWRvdyBjcmVh
dGlvbi4KKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoYXRvbWljU3RyaW5nSW5zdHJ1bWVu
dGVkT3duZXIpOworICAgICAgICBFWFBFQ1RfRVEoc2l6ZW9mKFN0cmluZ0ltcGwpICsgYXRvbWlj
U3RyaW5nSW5zdHJ1bWVudGVkT3duZXIubV92YWx1ZS5sZW5ndGgoKSAqIChzaXplb2YoTENoYXIp
ICsgc2l6ZW9mKFVDaGFyKSksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAgICAgICBJ
bnN0cnVtZW50ZWRPd25lcjxDU3RyaW5nPiBjU3RyaW5nSW5zdHJ1bWVudGVkT3duZXIoIkNTdHJp
bmciKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3QoY1N0cmluZ0luc3RydW1lbnRlZE93
bmVyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNpemVvZihXVEY6OkNTdHJpbmdCdWZmZXIpICsgY1N0
cmluZ0luc3RydW1lbnRlZE93bmVyLm1fdmFsdWUubGVuZ3RoKCksIGhlbHBlci5yZXBvcnRlZFNp
emVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2Jq
ZWN0cygpKTsKKyAgICB9Cit9CisKK2NsYXNzIFR3b1BvaW50ZXJzVG9SZWZQdHIgeworcHVibGlj
OgorICAgIFR3b1BvaW50ZXJzVG9SZWZQdHIoY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+JiB2YWx1
ZSkgOiBtX3B0cjEoJnZhbHVlKSwgbV9wdHIyKCZ2YWx1ZSkgIHsgfQorICAgIHZvaWQgcmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKKyAg
ICB7CisgICAgICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMs
IFRlc3RUeXBlKTsKKyAgICAgICAgaW5mby5hZGRNZW1iZXIobV9wdHIxKTsKKyAgICAgICAgaW5m
by5hZGRNZW1iZXIobV9wdHIyKTsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8U3RyaW5nSW1w
bD4qIG1fcHRyMTsKKyAgICBjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4qIG1fcHRyMjsKK307CisK
K1RFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgcmVmUHRyUHRyKQoreworICAgIEluc3Ry
dW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWZQ
dHI7CisgICAgVHdvUG9pbnRlcnNUb1JlZlB0ciByb290KHJlZlB0cik7CisgICAgaGVscGVyLmFk
ZFJvb3RPYmplY3Qocm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihSZWZQdHI8U3RyaW5nSW1w
bD4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEs
IGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKK30KKworY2xhc3MgVHdvUG9pbnRlcnNUb093blB0
ciB7CitwdWJsaWM6CisgICAgVHdvUG9pbnRlcnNUb093blB0cihjb25zdCBPd25QdHI8Tm90SW5z
dHJ1bWVudGVkPiYgdmFsdWUpIDogbV9wdHIxKCZ2YWx1ZSksIG1fcHRyMigmdmFsdWUpICB7IH0K
KyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVj
dEluZm8pIGNvbnN0CisgICAgeworICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlP
YmplY3RJbmZvLCB0aGlzLCBUZXN0VHlwZSk7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fcHRy
MSk7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fcHRyMik7CisgICAgfQorCisgICAgY29uc3Qg
T3duUHRyPE5vdEluc3RydW1lbnRlZD4qIG1fcHRyMTsKKyAgICBjb25zdCBPd25QdHI8Tm90SW5z
dHJ1bWVudGVkPiogbV9wdHIyOworfTsKKworVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0
LCBvd25QdHJQdHIpCit7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBoZWxwZXI7Cisg
ICAgT3duUHRyPE5vdEluc3RydW1lbnRlZD4gb3duUHRyOworICAgIFR3b1BvaW50ZXJzVG9Pd25Q
dHIgcm9vdChvd25QdHIpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVY
UEVDVF9FUShzaXplb2YoT3duUHRyPE5vdEluc3RydW1lbnRlZD4pLCBoZWxwZXIucmVwb3J0ZWRT
aXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0
cygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc3RydW1lbnRlZFRlbXBs
YXRlIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgorICAgIEluc3RydW1lbnRl
ZFRlbXBsYXRlKGNvbnN0IFYmIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWVtb3J5T2JqZWN0SW5mbz4KKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CisgICAgeworICAg
ICAgICB0eXBlbmFtZSBNZW1vcnlPYmplY3RJbmZvOjpDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBUZXN0VHlwZSk7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fdmFsdWUp
OworICAgIH0KKworICAgIFQgbV92YWx1ZTsKK307CisKK1RFU1QoTWVtb3J5SW5zdHJ1bWVudGF0
aW9uVGVzdCwgZGV0ZWN0UmVwb3J0TWVtb3J5VXNhZ2VNZXRob2QpCit7CisgICAgeworICAgICAg
ICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKKworICAgICAgICBPd25QdHI8SW5z
dHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPiA+IHZhbHVlID0gYWRvcHRQdHIobmV3IEluc3RydW1l
bnRlZFRlbXBsYXRlPFN0cmluZz4oIiIpKTsKKyAgICAgICAgSW5zdHJ1bWVudGVkT3duZXI8SW5z
dHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPiogPiByb290KHZhbHVlLmdldCgpKTsKKyAgICAgICAg
aGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5z
dHJ1bWVudGVkVGVtcGxhdGU8U3RyaW5nPikgKyBzaXplb2YoU3RyaW5nSW1wbCksIGhlbHBlci5y
ZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAgICAgLy8gRklYTUU6IGl0IGlzIGZhaWxp
bmcgb24gQ2hyb21pdW0gQ2FuYXJ5IGJvdHMgYnV0IHdvcmtzIGZpbmUgbG9jYWxseS4KKyAgICAg
ICAgLy8gRVhQRUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9CisgICAg
eworICAgICAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKKworICAgICAgICBP
d25QdHI8SW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90SW5zdHJ1bWVudGVkPiA+IHZhbHVlID0gYWRv
cHRQdHIobmV3IEluc3RydW1lbnRlZFRlbXBsYXRlPE5vdEluc3RydW1lbnRlZD4oIiIpKTsKKyAg
ICAgICAgSW5zdHJ1bWVudGVkT3duZXI8SW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90SW5zdHJ1bWVu
dGVkPiogPiByb290KHZhbHVlLmdldCgpKTsKKyAgICAgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qo
cm9vdCk7CisgICAgICAgIEVYUEVDVF9FUShzaXplb2YoSW5zdHJ1bWVudGVkVGVtcGxhdGU8Tm90
SW5zdHJ1bWVudGVkPiksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKKyAgICB9Cit9CisKK1RF
U1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgdmVjdG9yWmVyb0lubGluZUNhcGFjaXR5KQor
eworICAgIEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAgIEluc3RydW1lbnRl
ZE93bmVyPFZlY3RvcjxpbnQ+ID4gdmVjdG9yT3duZXIoMTYpOworICAgIGhlbHBlci5hZGRSb290
T2JqZWN0KHZlY3Rvck93bmVyKTsKKyAgICBFWFBFQ1RfRVEoMTYgKiBzaXplb2YoaW50KSwgaGVs
cGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUSgxLCBoZWxwZXIu
dmlzaXRlZE9iamVjdHMoKSk7Cit9CisKK1RFU1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwg
dmVjdG9yRmllbGRXaXRoSW5saW5lQ2FwYWNpdHkpCit7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVz
dEhlbHBlciBoZWxwZXI7CisgICAgSW5zdHJ1bWVudGVkT3duZXI8VmVjdG9yPGludCwgND4gPiB2
ZWN0b3JPd25lcjsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdCh2ZWN0b3JPd25lcik7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JB
bGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMCwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOwor
fQorCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIHZlY3RvckZpZWxkV2l0aElubGlu
ZUNhcGFjaXR5UmVzaXplZCkKK3sKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBl
cjsKKyAgICBJbnN0cnVtZW50ZWRPd25lcjxWZWN0b3I8aW50LCA0PiA+IHZlY3Rvck93bmVyOwor
ICAgIHZlY3Rvck93bmVyLm1fdmFsdWUucmVzZXJ2ZUNhcGFjaXR5KDgpOworICAgIGhlbHBlci5h
ZGRSb290T2JqZWN0KHZlY3Rvck93bmVyKTsKKyAgICBFWFBFQ1RfRVEoOCAqIHNpemVvZihpbnQp
LCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhl
bHBlci52aXNpdGVkT2JqZWN0cygpKTsKK30KKworVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25U
ZXN0LCBoZWFwQWxsb2NhdGVkVmVjdG9yV2l0aElubGluZUNhcGFjaXR5KQoreworICAgIEluc3Ry
dW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAgIEluc3RydW1lbnRlZE93bmVyPE93blB0
cjxWZWN0b3I8aW50LCA0PiA+ID4gdmVjdG9yT3duZXI7CisgICAgdmVjdG9yT3duZXIubV92YWx1
ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8aW50LCA0PigpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9i
amVjdCh2ZWN0b3JPd25lcik7CisgICAgRVhQRUNUX0VRKHNpemVvZihWZWN0b3I8aW50LCA0Piks
IGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgaGVs
cGVyLnZpc2l0ZWRPYmplY3RzKCkpOworfQorCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRl
c3QsIGhlYXBBbGxvY2F0ZWRWZWN0b3JXaXRoSW5saW5lQ2FwYWNpdHlSZXNpemVkKQoreworICAg
IEluc3RydW1lbnRhdGlvblRlc3RIZWxwZXIgaGVscGVyOworICAgIEluc3RydW1lbnRlZE93bmVy
PE93blB0cjxWZWN0b3I8aW50LCA0PiA+ID4gdmVjdG9yT3duZXI7CisgICAgdmVjdG9yT3duZXIu
bV92YWx1ZSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8aW50LCA0PigpKTsKKyAgICB2ZWN0b3JPd25l
ci5tX3ZhbHVlLT5yZXNlcnZlQ2FwYWNpdHkoOCk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qo
dmVjdG9yT3duZXIpOworICAgIEVYUEVDVF9FUSg4ICogc2l6ZW9mKGludCkgKyBzaXplb2YoVmVj
dG9yPGludCwgND4pLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQ
RUNUX0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKK30KKworVEVTVChNZW1vcnlJbnN0
cnVtZW50YXRpb25UZXN0LCB2ZWN0b3JXaXRoSW5zdHJ1bWVudGVkVHlwZSkKK3sKKyAgICBJbnN0
cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKKworICAgIHR5cGVkZWYgVmVjdG9yPFN0cmlu
Zz4gU3RyaW5nVmVjdG9yOworICAgIE93blB0cjxTdHJpbmdWZWN0b3I+IHZhbHVlID0gYWRvcHRQ
dHIobmV3IFN0cmluZ1ZlY3RvcigpKTsKKyAgICBzaXplX3QgY291bnQgPSAxMDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHZhbHVlLT5hcHBlbmQoInN0
cmluZyIpOworICAgIEluc3RydW1lbnRlZE93bmVyPFN0cmluZ1ZlY3RvciogPiByb290KHZhbHVl
LmdldCgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICBFWFBFQ1RfRVEo
c2l6ZW9mKFN0cmluZ1ZlY3RvcikgKyBzaXplb2YoU3RyaW5nKSAqIHZhbHVlLT5jYXBhY2l0eSgp
ICsgKHNpemVvZihTdHJpbmdJbXBsKSArIDYpICogdmFsdWUtPnNpemUoKSwgaGVscGVyLnJlcG9y
dGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUShjb3VudCArIDIsIChzaXplX3Qp
aGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOworfQorCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlv
blRlc3QsIGhhc2hTZXRXaXRoSW5zdHJ1bWVudGVkVHlwZSkKK3sKKyAgICBJbnN0cnVtZW50YXRp
b25UZXN0SGVscGVyIGhlbHBlcjsKKworICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IFZhbHVl
VHlwZTsKKyAgICBPd25QdHI8VmFsdWVUeXBlPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBWYWx1ZVR5
cGUoKSk7CisgICAgc2l6ZV90IGNvdW50ID0gMTA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICB2YWx1ZS0+YWRkKFN0cmluZzo6bnVtYmVyKGkpKTsKKyAg
ICBJbnN0cnVtZW50ZWRPd25lcjxWYWx1ZVR5cGUqID4gcm9vdCh2YWx1ZS5nZXQoKSk7CisgICAg
aGVscGVyLmFkZFJvb3RPYmplY3Qocm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihWYWx1ZVR5
cGUpICsgc2l6ZW9mKFN0cmluZykgKiB2YWx1ZS0+Y2FwYWNpdHkoKSArIChzaXplb2YoU3RyaW5n
SW1wbCkgKyAxKSAqIHZhbHVlLT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBl
cygpKTsKKyAgICBFWFBFQ1RfRVEoY291bnQgKyAxLCAoc2l6ZV90KWhlbHBlci52aXNpdGVkT2Jq
ZWN0cygpKTsKK30KKworVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoYXNoTWFwV2l0
aE5vdEluc3RydW1lbnRlZEtleXNBbmRWYWx1ZXMpCit7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVz
dEhlbHBlciBoZWxwZXI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBpbnQ+IEludFRvSW50
TWFwOworICAgIE93blB0cjxJbnRUb0ludE1hcD4gdmFsdWUgPSBhZG9wdFB0cihuZXcgSW50VG9J
bnRNYXAoKSk7CisgICAgc2l6ZV90IGNvdW50ID0gMTA7CisgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPD0gY291bnQ7ICsraSkKKyAgICAgICAgdmFsdWUtPnNldChpLCBpKTsKKyAgICBJbnN0cnVt
ZW50ZWRPd25lcjxJbnRUb0ludE1hcCogPiByb290KHZhbHVlLmdldCgpKTsKKyAgICBoZWxwZXIu
YWRkUm9vdE9iamVjdChyb290KTsKKyAgICBFWFBFQ1RfRVEoc2l6ZW9mKEludFRvSW50TWFwKSAr
IHNpemVvZihJbnRUb0ludE1hcDo6VmFsdWVUeXBlKSAqIHZhbHVlLT5jYXBhY2l0eSgpLCBoZWxw
ZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKDEsIGhlbHBlci52
aXNpdGVkT2JqZWN0cygpKTsKK30KKworVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBo
YXNoTWFwV2l0aEluc3RydW1lbnRlZEtleXMpCit7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IFN0cmluZ1Rv
SW50TWFwOworICAgIE93blB0cjxTdHJpbmdUb0ludE1hcD4gdmFsdWUgPSBhZG9wdFB0cihuZXcg
U3RyaW5nVG9JbnRNYXAoKSk7CisgICAgaW50IGNvdW50ID0gMTA7CisgICAgZm9yIChpbnQgaSA9
IDEwOyBpIDwgMTAgKyBjb3VudDsgKytpKQorICAgICAgICB2YWx1ZS0+c2V0KFN0cmluZzo6bnVt
YmVyKGkpLCBpKTsKKyAgICBJbnN0cnVtZW50ZWRPd25lcjxTdHJpbmdUb0ludE1hcCogPiByb290
KHZhbHVlLmdldCgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICBFWFBF
Q1RfRVEoc2l6ZW9mKFN0cmluZ1RvSW50TWFwKSArIHNpemVvZihTdHJpbmdUb0ludE1hcDo6VmFs
dWVUeXBlKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgKHNpemVvZihTdHJpbmdJbXBsKSArIDIpICog
dmFsdWUtPnNpemUoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVY
UEVDVF9FUShjb3VudCArIDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKK30KKworVEVTVChN
ZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoYXNoTWFwV2l0aEluc3RydW1lbnRlZFZhbHVlcykK
K3sKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKKworICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQsIFN0cmluZz4gSW50VG9TdHJpbmdNYXA7CisgICAgT3duUHRyPEludFRvU3Ry
aW5nTWFwPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBJbnRUb1N0cmluZ01hcCgpKTsKKyAgICBpbnQg
Y291bnQgPSAxMDsKKyAgICBmb3IgKGludCBpID0gMTA7IGkgPCAxMCArIGNvdW50OyArK2kpCisg
ICAgICAgIHZhbHVlLT5zZXQoaSwgU3RyaW5nOjpudW1iZXIoaSkpOworICAgIEluc3RydW1lbnRl
ZE93bmVyPEludFRvU3RyaW5nTWFwKiA+IHJvb3QodmFsdWUuZ2V0KCkpOworICAgIGhlbHBlci5h
ZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVYUEVDVF9FUShzaXplb2YoSW50VG9TdHJpbmdNYXAp
ICsgc2l6ZW9mKEludFRvU3RyaW5nTWFwOjpWYWx1ZVR5cGUpICogdmFsdWUtPmNhcGFjaXR5KCkg
KyAoc2l6ZW9mKFN0cmluZ0ltcGwpICsgMikgKiB2YWx1ZS0+c2l6ZSgpLCBoZWxwZXIucmVwb3J0
ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNUX0VRKGNvdW50ICsgMSwgaGVscGVyLnZp
c2l0ZWRPYmplY3RzKCkpOworfQorCitURVNUKE1lbW9yeUluc3RydW1lbnRhdGlvblRlc3QsIGhh
c2hNYXBXaXRoSW5zdHJ1bWVudGVkS2V5c0FuZFZhbHVlcykKK3sKKyAgICBJbnN0cnVtZW50YXRp
b25UZXN0SGVscGVyIGhlbHBlcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gU3RyaW5nVG9TdHJpbmdNYXA7CisgICAgT3duUHRyPFN0cmluZ1RvU3RyaW5nTWFwPiB2YWx1
ZSA9IGFkb3B0UHRyKG5ldyBTdHJpbmdUb1N0cmluZ01hcCgpKTsKKyAgICBpbnQgY291bnQgPSAx
MDsKKyAgICBmb3IgKGludCBpID0gMTA7IGkgPCAxMCArIGNvdW50OyArK2kpCisgICAgICAgIHZh
bHVlLT5zZXQoU3RyaW5nOjpudW1iZXIoY291bnQgKyBpKSwgU3RyaW5nOjpudW1iZXIoaSkpOwor
ICAgIEluc3RydW1lbnRlZE93bmVyPFN0cmluZ1RvU3RyaW5nTWFwKiA+IHJvb3QodmFsdWUuZ2V0
KCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJvb3QpOworICAgIEVYUEVDVF9FUShzaXpl
b2YoU3RyaW5nVG9TdHJpbmdNYXApICsgc2l6ZW9mKFN0cmluZ1RvU3RyaW5nTWFwOjpWYWx1ZVR5
cGUpICogdmFsdWUtPmNhcGFjaXR5KCkgKyAyICogKHNpemVvZihTdHJpbmdJbXBsKSArIDIpICog
dmFsdWUtPnNpemUoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZvckFsbFR5cGVzKCkpOworICAgIEVY
UEVDVF9FUSgyICogY291bnQgKyAxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Cit9CisKK1RF
U1QoTWVtb3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGFzaE1hcFdpdGhJbnN0cnVtZW50ZWRQb2lu
dGVyS2V5c0FuZFBvaW50ZXJWYWx1ZXMpCit7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBl
ciBoZWxwZXI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8SW5zdHJ1bWVudGVkKiwgSW5zdHJ1bWVu
dGVkKj4gSW5zdHJ1bWVudGVkVG9JbnN0cnVtZW50ZWRNYXA7CisgICAgT3duUHRyPEluc3RydW1l
bnRlZFRvSW5zdHJ1bWVudGVkTWFwPiB2YWx1ZSA9IGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWRU
b0luc3RydW1lbnRlZE1hcCgpKTsKKyAgICBWZWN0b3I8T3duUHRyPEluc3RydW1lbnRlZD4gPiB2
YWx1ZXNWZWN0b3I7CisgICAgaW50IGNvdW50ID0gMTA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgIHZhbHVlc1ZlY3Rvci5hcHBlbmQoYWRvcHRQdHIobmV3
IEluc3RydW1lbnRlZCgpKSk7CisgICAgICAgIHZhbHVlc1ZlY3Rvci5hcHBlbmQoYWRvcHRQdHIo
bmV3IEluc3RydW1lbnRlZCgpKSk7CisgICAgICAgIHZhbHVlLT5zZXQodmFsdWVzVmVjdG9yWzIg
KiBpXS5nZXQoKSwgdmFsdWVzVmVjdG9yWzIgKiBpICsgMV0uZ2V0KCkpOworICAgIH0KKyAgICBJ
bnN0cnVtZW50ZWRPd25lcjxJbnN0cnVtZW50ZWRUb0luc3RydW1lbnRlZE1hcCogPiByb290KHZh
bHVlLmdldCgpKTsKKyAgICBoZWxwZXIuYWRkUm9vdE9iamVjdChyb290KTsKKyAgICBFWFBFQ1Rf
RVEoc2l6ZW9mKEluc3RydW1lbnRlZFRvSW5zdHJ1bWVudGVkTWFwKSArIHNpemVvZihJbnN0cnVt
ZW50ZWRUb0luc3RydW1lbnRlZE1hcDo6VmFsdWVUeXBlKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsg
MiAqIChzaXplb2YoSW5zdHJ1bWVudGVkKSArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQpKSAqIHZh
bHVlLT5zaXplKCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMiAqIDIgKiBjb3VudCArIDEsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKK30KKwor
Y2xhc3MgSW5zdHJ1bWVudGVkQ29udmVydGlibGVUb0ludCB7CitwdWJsaWM6CisgICAgSW5zdHJ1
bWVudGVkQ29udmVydGlibGVUb0ludCgpIDogbV9ub3RJbnN0cnVtZW50ZWQoMCkgeyB9CisgICAg
dmlydHVhbCB+SW5zdHJ1bWVudGVkQ29udmVydGlibGVUb0ludCgpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdElu
Zm8pIGNvbnN0CisgICAgeworICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBUZXN0VHlwZSk7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fbm90SW5z
dHJ1bWVudGVkKTsKKyAgICB9CisKKyAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiAy
MDEyOyB9CisKKyAgICBOb3RJbnN0cnVtZW50ZWQqIG1fbm90SW5zdHJ1bWVudGVkOworfTsKKwor
Ly8gVGhpcyB0ZXN0IGNoZWNrcyBpZiByZXBvcnRNZW1vcnlVc2FnZSBtZXRob2Qgd2lsbCBiZSBj
YWxsZWQgb24gYSBjbGFzcworLy8gdGhhdCBjYW4gYmUgaW1wbGljaXRseSBjYXN0IHRvIGludC4g
Q3VycmVudGx5IG9iamVjdHMgb2Ygc3VjaCBjbGFzc2VzIGFyZQorLy8gdHJlYXRlZCBhcyBpbnRl
Z2VycyB3aGVuIHRoZXkgYXJlIHN0b3JlZCBpbiBhIEhhc2hNYXAgYnkgdmFsdWUgYW5kCisvLyBy
ZXBvcnRNZW1vcnlVc2FnZSB3aWxsIG5vdCBiZSBjYWxsZWQgb24gdGhlbS4gV2UgbWF5IGZpeCB0
aGF0IGxhdGVyLgorVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoYXNoTWFwV2l0aFZh
bHVlc0NvbnZlcnRpYmxlVG9JbnQpCit7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhlbHBlciBo
ZWxwZXI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8SW5zdHJ1bWVudGVkQ29udmVydGlibGVUb0lu
dCosIEluc3RydW1lbnRlZENvbnZlcnRpYmxlVG9JbnQ+IFRlc3RNYXA7CisgICAgT3duUHRyPFRl
c3RNYXA+IHZhbHVlID0gYWRvcHRQdHIobmV3IFRlc3RNYXAoKSk7CisgICAgVmVjdG9yPE93blB0
cjxJbnN0cnVtZW50ZWRDb252ZXJ0aWJsZVRvSW50PiA+IGtleXNWZWN0b3I7CisgICAgVmVjdG9y
PE93blB0cjxOb3RJbnN0cnVtZW50ZWQ+ID4gdmFsdWVzVmVjdG9yOworICAgIGludCBjb3VudCA9
IDEwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBrZXlz
VmVjdG9yLmFwcGVuZChhZG9wdFB0cihuZXcgSW5zdHJ1bWVudGVkQ29udmVydGlibGVUb0ludCgp
KSk7CisgICAgICAgIHZhbHVlc1ZlY3Rvci5hcHBlbmQoYWRvcHRQdHIobmV3IE5vdEluc3RydW1l
bnRlZCgpKSk7CisgICAgICAgIHZhbHVlLT5zZXQoa2V5c1ZlY3RvcltpXS5nZXQoKSwgSW5zdHJ1
bWVudGVkQ29udmVydGlibGVUb0ludCgpKS5pdGVyYXRvci0+dmFsdWUubV9ub3RJbnN0cnVtZW50
ZWQgPSB2YWx1ZXNWZWN0b3JbaV0uZ2V0KCk7CisgICAgfQorICAgIEluc3RydW1lbnRlZE93bmVy
PFRlc3RNYXAqID4gcm9vdCh2YWx1ZS5nZXQoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmplY3Qo
cm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihUZXN0TWFwKSArIHNpemVvZihUZXN0TWFwOjpW
YWx1ZVR5cGUpICogdmFsdWUtPmNhcGFjaXR5KCkgKworICAgICAgICBzaXplb2YoSW5zdHJ1bWVu
dGVkQ29udmVydGlibGVUb0ludCkgKiBjb3VudCAvKiArIHNpemVvZihOb3RJbnN0cnVtZW50ZWQp
ICogY291bnQgKi8sIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBF
Q1RfRVEoY291bnQgKyAxLCBoZWxwZXIudmlzaXRlZE9iamVjdHMoKSk7Cit9CisKK1RFU1QoTWVt
b3J5SW5zdHJ1bWVudGF0aW9uVGVzdCwgaGFzaE1hcFdpdGhFbnVtS2V5c0FuZEluc3RydW1lbnRl
ZFZhbHVlcykKK3sKKyAgICBJbnN0cnVtZW50YXRpb25UZXN0SGVscGVyIGhlbHBlcjsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxUZXN0RW51bSwgU3RyaW5nPiBFbnVtVG9TdHJpbmdNYXA7CisgICAg
T3duUHRyPEVudW1Ub1N0cmluZ01hcD4gdmFsdWUgPSBhZG9wdFB0cihuZXcgRW51bVRvU3RyaW5n
TWFwKCkpOworICAgIGludCBjb3VudCA9IE1ZX0VOVU1fTUFYOworICAgIGZvciAoaW50IGkgPSBP
TkU7IGkgPD0gY291bnQ7ICsraSkKKyAgICAgICAgdmFsdWUtPnNldChzdGF0aWNfY2FzdDxUZXN0
RW51bT4oaSksIFN0cmluZzo6bnVtYmVyKGkpKTsKKyAgICBJbnN0cnVtZW50ZWRPd25lcjxFbnVt
VG9TdHJpbmdNYXAqID4gcm9vdCh2YWx1ZS5nZXQoKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmpl
Y3Qocm9vdCk7CisgICAgRVhQRUNUX0VRKHNpemVvZihFbnVtVG9TdHJpbmdNYXApICsgc2l6ZW9m
KEVudW1Ub1N0cmluZ01hcDo6VmFsdWVUeXBlKSAqIHZhbHVlLT5jYXBhY2l0eSgpICsgKHNpemVv
ZihTdHJpbmdJbXBsKSArIDEpICogdmFsdWUtPnNpemUoKSwgaGVscGVyLnJlcG9ydGVkU2l6ZUZv
ckFsbFR5cGVzKCkpOworICAgIEVYUEVDVF9FUShjb3VudCArIDEsIGhlbHBlci52aXNpdGVkT2Jq
ZWN0cygpKTsKK30KKworVEVTVChNZW1vcnlJbnN0cnVtZW50YXRpb25UZXN0LCBoYXNoQ291bnRl
ZFNldFdpdGhJbnN0cnVtZW50ZWRWYWx1ZXMpCit7CisgICAgSW5zdHJ1bWVudGF0aW9uVGVzdEhl
bHBlciBoZWxwZXI7CisKKyAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PEluc3RydW1lbnRlZCo+
IFRlc3RTZXQ7CisgICAgT3duUHRyPFRlc3RTZXQ+IHNldCA9IGFkb3B0UHRyKG5ldyBUZXN0U2V0
KCkpOworICAgIFZlY3RvcjxPd25QdHI8SW5zdHJ1bWVudGVkPiA+IGtleXNWZWN0b3I7CisgICAg
aW50IGNvdW50ID0gMTA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgIGtleXNWZWN0b3IuYXBwZW5kKGFkb3B0UHRyKG5ldyBJbnN0cnVtZW50ZWQoKSkpOwor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBpOyBqKyspCisgICAgICAgICAgICBzZXQtPmFk
ZChrZXlzVmVjdG9yLmxhc3QoKS5nZXQoKSk7CisgICAgfQorICAgIEluc3RydW1lbnRlZE93bmVy
PFRlc3RTZXQqID4gcm9vdChzZXQuZ2V0KCkpOworICAgIGhlbHBlci5hZGRSb290T2JqZWN0KHJv
b3QpOworICAgIEVYUEVDVF9FUShzaXplb2YoVGVzdFNldCkgKyBzaXplb2YoSGFzaE1hcDxJbnN0
cnVtZW50ZWQqLCB1bnNpZ25lZD46OlZhbHVlVHlwZSkgKiBzZXQtPmNhcGFjaXR5KCkgKyAoc2l6
ZW9mKEluc3RydW1lbnRlZCkgKyBzaXplb2YoTm90SW5zdHJ1bWVudGVkKSkgICogc2V0LT5zaXpl
KCksIGhlbHBlci5yZXBvcnRlZFNpemVGb3JBbGxUeXBlcygpKTsKKyAgICBFWFBFQ1RfRVEoMiAq
IGNvdW50ICsgMSwgaGVscGVyLnZpc2l0ZWRPYmplY3RzKCkpOworfQorCitURVNUKE1lbW9yeUlu
c3RydW1lbnRhdGlvblRlc3QsIGFycmF5QnVmZmVyKQoreworICAgIEluc3RydW1lbnRhdGlvblRl
c3RIZWxwZXIgaGVscGVyOworCisgICAgdHlwZWRlZiBJbnN0cnVtZW50ZWRUZW1wbGF0ZTxSZWZQ
dHI8QXJyYXlCdWZmZXI+ID4gVmFsdWVUeXBlOworICAgIFZhbHVlVHlwZSB2YWx1ZShBcnJheUJ1
ZmZlcjo6Y3JlYXRlKDEwMDAsIHNpemVvZihpbnQpKSk7CisgICAgaGVscGVyLmFkZFJvb3RPYmpl
Y3QodmFsdWUpOworICAgIEVYUEVDVF9FUShzaXplb2YoaW50KSAqIDEwMDAgKyBzaXplb2YoQXJy
YXlCdWZmZXIpLCBoZWxwZXIucmVwb3J0ZWRTaXplRm9yQWxsVHlwZXMoKSk7CisgICAgRVhQRUNU
X0VRKDIsIGhlbHBlci52aXNpdGVkT2JqZWN0cygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwo=
</data>
<flag name="review"
          id="181130"
          type_id="1"
          status="+"
          setter="yurys"
    />
    <flag name="commit-queue"
          id="181137"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>